2012-07-13 30 views
9

我現在正在開發內核模塊,並且構建時間開始得到我的皮膚。作爲副作用,我在構建過程中會遇到太多「咖啡」中斷。試圖找到我的機器使用shell腳本所需的所有內核模塊

所以我一直在尋找一種方法來構建我所需要的平臺。 「簡而言之,Linux內核」的第7章和第8章詳細介紹瞭如何手動完成該操作。它的一個很好的閱讀:http://www.kroah.com/lkn/

但雖然我瞭解的東西,這仍然是很多調整,使這項工作。

2.6.32和更高版本的內核添加了一個新的目標make localmodconfig。通過lsmod掃描並適當更改.config。所以我想我找到了我的「自動化」。但是這個perl腳本也有一些問題。

這個線程描述的問題:https://bbs.archlinux.org/viewtopic.php?pid=845113

還有一個建議的解決方案,這顯然曾爲別人,是運行腳本,而不是直接使用make的目標。

雖然對我來說,使localmodconfig根本不起作用。因爲以下的:

make clean 
make mrproper 
cp /boo/config-'uname -r' .config 
make localmodconfig 

,並與

vboxguest config not found!! 
nf_defrag_ipv6 config not found!! 
vboxsf config not found!! 
vboxvideo config not found!! 

的事情是我的內核的開發環境是停止在VirtualBox。這些vbox模塊是在我選擇安裝「virtualbox guest addtion」時安裝的。

而netfilter模塊可能是一個分佈式特定模塊(很多netfilter模塊不是主線內核的一部分,所以它對我來說不是一個衝擊),它不包含在主線內核中。

現在,解決方法是顯然卸載這些模塊並再次嘗試。但我在考慮是否存在streamline_config.pl的修補程序,如果他/她想要,它可以使用戶排除某些模塊。問題是我有有關perl的知識,我喜歡這種方式。

所以我在問題簡而言之

  1. 修補streamline_config.pl所以我可以給模塊名作爲參數,它會從處理配置文件排除列表。

    腳本位於kernel.org

  2. 編輯:刪除了有關perl腳本沒有運行的東西。正如mugen kenichi所指出的(我可以成爲多麼愚蠢?)。但由於源碼樹下沒有一些模塊代碼,使得localmodconfig仍然不工作。修補streamline_config.pl仍然有效的要求。

+2

您不能運行帶'sh'的Perl腳本。試試'perl',你不會得到那些'我的:命令未找到的'錯誤和perl錯誤或警告。 – 2012-07-13 12:27:23

+0

看起來我是世界上最愚蠢的人。我怎麼能這樣做:) – Aftnix 2012-07-13 12:30:35

+0

腳本是否真的失敗?從代碼看,它只是打印錯誤,但如果模塊的代碼不在樹中則不會失敗。見[第375行](http://git.kernel.org/?p=linux/kernel/git/stable/linux-stable.git;a=blob;f=scripts/kconfig/streamline_config.pl;h=bccf07ddd0b67a0e2f761fd5721f274a49bf9bbb ; hb = HEAD#l375) – 2012-07-13 12:49:48

回答

8

任何人試圖建立一個最小的內核映像也在尋找減少建造時間,應做到以下幾點:

1)複製發行的內核配置在你的源代碼樹。它可以用任何一個命令如下進行:

$zcat /proc/config.gz > .config 

$cp /boot/config-'uname -r' .config 

2)使用localmodconfig目標。

$make localmodconfig 

它將使用lsmod來查找哪些模塊在此刻加載。然後它將搜索發行版的.config以啓用它們並禁用其他。

重要的是要知道它並不總是完美地工作。所以你應該使用make menuconfig進一步調整你的配置。你會看到一些模塊仍然被標記爲實際上不需要的系統。

有時超出樹模塊可能會導致localmodconfig失敗。如果是這種情況,您可以通過兩種方法解決該問題:

a)卸載掉樹模塊並再次嘗試make localmodconfig。 b)中直接運行該perl腳本:

$chmod +x script/kconfig/streamline_config.pl 
$perl script/kconfig/streamline_config.pl > .config 

3)安裝ccache [1]。它將大大縮短你的構建時間。它緩存對象。所以它會減少後續的構建。

ccache可能包含在發行版的存儲庫中,因此您可以通過apt-getyum安裝它。在CentOS中,它可用於EPEL回購。[2]

4)給出儘可能多的內核儘可能爲構建工作

$make -j8 CC="ccache gcc" 

我的結果是:

real 3m10.871s 
user 4m36.949s 
sys 1m52.656s 

[1] http://ccache.samba.org/ [2] http://fedoraproject.org/wiki/EPEL

+1

你剛剛爲我節省了幾個小時的配置(我的孩子干擾了我的輸入☺)。根據你的建議,我可以用一個簡單的sed-script在所有活動模塊中切換編譯。謝謝!'cp .config .config- old; make localmodconfig; for $ in(grep = m .config | xargs); do sed「s/$ i/$(echo $ i | sed s/= m/= y /)/」-i .config-舊的; cp .config-old .config; done' – 2014-01-15 16:04:35

+1

很高興知道這對你有幫助。 – Aftnix 2014-01-16 15:00:55

+0

不是'scripts'而是'script'中的streamline_config.pl腳本嗎? – 2014-07-04 02:11:33

相關問題