当今 Linux 内核中的一些概念非常复杂:调度、内存管理 (MM)、锁定、特定于每个架构的内容、安全性等。
然而,设备驱动程序确实有些简单(也就是说,与其他驱动程序相比),因为它们的工作通常是充当用户空间接口和实际驱动设备之间的桥梁。因此,他们很少使用内核的内部机制,当然除了驱动程序 API。此外,内核社区更倾向于接受设备驱动程序的贡献,因为它们只影响特定的用例(而对内核的贡献,如 MM 或安全性,会影响每个人)。
现在,在内核方面进行任何尝试之前,请确保正确理解用户空间。因为,如上所述,设备驱动程序注册的函数会在用户在代表设备的特殊文件上调用特定系统调用(系统调用)时被调用。然后你必须很好地理解那些系统调用。
在实际编写代码之前,请阅读这里提到的几本书。它们是技术书籍,但您需要正确理解该主题。
另外,去阅读实际代码。这可能是最好的学习方式:看看别人做了什么(这毕竟是自由软件的精髓)。您可以从查看简单的驱动程序开始,例如drivers/leds
.
关于职位:“嵌入式程序员”(或嵌入式计算机工程师)当然是编写设备驱动程序的好人选。嵌入式计算机工程师还可以编写与硬件组件(设备控制、串行协议等)接近的固件、微控制器程序和实际用户空间应用程序。
您不需要掌握电路来编写设备驱动程序代码,但您当然需要了解核心硬件概念,如中断、内存映射 I/O、时序、总线、锁定、电源管理以及可能的一些汇编语言。