我正在尝试为嵌入式设备创建简约的Linux。这意味着编译内核和驱动程序的必要性。一个驱动程序由它的创建者直接为设备的板写入,因此它不是存储库。它可以编译为内核模块。
然而,由于Linux的不可变特性以及对极少使用内存的要求,我不想使用模块。我想要内核中内置的所有驱动程序。所有提供内核的驱动程序都是这样设置的。
所以我的问题是如何将一个特殊的驱动程序编译到内核?
所有搜索都没有为我提供解决方案 - 所有这些只是关于编译模块。
感谢您的帮助。
答案 0 :(得分:7)
您肯定必须将驱动程序源放在内核源代码树中并更新makefile以包含它。您可以在步骤1.1到1.3 here中看到它的工作原理。
如果用户级软件与设备驱动程序进行任何通话,则可能通过系统调用进行。搜索驱动程序的源代码,查找asmlinkage
,如果您发现其中任何一个,那么您正在寻找添加一些系统调用。上述文档的其余部分将解释如何设置它们。您必须至少修改两个文件(根据您的内核版本,它们可能略有不同)。
如果设备驱动程序直接与内核通信,我们将处理中断,内存映射I / O或DMA。老实说,我不知道它们是否可以在驱动程序的源文件中处理(在这种情况下你做得很好),或者它们是否还需要修改源代码树中的其他文件。 Linux Kernel Module Programming Guide是这类事情的好资源。
祝你好运