簡體   English   中英

Linux內核模塊

[英]Linux kernel modules

我尚不清楚可以“嵌入”在單片內核中的驅動程序與只能作為外部模塊使用的驅動程序之間的區別是什么。

為了將某些驅動程序(僅提供為“外部模塊”)“移植”到單片內核,需要采取何種努力?

我希望能夠運行Vmware Tools來禁用可加載模塊支持,並擺脫initrd集市。

盡管驅動程序或多或少保持不變(在兩種情況下),但使用嵌入在單片內核中的“驅動程序”絕對有好處。

我將嘗試解釋您要求的“移植端口”的驅動程序部分。

根據您所使用的驅動程序類型,從本質上講,您必須弄清楚它如何適合當前的內核源代碼樹,其編譯(在uImage中包括.ko)並在內核引導時加載它。 讓我們稍微說明一下每個步驟:

a。)找到您認為最適合保留驅動程序代碼的文件夾(在內核源代碼樹中)。

b。)繼續確保您的驅動程序代碼已被編譯。[即最終它將成為單片內核映像(uImage或您所稱的映像)的一部分]。 在這種情況下,您必須為驅動程序處理Makefile。 您可能必須引入一些CONFIG標志來編譯驅動程序代碼。 源代碼樹中有大量的Makefile和驅動程序代碼。 到處漫游,您將很好地了解它是如何完成的。

c。)確保您的驅動程序代碼獨立於任何其他可加載的內核模塊(即,這些模塊都不屬於“整體”內核映像的一部分)。 因為如果您調用依賴於可加載模塊代碼的驅動程序代碼(現在是單片且在內存中),則可能會導致某些內核崩潰/分段錯誤。

d。)確保您的驅動程序已在更高級別的子系統中注冊,該子系統將在啟動時初始化所有已注冊的驅動程序。(例如:在i2c驅動程序框架中注冊的i2c驅動程序將在i2c子系統自動加載)在系統啟動期間初始化)。 如果您可以找到另一種調用驅動程序的__init和__exit函數的方法,則可能不一定需要執行此步驟。

e。)現在,如果驅動程序_ init和( _exit部分)被任何設備驅動程序框架加載或直接加載(即在內核啟動時),則應“調用”。

f。)對於硬件驅動程序,我們在驅動程序中具有.probe實現,一旦內核找到相應的設備,該實現就會被調用。 如果是s / w驅動程序,我想您擁有__init和__exit。

g。)一旦加載,就可以像之前將其用作可加載內核模塊一樣使用它

h。)我建議您在linux內核樹中閱讀類似設備驅動程序的源代碼,並查看它們如何運行。

希望這可以幫助。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM