嗨我对Linux内核开发很感兴趣,但我无法理解一些重要的概念。
首先,是一个设备驱动程序编程器和嵌入式程序员两个完全不同的工作?
我的意思是我知道嵌入式程序员可以使用固件和电路以及类似的东西
但设备驱动程序员也会做同样的事情吗?
其次,我听说通过编写设备驱动程序来启动Linux内核开发是很好的。
这是否意味着您必须掌握设备驱动程序?
坦率地说,我想知道每个程序员到底做了什么
我真正想要的是了解基于ARM和x86的Linux内核并进入开发
而我只是好奇我真的必须知道所有的电路和类似的东西。
P.S,系统程序员也是一个不同的工作??答案 0 :(得分:2)
当今Linux内核中的一些概念非常复杂:调度,内存管理(MM),锁定,每个架构特有的东西,安全性等。
然而,通常情况下,设备驱动程序有点简单(即与其他驱动程序相比),因为它们的工作通常是充当用户空间接口和实际驱动设备之间的桥梁。因此,除了驱动程序API之外,它们很少使用内核的内部机制。此外,内核社区更倾向于接受设备驱动程序贡献,因为它们仅影响特定用例(而对核心的贡献,如MM或安全性,会影响每个人)。
现在,在内核端尝试任何操作之前,请确保正确理解用户空间。因为,如上所述,设备驱动程序注册当用户在表示设备的特殊文件上调用特定系统调用(系统调用)时调用的函数。然后,您必须非常了解这些系统调用。
在实际编写代码之前,请阅读一些提及here的书籍。它们是技术书籍,但您需要正确理解该主题。
另外,请阅读actual code。这可能是最好的学习方式:看看别人做了什么(毕竟,这是自由软件的本质)。您可以从查看简单的驱动程序开始,例如drivers/leds
中的驱动程序。
关于职称:“嵌入式程序员”(或嵌入式计算机工程师)当然是编写设备驱动程序的理想选择。嵌入式计算机工程师还可以编写固件,微控制器程序和实际用户空间应用程序,这些应用程序靠近硬件组件(设备控制,串行协议等)。
您无需掌握电路来编写设备驱动程序代码,但您当然需要了解核心硬件概念,如中断,内存映射I / O,时序,总线,锁定,电源管理,可能还有一些汇编语言。