下面的實驗以 debian7.5 64bit 為例.
擷取 debian7.5 本身的源碼非常簡單:
linux創始人的分支, 不用說肯定最重要, 它是所有分支的根源. 處于 "mainline" 的地位.
這個分支還有個好聽的名字 – "vanilla(香草)" 核心.
這個一個為釋出将來的版本而積累新代碼并進行測試的源碼樹.
由 Stephen Rothwell 等人進行管理和維護
這是一個主要針對過去釋出的核心版本進行bug修改, 使其更加穩定的樹.
由 Greg Kroah-Hartman, Chris Wright 進行管理和維護.
針對某個Linus樹的穩定版維護一般持續6個月左右, 也有更持久的.
上面的列出的git樹中都可以擷取想要的源碼.
其實編譯核心和編譯普通軟體也沒多大差別, 隻是核心編譯的參數非常之多.
下面就來先看看如何設定核心編譯參數
編譯選項個數
核心的編譯選項的個數非常多, v2.6.38的核心中就有 12 000 個左右的設定選項(這是包含所有arch的配置選項).
核心編譯選項不僅多, 有些編譯選項之間還存在依賴關系, 是以手動設定編譯選項幾乎是不可能的.
值得慶幸的是, 隻要知道自己需要設定的那些選項, 就可以使用 make ***config 來進行設定, 它還會自動處理依賴關系.
配置編譯選項:
設定核心編譯選項是通過 kconfig 這個工具來完成的.
kconfig 的源碼就是核心代碼中 script/kconfig 目錄下
各個編譯選項的選擇有3種方式:
=y :: 直接編譯到核心中
=m :: 以子產品方式編譯到核心中
不設定 :: 不編譯
編譯方法:
make menuconfig :: 源碼根目錄下生成 .config (沒有會自動生成), .config中就是各個核心編譯選項的選擇狀況.
make defconfig :: 根據目前系統的架構預設 .config 生成核心源碼目錄下的 .config (每個架構的配置檔案: ex. arch/x86/configs/x86_64_defconfig)
make oldconfig :: 将已有的 .config 放到源碼根目錄下後執行, 目的是為了複用之前的核心編譯選項的配置.
make xconfig :: 圖形化配置, 需要qt3, 個人覺得沒有必要, 有 make menuconfig 就足夠了.
make localmodconfig :: 生成以正在使用的核心子產品為對象的 .config
編譯很簡單, 核心編譯選項設定好之後, 隻需簡單的指令 make, 就可以編譯了.
由于核心代碼的龐大, 是以和一般應用程式相比, 編譯時間會很長. 可以嘗試以下方法來加快編譯速度:
不用的驅動程式都不要設定, 這樣就不會編譯
利用make的 -j 選項來并發編譯, ex. make -j N (N是并發數). 如果你的機器有2個CPU, 可以用 make -j 2 來提高編譯速度
使用 make localmodconfig 來生成僅以正在使用的核心子產品為對象的 .config (一般這樣生成的.config中包含的核心子產品最少, 是以編譯速度快)
編譯時間比較: 測試環境 - debian v7.5虛拟機(cpu: 單核, 記憶體: 512MB)
.config生成
make時間
生成的modules
備注
make menuconfig
1小時13分41秒
3052個.ko, 共1.2GB
預設配置, 什麼也不選擇
make localmodconfig
19分36秒
337 個.ko, 共176MB
注 modules 是通過 make modules_install 之後, 在 /lib/modules 中根據編譯核心版本号來檢視的
檢視有多少個 .ko 檔案的方法:
子產品和核心不在一起的編譯, 就是在現有的核心中追加一些核心子產品時, 不需要将核心也重新編譯.
交叉編譯就是在目前平台上編譯其他平台上的核心二進制映像, 比如在 x86_64 平台上編譯 arm 的核心映像.
交叉編譯需要目标平台的交叉編譯器. 編譯時主要是 ARCH 和 CROSS_COMPILE 2個變量的設定.
下面舉個交叉編譯 ARM 的例子: 公司用的制作 Cubieboard 闆子上的image中的一段編譯核心的代碼
上述 第一行 是編譯核心源碼. 第二行 是建立 uImage 格式的核心映像以及建立核心子產品
最終在 INSTALL_MOD_PATH 生成的核心子產品可以直接拷貝到 arm機器上使用.
debian 系 linux下生成 核心源碼包的方法
make modules_install (安裝核心子產品到 /lib/modules 下)
make install (安裝核心二進制映像, 生成并安裝boot初始化檔案系統映像檔案)
删除/lib/modules/目錄下不需要的核心庫檔案
删除/usr/src/kernel/目錄下不需要的核心源碼
删除/boot目錄下啟動的核心檔案禾核心映像
更改grub的配置,删除不需要的核心啟動清單
make help : 核心Makefile中的各種 target
make cscope : 生成 cscope 檔案
make tags/TAGS : tags可用于vim, TAGS可用于emacs
本文轉自wang_yb部落格園部落格,原文連結:http://www.cnblogs.com/wang_yb/p/3899439.html,如需轉載請自行聯系原作者