将驱动程序编译为内核的一部分,而不是作为模块

Rus*_*rse 8 linux kernel compilation driver kernel-module

我正在尝试为嵌入式设备创建简约的Linux.这意味着编译内核和驱动程序的必要性.一个驱动程序由它的创建者直接为设备的板写入,因此它不是存储库.它可以编译为内核模块.

但是由于Linux的不可变性以及对内存使用极少的要求,我不想使用模块.我想要内核中内置的所有驱动程序.所有提供内核的驱动程序都是这样设置的.

所以我的问题是如何将一个特殊的驱动程序编译到内核?

所有搜索都没有为我提供解决方案 - 所有这些只是关于编译为模块.

谢谢你的帮助.

Mat*_*ice 7

您肯定必须将驱动程序源放在内核源代码树中并更新makefile以包含它.您可以在此处的步骤1.1到1.3中查看其工作原理.

如果用户级软件与设备驱动程序进行任何通信,则可能通过系统调用进行.搜索驱动程序的源代码,查找asmlinkage是否找到任何这些,然后您正在寻找添加一些系统调用.上述文档的其余部分将解释如何设置它们.您必须至少修改两个文件(根据您的内核版本,它们可能略有不同).

如果设备驱动程序直接与内核通信,我们将处理中断,内存映射I/O或DMA.老实说,我不知道它们是否可以在驱动程序的源文件中处理(在这种情况下你做得很好),或者它们是否还需要修改源代码树中的其他文件." Linux内核模块编程指南"是一个很好的资源.

祝好运