我剛開始學習關於Linux內核模塊,我指的是書上說:Linux內核模塊的編譯的先決條件
「對於這一點[編輯]工作,內核源必須是適當準備;特別是它必須有一個配置文件(主內核源目錄中的.config)和適當的依賴關係設置「
然而,據我所知(並嘗試過),生成.config文件由make menuconfig
(或任何等價的make config命令) - 這似乎不足以讓我的模塊文件編譯。在內核源代碼目錄中我需要做的最少的工作是什麼?
make modules
?
我剛開始學習關於Linux內核模塊,我指的是書上說:Linux內核模塊的編譯的先決條件
「對於這一點[編輯]工作,內核源必須是適當準備;特別是它必須有一個配置文件(主內核源目錄中的.config)和適當的依賴關係設置「
然而,據我所知(並嘗試過),生成.config文件由make menuconfig
(或任何等價的make config命令) - 這似乎不足以讓我的模塊文件編譯。在內核源代碼目錄中我需要做的最少的工作是什麼?
make modules
?
是的,.config文件是使用make *config
生成的。
下面是其中一些:
make defconfig
爲你的架構創建默認配置。
make config
是最原始的方法,它提示每個配置。
make menuconfig
是ncurses配置菜單。如果我不是直接編輯.config文件的話,那就是我喜歡的那個。
make gconfig
就像menuconfig,但使用gtk +。
不要忘記,make oldconfig
應在自己修改.config文件後調用。
您的當前配置也可能存儲在磁盤上的某個位置。對於許多Linux版本,它的位置是/boot/config-$(uname -r)
如果它存在,您可以從它開始。如果不是,你最好的選擇是make defconfig
,然後編輯配置文件以滿足你的需求。
配置後:
之前構建模塊,你可能想編譯內核,因爲你的模塊將不會被當前的內核使用,即使你讓你的當前內核使用的模塊,它會最有可能導致恐慌,因爲符號表不會按照您編譯模塊假定的順序。 make -jN
是最常用的編譯方法,N是CPU核心數的兩倍。這也編譯模塊,但爲它們創建.ko文件,而不是嵌入到vmlinuz文件中。
之後,你可以sudo make install
來安裝你的內核。這通常會將剛剛編譯的內核對象包裝爲合適的格式,並放入/boot
(實際上不必是/ boot)。
然後你sudo make modules_install
將創建的.ko文件複製到/lib/modules/$(uname -r)
。這將構建所有模塊。
這樣做後,你可能更喜歡只建立自己的模塊,而不是所有的模塊。當在內核樹的根目錄下時,你可能只需要構建你的模塊make M=your_modules_relative_path
。
我不知道您正在閱讀哪本書,但如果您要在外部構建模塊,則仍需執行上述工作。之後,您可以使用LDD示例作爲makefile的起點。
謝謝!我能夠在內核源代碼目錄中的'make modules_prepare'後編譯我的模塊,但是當我嘗試插入時內核不接受它,即使運行內核的版本完全相同。所以我想我需要使模塊運行或安裝內核? – Lavya 2015-04-03 19:07:54
@Lavya所以你編譯了一個內核並試圖安裝模塊而不啓動它?檢查第26頁,看看它爲什麼失敗:http://www.oreilly.com/openbook/linuxdrive3/book/ch02.pdf – holgac 2015-04-03 20:42:04
謝謝。將通過它。 – Lavya 2015-04-03 21:42:38