1

嗨,我对 Linux 内核开发非常感兴趣,但我无法理解一些大概念。

首先,设备驱动程序员和嵌入式程序员是两个完全不同的工作吗?

我的意思是我知道嵌入式程序员会进入固件和电路之类的东西

但是设备驱动程序程序员也做同样的事情吗?

其次,听说通过写设备驱动来开始linux内核开发也不错。

这是否意味着您必须掌握设备驱动程序?

坦率地说,我想确切地知道每个程序员都在做什么

我真正想要的是了解基于 ARM 和 x86 的 linux 内核并开始开发

我只是好奇我真的必须知道所有的电路和类似的东西吗?

PS,系统程序员也是不同的工作吗?

4

1 回答 1

3

当今 Linux 内核中的一些概念非常复杂:调度、内存管理 (MM)、锁定、特定于每个架构的内容、安全性等。

然而,设备驱动程序确实有些简单(也就是说,与其他驱动程序相比),因为它们的工作通常是充当用户空间接口和实际驱动设备之间的桥梁。因此,他们很少使用内核的内部机制,当然除了驱动程序 API。此外,内核社区更倾向于接受设备驱动程序的贡献,因为它们只影响特定的用例(而对内核的贡献,如 MM 或安全性,会影响每个人)。

现在,在内核方面进行任何尝试之前,请确保正确理解用户空间。因为,如上所述,设备驱动程序注册的函数会在用户在代表设备的特殊文件上调用特定系统调用(系统调用)时被调用。然后你必须很好地理解那些系统调用。

在实际编写代码之前,请阅读这里提到的几本书。它们是技术书籍,但您需要正确理解该主题。

另外,去阅读实际代码。这可能是最好的学习方式:看看别人做了什么(这毕竟是自由软件的精髓)。您可以从查看简单的驱动程序开始,例如drivers/leds.

关于职位:“嵌入式程序员”(或嵌入式计算机工程师)当然是编写设备驱动程序的好人选。嵌入式计算机工程师还可以编写与硬件组件(设备控制、串行协议等)接近的固件、微控制器程序和实际用户空间应用程序。

您不需要掌握电路来编写设备驱动程序代码,但您当然需要了解核心硬件概念,如中断、内存映射 I/O、时序、总线、锁定、电源管理以及可能的一些汇编语言。

于 2013-11-13T05:49:53.423 回答