Linux内核模块

时间:2013-12-01 14:59:24

标签: linux-kernel vmware-tools

我不清楚驱动程序之间的区别是什么?#34;嵌入式"在单片内核中,驱动程序仅作为外部模块使用。

要求" port"需要做出哪些努力?一些驱动程序(仅作为"外部模块"仅提供)到单片内核?

我希望能够运行Vmware Tools,禁用可加载模块支持并摆脱initrd集市。

1 个答案:

答案 0 :(得分:0)

虽然驱动程序或多或少保持相同(在这两种情况下),但使用嵌入单片内核的“驱动程序”肯定有好处。

我会尝试解释 “移植” 你所问过的驱动程序部分的努力。

根据你的驱动程序的类型,基本上你要弄清楚它将如何适应当前的内核源代码树,它的编译(在uImage中包含你的.ko)以及在内核启动时加载它。让我们稍微说明每一步:

a。)找到您认为最适合保存驱动程序代码的文件夹(在内核源代码树中)。

b。)努力确保你的驱动程序代码正在编译。[最终它将成为单片内核映像的一部分(uImage或你称之为的任何东西)]。在这种情况下,您将为您的驱动程序处理Makefile。您可能必须引入一些CONFIG标志来编译驱动程序代码。源树中有大量的Makefile和驱动程序代码。漫游,你会很好地参考它是如何完成的。

c。)确保您的驱动程序代码独立于任何其他代码     可加载的内核模块(即不属于此类的模块     “单片”内核图像)。因为如果你调用你的驱动程序     代码(现在是整体的并且在内存中)取决于     可加载的模块代码然后它可能会导致一些内核     恐慌/分段错误的错误类型。

d。)确保您的驱动程序注册的级别更高     子系统将初始化所有已注册的驱动程序     在启动时间。(例如:i2c驱动程序一旦注册     在系统启动期间初始化i2c子系统时,将自动加载i2c驱动程序框架。如果您可以找出另一种调用驱动程序的__init和__exit函数的方法,则可能不需要执行此步骤。

e。)现在,你的驱动程序_ init和( _exit sections)“应该”被调用     如果它被任何设备驱动程序框架或直接加载(即     内核正在启动)。

f。)对于h / w驱动程序,我们在驱动程序中有.probe实现     一旦内核找到相应的设备,将调用它。     对于s / w驱动程序,我猜__init和__exit就是你所拥有的。

g。)加载后,您可以像以前一样使用它作为可加载内核模块

h。)我建议在linux内核树中阅读类似设备驱动程序的源代码,看看它们是如何运行的。

希望这有帮助。