我不清楚驱动程序之间的区别是什么?#34;嵌入式"在单片内核中,驱动程序仅作为外部模块使用。
要求" port"需要做出哪些努力?一些驱动程序(仅作为"外部模块"仅提供)到单片内核?
我希望能够运行Vmware Tools,禁用可加载模块支持并摆脱initrd集市。
答案 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内核树中阅读类似设备驱动程序的源代码,看看它们是如何运行的。
希望这有帮助。