下面的實(shí)驗(yàn)以 debian7.5 64bit 為例.
獲取源碼獲取 debian7.5 本身的源碼非常簡(jiǎn)單:
sudo apt-get install linux-sourcehttps://www.kernel.org/ 的git上提供的源碼分支非常多, 剛開始學(xué)習(xí)源碼主要關(guān)注下面幾個(gè)分支:
上面的列出的git樹中都可以獲取想要的源碼.
編譯內(nèi)核其實(shí)編譯內(nèi)核和編譯普通軟件也沒(méi)多大區(qū)別, 只是內(nèi)核編譯的參數(shù)非常之多.下面就來(lái)先看看如何設(shè)置內(nèi)核編譯參數(shù)
內(nèi)核編譯選項(xiàng)配置編譯選項(xiàng): 設(shè)置內(nèi)核編譯選項(xiàng)是通過(guò) kconfig 這個(gè)工具來(lái)完成的. kconfig 的源碼就是內(nèi)核代碼中 script/kconfig 目錄下
各個(gè)編譯選項(xiàng)的選擇有3種方式:
編譯方法:
編譯很簡(jiǎn)單, 內(nèi)核編譯選項(xiàng)設(shè)置好之后, 只需簡(jiǎn)單的命令 make, 就可以編譯了.由于內(nèi)核代碼的龐大, 所以和一般應(yīng)用程序相比, 編譯時(shí)間會(huì)很長(zhǎng). 可以嘗試以下方法來(lái)加快編譯速度:
使用 make localmodconfig 來(lái)生成僅以正在使用的內(nèi)核模塊為對(duì)象的 .config (一般這樣生成的.config中包含的內(nèi)核模塊最少, 所以編譯速度快)
編譯時(shí)間比較: 測(cè)試環(huán)境 - debian v7.5虛擬機(jī)(cpu: 單核, 內(nèi)存: 512MB)
| .config生成 | make時(shí)間 | 生成的modules | 備注 |
|---|---|---|---|
| make menuconfig | 1小時(shí)13分41秒 | 3052個(gè).ko, 共1.2GB | 默認(rèn)配置, 什么也不選擇 |
| make localmodconfig | 19分36秒 | 337 個(gè).ko, 共176MB |
注 modules 是通過(guò) make modules_install 之后, 在 /lib/modules 中根據(jù)編譯內(nèi)核版本號(hào)來(lái)查看的查看有多少個(gè) .ko 文件的方法:
cd /lib/modules/3.2.60find . -name '*.ko' | wc -l分開編譯模塊和內(nèi)核不在一起的編譯, 就是在現(xiàn)有的內(nèi)核中追加一些內(nèi)核模塊時(shí), 不需要將內(nèi)核也重新編譯.模塊分開編譯的方法很簡(jiǎn)單, 參考之前的博客: 《Linux內(nèi)核設(shè)計(jì)與實(shí)現(xiàn)》讀書筆記(六)- 內(nèi)核數(shù)據(jù)結(jié)構(gòu) 這篇博客中的例子就是和內(nèi)核分開編譯的模塊.
交叉編譯交叉編譯就是在當(dāng)前平臺(tái)上編譯其他平臺(tái)上的內(nèi)核二進(jìn)制映像, 比如在 x86_64 平臺(tái)上編譯 arm 的內(nèi)核映像.交叉編譯需要目標(biāo)平臺(tái)的交叉編譯器. 編譯時(shí)主要是 ARCH 和 CROSS_COMPILE 2個(gè)變量的設(shè)置.
下面舉個(gè)交叉編譯 ARM 的例子: 公司用的制作 Cubieboard 板子上的image中的一段編譯內(nèi)核的代碼
make -C ${CB_KSRC_DIR} O=${CB_KBUILD_DIR} ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- kernel_defconfigmake -C ${CB_KSRC_DIR} O=${CB_KBUILD_DIR} ARCH=arm CROSS_COMPILE=arm-linux-gnueabi- -j4 INSTALL_MOD_PATH=${CB_TARGET_DIR} uImage modules上述 第一行 是編譯內(nèi)核源碼. 第二行 是創(chuàng)建 uImage 格式的內(nèi)核映像以及創(chuàng)建內(nèi)核模塊最終在 INSTALL_MOD_PATH 生成的內(nèi)核模塊可以直接拷貝到 arm機(jī)器上使用.
生成內(nèi)核包debian 系 linux下生成 內(nèi)核源碼包的方法
make deb-pkg安裝內(nèi)核make modules_install (安裝內(nèi)核模塊到 /lib/modules 下)make install (安裝內(nèi)核二進(jìn)制映像, 生成并安裝boot初始化文件系統(tǒng)映像文件)
卸載內(nèi)核新聞熱點(diǎn)
疑難解答
圖片精選