2015-04-03 53 views
0

我剛開始學習關於Linux內核模塊,我指的是書上說:Linux內核模塊的編譯的先決條件

「對於這一點[編輯]工作,內核源必須是適當準備;特別是它必須有一個配置文件(主內核源目錄中的.config)和適當的依賴關係設置「

然而,據我所知(並嘗試過),生成.config文件由make menuconfig(或任何等價的make config命令) - 這似乎不足以讓我的模塊文件編譯。在內核源代碼目錄中我需要做的最少的工作是什麼?

make modules

回答

1

是的,.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的起點。

請參閱https://github.com/duxing2007/ldd3-examples-3.x

+0

謝謝!我能夠在內核源代碼目錄中的'make modules_prepare'後編譯我的模塊,但是當我嘗試插入時內核不接受它,即使運行內核的版本完全相同。所以我想我需要使模塊運行或安裝內核? – Lavya 2015-04-03 19:07:54

+1

@Lavya所以你編譯了一個內核並試圖安裝模塊而不啓動它?檢查第26頁,看看它爲什麼失敗:http://www.oreilly.com/openbook/linuxdrive3/book/ch02.pdf – holgac 2015-04-03 20:42:04

+0

謝謝。將通過它。 – Lavya 2015-04-03 21:42:38