⑴ mole-objs := test.o有什麼作用
mole-objs 用在多.o文件編譯的時候。
⑵ 編譯的ko模塊很大、initrd.img太大
在生產initrd.img的時候,如果發現initrd.img非常大,比如原來的40M,現在的有300M,網上有提到memory hole remap相關,沒找說法的出處,反正我在bios是沒找到。
ubuntu下生存initrd.img的命令:
update-initramfs -c -k <kernel_ ver>
它是將lib/moles/<kernel_ver>下的ko打包到initrd.img里。配置文件/etc/initramfs-tools/。所以先查看自己編譯的ko模塊是不是比原系統的ko模塊大很多。
自己編譯的ko模塊如果比發行版的大很多,比如人家的事10K,你的ko文件是20M。這是由於編譯過程中有雪的信息,比如調試的信息、段、附加信息,在運行中並不需要。
使用binuitls包的strip命令
strip -S name.ko
然後再比較大小,如果相差不多甚至相差小於1K,那就找到了問題原因。
如果還是不行,繼續努力找問題吧。
⑶ linux內核模塊編譯-通過Makefile重命名.ko文件名和模塊名
假設模塊的源文件為hello.c,源碼如下:
使用該文件編譯內核模塊。
正常情況下,Makefile文件內容如下:
執行 make 命令,生成hello.ko文件。
執行 sudo insmod hello.ko 命令,安裝該模塊。
執行 lsmod 命令,查看安裝的模塊。就會看到第一行的就是hello模塊。
但是,如果想自定義模塊名稱為 xmole ,而不是默認的 hello ,如何實現呢?方法如下:
在Makefile中重命名obj-m並將obj-m的依賴關系設置為原始模塊(hello)
修改後的Makefile文件內容如下:
將obj-m設置為 xmole .o,並使 xmole .o依賴於 hello .o.
執行 make 命令後,生成 xmole .ko, 而不是 hello .ko,
安裝命令: sudo insmod xmole.ko
查看命令: lsmod ,就會看到被安裝名為 xmole 的模塊。
⑷ 如何編譯linux驅動ko
本文詳細闡述了Linux驅動KO的編譯方法,重點介紹單編驅動KO的流程與優勢。在Linux系統中,.ko文件即模塊文件,Linux提供了模塊機制,具有不直接影響內核映像大小與載入後功能等同於內核內其他部分的特點。
實驗環境包括MINI2440開發板與基於linux-2.6.32.2的軟體環境。編譯Linux驅動KO主要分為兩種方式:整編內核與單編KO。
整編內核模式下,通過將驅動程序demo_driver.c拷貝至指定目錄,調整Makefile文件,然後在內核源碼頂層目錄執行編譯指令,最終生成demo_driver.ko文件。然而,這種方式涉及整個內核的編譯過程,耗時約20分鍾。
單編KO方法則更簡潔。使用make moles指令編譯內核中所有模塊,或通過增加「M」參數指定單獨編譯某一模塊。單編KO模式下,需要一個特殊的Makefile文件,該文件定義了內核目錄、交叉編譯工具等變數,指定將demo_driver.c編譯成demo_driver.ko文件。通過簡單的make指令,編譯過程只需3秒左右,效率顯著提高。
編譯完成後,將demo_driver.ko文件傳輸至開發板中並載入,通過查看設備與測試驅動,確保其正常運行。單編KO模式優勢在於快速編譯過程,這使得開發者在調試和迭代驅動程序時更為高效。
總結,Linux驅動KO的編譯方法主要包括整編內核與單編KO兩種。單編KO方法以其快速編譯優勢成為一種高效且實用的選擇。如果您覺得本文對您有所幫助,請給予支持與反饋,您的認可是我持續更新的動力。