国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 系統(tǒng) > Linux > 正文

編譯Linux內(nèi)核

2024-06-28 13:24:54
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
編譯linux內(nèi)核

下面的實(shí)驗(yàn)以 debian7.5 64bit 為例.

獲取源碼

獲取 debian7.5 本身的源碼非常簡(jiǎn)單:

sudo apt-get install linux-source

https://www.kernel.org/ 的git上提供的源碼分支非常多, 剛開始學(xué)習(xí)源碼主要關(guān)注下面幾個(gè)分支:

  1. linus分支: https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/ linux創(chuàng)始人的分支, 不用說(shuō)肯定最重要, 它是所有分支的根源. 處于 "mainline" 的地位. 這個(gè)分支還有個(gè)好聽的名字 – "vanilla(香草)" 內(nèi)核.
  2. linux-next樹: https://git.kernel.org/cgit/linux/kernel/git/next/linux-next.git/ 這個(gè)一個(gè)為發(fā)布將來(lái)的版本而積累新代碼并進(jìn)行測(cè)試的源碼樹. 由 Stephen Rothwell 等人進(jìn)行管理和維護(hù)
  3. stable樹: https://git.kernel.org/cgit/linux/kernel/git/stable/linux-stable.git/ 這是一個(gè)主要針對(duì)過(guò)去發(fā)布的內(nèi)核版本進(jìn)行bug修改, 使其更加穩(wěn)定的樹. 由 Greg Kroah-Hartman, Chris Wright 進(jìn)行管理和維護(hù). 針對(duì)某個(gè)Linus樹的穩(wěn)定版維護(hù)一般持續(xù)6個(gè)月左右, 也有更持久的.

上面的列出的git樹中都可以獲取想要的源碼.

編譯內(nèi)核

其實(shí)編譯內(nèi)核和編譯普通軟件也沒(méi)多大區(qū)別, 只是內(nèi)核編譯的參數(shù)非常之多.下面就來(lái)先看看如何設(shè)置內(nèi)核編譯參數(shù)

內(nèi)核編譯選項(xiàng)
  1. 編譯選項(xiàng)個(gè)數(shù) 內(nèi)核的編譯選項(xiàng)的個(gè)數(shù)非常多, v2.6.38的內(nèi)核中就有 12 000 個(gè)左右的設(shè)置選項(xiàng)(這是包含所有arch的配置選項(xiàng)). 內(nèi)核編譯選項(xiàng)不僅多, 有些編譯選項(xiàng)之間還存在依賴關(guān)系, 所以手動(dòng)設(shè)置編譯選項(xiàng)幾乎是不可能的. 值得慶幸的是, 只要知道自己需要設(shè)置的那些選項(xiàng), 就可以使用 make ***config 來(lái)進(jìn)行設(shè)置, 它還會(huì)自動(dòng)處理依賴關(guān)系.
  2. 配置編譯選項(xiàng): 設(shè)置內(nèi)核編譯選項(xiàng)是通過(guò) kconfig 這個(gè)工具來(lái)完成的. kconfig 的源碼就是內(nèi)核代碼中 script/kconfig 目錄下

    各個(gè)編譯選項(xiàng)的選擇有3種方式:

    1. =y :: 直接編譯到內(nèi)核中
    2. =m :: 以模塊方式編譯到內(nèi)核中
    3. 不設(shè)置 :: 不編譯

    編譯方法:

    1. make menuconfig :: 源碼根目錄下生成 .config (沒(méi)有會(huì)自動(dòng)生成), .config中就是各個(gè)內(nèi)核編譯選項(xiàng)的選擇狀況.
    2. make defconfig :: 根據(jù)當(dāng)前系統(tǒng)的架構(gòu)默認(rèn) .config 生成內(nèi)核源碼目錄下的 .config (每個(gè)架構(gòu)的配置文件: ex. arch/x86/configs/x86_64_defconfig)
    3. make oldconfig :: 將已有的 .config 放到源碼根目錄下后執(zhí)行, 目的是為了復(fù)用之前的內(nèi)核編譯選項(xiàng)的配置.
    4. make xconfig :: 圖形化配置, 需要qt3, 個(gè)人覺(jué)得沒(méi)有必要, 有 make menuconfig 就足夠了.
    5. make localmodconfig :: 生成以正在使用的內(nèi)核模塊為對(duì)象的 .config
編譯

編譯很簡(jiǎn)單, 內(nèi)核編譯選項(xiàng)設(shè)置好之后, 只需簡(jiǎn)單的命令 make, 就可以編譯了.由于內(nèi)核代碼的龐大, 所以和一般應(yīng)用程序相比, 編譯時(shí)間會(huì)很長(zhǎng). 可以嘗試以下方法來(lái)加快編譯速度:

  1. 不用的驅(qū)動(dòng)程序都不要設(shè)置, 這樣就不會(huì)編譯
  2. 利用make的 -j 選項(xiàng)來(lái)并發(fā)編譯, ex. make -j N (N是并發(fā)數(shù)). 如果你的機(jī)器有2個(gè)CPU, 可以用 make -j 2 來(lái)提高編譯速度
  3. 使用 make localmodconfig 來(lái)生成僅以正在使用的內(nèi)核模塊為對(duì)象的 .config (一般這樣生成的.config中包含的內(nèi)核模塊最少, 所以編譯速度快)

  4. 編譯時(shí)間比較: 測(cè)試環(huán)境 - debian v7.5虛擬機(jī)(cpu: 單核, 內(nèi)存: 512MB)

.config生成make時(shí)間生成的modules備注
make menuconfig1小時(shí)13分41秒3052個(gè).ko, 共1.2GB默認(rèn)配置, 什么也不選擇
make localmodconfig19分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)核
  1. 刪除/lib/modules/目錄下不需要的內(nèi)核庫(kù)文件
  2. 刪除/usr/src/kernel/目錄下不需要的內(nèi)核源碼
  3. 刪除/boot目錄下啟動(dòng)的核心檔案禾內(nèi)核映像
  4. 更改grub的配置,刪除不需要的內(nèi)核啟動(dòng)列表
內(nèi)核 Makefile 中一些有用的 target
  1. make help : 內(nèi)核Makefile中的各種 target
  2. make cscope : 生成 cscope 文件
  3. make tags/TAGS : tags可用于vim, TAGS可用于emacs

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 深水埗区| 莱阳市| 玉溪市| 宣恩县| 新龙县| 镇平县| 郯城县| 建湖县| 荔浦县| 武山县| 鸡泽县| 达拉特旗| 二连浩特市| 泾阳县| 五指山市| 应城市| 泰州市| 洛川县| 四平市| 织金县| 恩平市| 宁都县| 马龙县| 左云县| 监利县| 石泉县| 大埔区| 沁阳市| 陆河县| 徐州市| 育儿| 前郭尔| 延川县| 嵊州市| 庄河市| 陆良县| 共和县| 札达县| 乐昌市| 阳泉市| 安多县|