【问题标题】:How are device driver development and linux kernel programming related/different?设备驱动程序开发和 linux 内核编程有何相关/不同?
【发布时间】:2014-08-05 12:54:34
【问题描述】:
这可能是一个愚蠢的问题,但我很困惑,谷歌也无能为力。
我知道 Linux 是许多发行版(Ubuntu、Mint)的核心。但是当我们说“Linux 内核编程”时,我们究竟指的是什么?是 Bash 脚本吗?
它与设备驱动程序开发有什么关系? (我们的意思是说硬件运行的是 linux 内核,我们做内核编程来支持外设,这通常是与 linux 相关的设备驱动程序开发?)
【问题讨论】:
标签:
linux
linux-kernel
linux-device-driver
【解决方案1】:
Linux内核编程是涉及内核组件的东西,意思是内核数据结构和头文件。使用现有内核特性或增强当前特性的程序是内核程序,通常是内核模块。在某种程度上,甚至 Bash 脚本也可以称为 Linux 内核编程。广义上的设备驱动程序不过是一组中断处理程序。话虽如此,设备驱动程序本身就是一个内核程序,因为它使用移植到设备/硬件上的 Linux 内核功能。所以简而言之两者之间的关系是设备驱动开发是一种Linux内核编程的形式。
【解决方案2】:
基本上,您的计算机上运行着两种程序:内核,它可以访问计算机硬件,以及“用户态”程序,它要求内核执行低级操作(分配内存,向网络发送数据) , ...)。
为此,内核必须知道如何与某个给定的硬件进行交互。这就是我们所说的“设备驱动程序”。在 Linux 中,设备驱动程序作为内核模块实现,设备驱动程序编程类似于内核编程,因为您直接处理底层操作,而不是通过内核的高级操作。
Bash 脚本是编写一个 shell (Bash) 来运行用户态程序,这些程序本身使用内核来完成实际工作。 Bash 脚本是用户态编程。
【解决方案3】:
设备驱动程序开发是 Linux 内核编程的一个子集。
设备驱动程序开发是编写或修改将处理设备的内核模块。设备驱动程序是内核模块的一种特殊情况。
内核模块是在内核中工作并执行特权任务的代码。
内核模块是 Linux 内核编程不可或缺的一部分。这就是设备驱动程序开发和 Linux 内核编程的关系。前者是后者的一部分。
此外,设备驱动程序最终将被插入内核,并在内核上下文中工作。也就是说,设备驱动程序最终成为内核的一部分。
因此,驱动程序开发是 Linux 内核编程的一个子集。