簡體   English   中英

對Linux內核模塊的相關了解?

[英]Linux kernel module related understanding?

要加載模塊,內核必須包含模塊中使用的所有內核符號。 如果在編譯時這些符號未包含在內核中,則由於缺少依賴性,將不會加載該模塊。

這是否意味着內核模塊應該使用完整的內核編譯程序進行編譯,以在vmlinux中包含內核模塊符號,如果我們單獨編譯模塊,那么我們將無法在運行時加載到內核中?

即使我問錯了問題,也請糾正我的理解。

如果我沒記錯的話,您指的是這篇文章: http : //www.linuxjournal.com/content/kbuild-linux-kernel-build-system?page=0,0

這是否意味着內核模塊應該使用完整的內核編譯程序進行編譯,以在vmlinux中包含內核模塊符號,如果我們單獨編譯模塊,那么我們將無法在運行時加載到內核中?

該聲明涉及內核編譯,而不是模塊編譯(而是加載)。

要加載模塊,內核必須包含模塊中使用的所有內核符號。 如果在編譯時這些符號未包含在內核中,則由於缺少依賴性,將不會加載該模塊。

這並非完全正確。 這是《 Linux內核模塊編程指南》中的示例

例如,msdos.ko要求fat.ko模塊已經加載到內核中。 如果另一個模塊定義了被請求模塊使用的符號(變量或函數),則該請求模塊將依賴於另一個模塊。

因此,即使符號未使用內核編譯(但由其他模塊提供),您仍然可以加載模塊

但是,請想象一下,以某種方式在沒有printk支持的情況下編譯內核。 現在,您嘗試加載的每個模塊都將嘗試查找根本不存在的printk函數。 因此,您需要在編譯內核時做出合理的決定,以包含所有可以加載的模塊確實可以加載的要點。

暫無
暫無

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

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