【轉】如何編譯一個內核 - Ubuntu方式


如何編譯一個內核 - Ubuntu方式

每一個Linux發行版都有自己專門的工具去構建自定義的內核. 本文主要介紹在Ubuntu平台上編譯內核, 如何從www.kernel.org(也叫vanilla kernel)獲得最新且未改動的內核源代碼來構建一個自定義的內核, 這樣你可以使用自己的內核而不是發行版的內核, 另外也介紹了如何給內核打補丁, 從而方便增加新的功能.

下面的工作我都在Ubuntu 6.10 Server ("Edgy Eft")和Ubuntu 6.06 Desktop ("Dapper Drake")上經過了測試.

我想首先要說的是文章中構建自定義內核的方式不是唯一的, 還有許多其它的方式, 這不過是我習慣的方式. 我不能保證使用后不會出現任何問題.

1. 預備工作
我推薦使用root用戶執行下面所有的步驟. 如果你還沒有創建root登陸口令, 請運行下面的命令:
sudo passwd root

然后, 以root身份登陸:
su

如果你想使用一般用戶來替代root用戶, 記住在本文所有命令前輸入sudo, 比如當我運行
apt-get update

你需要運行下面的命令來替代, 等.
sudo apt-get update

1.1 Ubuntu 6.10上的/bin/sh ("Edgy Eft")
在Ubuntu 6.10, /bin/sh缺省是一個鏈接到/bin/dash的字符鏈接. 當你編譯軟件源代碼的時候, /bin/dash似乎還存在問題. 至少我已經遇到了一些問題. 所以我把/bin/sh鏈接到了/bin/bash.

如果你使用Ubuntu 6.10, 現在你可以運行:
rm -f /bin/sh
ln -s /bin/bash /bin/sh

2 安裝必需的軟件包 (為內核編譯做准備)
首先我們升級軟件(包)庫:
apt-get update

然后我們安裝所有需要的軟件包:
apt-get install kernel-package libncurses5-dev fakeroot wget bzip2

3 下載內核源代碼
接下來我們下載需要的內核到/usr/src目錄(去www.kernel.org網站下載你需要的內核版本, 比如. linux-2.6.18.1tar.bz2(你可以從這里下載所有的2.6內核: http://www.kernel.org/pub/linux/kernel/v2.6/). 然后下載到/usr/src目錄:
cd /usr/src
wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.18.1.tar.bz2

然后解壓內核源代碼, 創建一個指向內核源代碼目錄的linux字符鏈接:
tar xjf linux-2.6.18.1.tar.bz2
ln -s linux-2.6.18.1 linux
cd /usr/src/linux

4 給內核源代碼打補丁(可選)
有時你的缺省內核不支持新買的設備, 你需要安裝新的驅動. 或者你需要使用虛擬技術或其它高級的技術, 而這些現有的內核都不支持. 這樣情況下你需要給給內核源代碼打補丁(當然補丁已經發布..)

現在我們假設你已經下載需要的補丁(以下例子我叫它patch.bz2)到/usr/src. 運行下面的命令給內核源代碼直接打上補丁(你的用戶必須位於/usr/src/linux目錄):
bzip2 -dc /usr/src/patch.bz2 | patch -p1 --dry-run
bzip2 -dc /usr/src/patch.bz2 | patch -p1

第一個命令用於測試, 對內核沒有任何影響. 如果沒有顯示錯誤, 你可以運行第二個命令給內核打補丁. 如果第一個命令有誤, 請務繼續的操作!

你也能夠通過內核的prepatches方式打補丁. 比如, 如果你需要一個功能, 而這個功能僅存在於2.6.19-rc4中, 正式完整的內核版本仍沒有發布, 而patch-2.6.19-rc4.biz2已經發布. 你可以把這個補丁打到2.6.18的內核源代碼中, 但請不要達到2.6.18.1或2.6.18.2, 等. 這個規則在接下來的網頁中注明: http://kernel.org/patchtypes/pre.html

prepatches等同於linux中的測試發行; 他們位於存檔的測試目錄中, 我們可以使用patch(1)工具對上一個完整發行版(版本號分三部分)打補丁(例如, 2.6.12-rc4 prepatch只可以給2.6.11內核源代碼打補丁, 而不是2.6.11.10.)

所以如果你想編譯2.6.19-rc4內核, 你必須在步驟3.1下載2.6.18(http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.18.tar.bz2)替代2.6.18.1內核源代碼!

下面是如何給2.6.18打上2.6.19-rc4補丁:
cd /usr/src
wget http://www.kernel.org/pub/linux/kernel/v2.6/testing/patch-2.6.19-rc4.bz2
cd /usr/src/linux
bzip2 -dc /usr/src/patch-2.6.19-rc4.bz2 | patch -p1 --dry-run
bzip2 -dc /usr/src/patch-2.6.19-rc4.bz2 | patch -p1

5. 配置內核
使用當前工作內核的配置文件做為新內核配置文件的基礎是一個很好的主意. 因此我們拷貝已存的配置文件到/usr/src/linux:
cp /boot/config-`uname -r` ./.config

然后運行
make menuconfig

然后我們看到內核的配置菜單. 移動綠色光標到 Load an Alternate Configuration File 行后選擇.config文件(包含了當前工作內核的配置)做為配置文件:

然后瀏覽內核配置菜單, 選擇你需要的功能. 完成配置后, 選擇Exit, 回答下面的問題(Do you wish to save your new kernel configuration? 你希望保存新的內核配置嗎?), 選擇Yes:

6 構建內核
執行下面命令來構建內核:
make-kpkg clean
fakeroot make-kpkg --initrd --append-to-version=-custom -j4 kernel_image kernel_headers

如果要進行交叉編譯,可以進行確定架構機器上的編譯。
fakeroot make-kpkg --initrd --append-to-version=-custom -j4 --arch i386 kernel_image kernel_headers (比如在64位機器上編譯32位的內核)

在--append-to-version= 后面你可以寫上任何字符串來區別內核版本, 但是必須以" - "符號開始而且后面不包括任何空格.

保持耐心, 內核編譯需要一定時間, 主要看你的內核配置和處理器速度.

7 安裝新內核
在成功構建內核后, 你在/usr/src目錄能發現兩個.deb軟件包.
cd /usr/src
ls -l

在我的測試系統上, 他們分別名為 linux-image-2.6.18.1-custom_2.6.18.1-custom-10.00.Custom_i386.deb (包含了實際的內核) 和 linux-headers-2.6.18.1-custom_2.6.18.1-custom-10.00.Custom_i386.deb (包含了需要的文件, 用於以后需要編譯額外的內核模塊). 我是這樣安裝的:
dpkg -i linux-image-2.6.18.1-custom_2.6.18.1-custom-10.00.Custom_i386.deb
dpkg -i linux-headers-2.6.18.1-custom_2.6.18.1-custom-10.00.Custom_i386.deb

(現在你甚至能夠拷貝這兩個.deb文件到其它的Ubuntu系統, 通過上面的方式安裝. 你將不再需要編譯內核.)

然后檢查 /boot/grub/menu.lst文件, 現在你將能發現新內核使用的兩個引導配置塊:
vi /boot/grub/menu.lst

在我測試系統上已經添加好的引導配置塊是這樣的:
title Ubuntu, kernel 2.6.18.1-custom
root (hd0,0)
kernel /boot/vmlinuz-2.6.18.1-custom root=/dev/sda1 ro quiet splash
initrd /boot/initrd.img-2.6.18.1-custom
savedefault
boot

title Ubuntu, kernel 2.6.18.1-custom (recovery mode)
root (hd0,0)
kernel /boot/vmlinuz-2.6.18.1-custom root=/dev/sda1 ro single
initrd /boot/initrd.img-2.6.18.1-custom
boot

現在重啟系統:
shutdown -r now

如果一切進展順利, 你的新內核正常工作. 你還可以通過運行下面命令來檢查新內核是否運行:
uname -r

這將會顯示如:
2.6.18.1-custom

如果系統沒有起來, 重啟一下, 你會看到:

ESC進入GRUB菜單:

選擇你以前的內核啟動系統, 現在你能再次嘗試編譯新的工作內核. 不要忘記從/boot/grub/menu.1st文件中移去不需要的引導內核信息.


 

=======================================================================================================

=======================================================================================================

======================================================另一篇=====================================================

=======================================================================================================


編譯 Linux2.6 內核總結 在X86, Ubuntu 上編譯Linux2.6內核,總結如下:

基礎知識

在介紹如何編譯內核之前, 需要對內核相關概念有一定的了解. 關於Linux kernel的介紹浩如煙海, 這里只介紹系統中相關的目錄, 文件及命令.

/boot

/boot/vmlinuz-<version>        : 用於啟動的壓縮內核鏡像, 它也就是/arch/<arch>/boot中的壓縮鏡像.
/boot/system.map-<version>  : 存儲內核符號地址.
/boot/initrd.img-<version>     : 初始化RAM硬盤時, 用來存儲掛載根文件系統所需的模塊.
/boot/grub/menu.lst                : grub的配置文件. (不同的發行版中它可能位於不同位置.


/lib/modules

該目錄包含了內核模塊及其他文件. 注意, modules中一般會有多個目錄: 系統自帶的內核模塊在這里, 你編譯自己的內核模塊后, 它們也會被安裝到這里. 不同的目錄由內核版本號來區分. 即modules里目錄的名稱是內核版本號. (使用$  uname -r 可知當前系統內核所用的模塊位於哪個目錄).

/lib/modules/<kernel-version>/build
儲存為該版本的內核編譯新模塊所需的文件. 包括Makefile, .config, module.symVers(模塊符號信息), 內核頭文件(位於include/, include/asm/中)

/lib/modules/<kernel-version>/kernel
儲存內核目標文件(以.ko為后綴). 它的目錄組織和內核源代碼中kernel的目錄組織相同.

/lib/modules/<kernel-version>/中:
modules.alias       : 模塊別名定義. 模塊加載工具使用它來加載相應的模塊.
modules.dep        : 定義了模塊間的依賴關系.
modules.symbols : 指定符號屬於哪個模塊.

這些文件都是文本文件, 可以查看它們.

$ uname -r

uname(1)被用來查看系統信息, 這里對我們有用的是它的"-r"選項, 它顯示內核版本信息.


下載內核, 驗證簽名, 解壓縮
http://www.kernel.org/pub/linux/kernel/下載最新版本的2.6內核. 速度還比較快. 這里以linux-2.6.17.13為例:

1, 下載內核壓縮包

bzip2格式比gzip壓縮效率更高, 一般就下載bz2的壓縮包. 下載了內核壓縮包之后, 還可下載對應的sign文件. 它被用來驗證內核壓縮文檔的openPGP簽名. 詳細信息可參考 這里.

wget -c http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.17.13.tar.bz2
wget -c http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.17.13.tar.bz2.sign

2, 驗證簽名

首先從pgp的服務器獲取簽名公匙, linux內核包的公匙編號是0x517D0F0E. 再利用sign文件來驗證.bz2壓縮包的簽名.  如果輸出中有類似gpg: Good signature from "Linux Kernel Archives Verification Key <ftpadmin@kernel.org>" 的內容, 說明該包是有效的. 后面給出的警告信息可以忽略.

gpg --keyserver wwwkeys.pgp.net --recv-keys 0x517D0F0E
gpg --verify linux-2.6.17.13.tar.bz2.sign linux-2.6.17.13.tar.bz2

GPG簽名只是保證鏡像網站提供的壓縮包和kernel.org所提供的是相同的, 如果你在kernel.org下載, 不需要驗證簽名.

3, 解壓縮

解壓縮之前, 有個問題值得思考: 要將壓縮包解壓到何處? 即要在哪個目錄進行Linux內核源代碼的編譯? 

內核源碼樹的 README中有這樣一段話:

Do NOT use the /usr/src/linux area! This area has a (usually incomplete) set of kernel headers that are used by the library header files.  They should match the library, and not get messed up by whatever the kernel-du-jour happens to be.

實 際上, 在我的Ubuntu系統中, /usr/src/ 目錄中最初是沒有linux目錄的. 你可以在/usr/src中新建一個目錄, 用內核版本命名, 比如/usr/src/linux-2.6.17.13. 這樣, 即便之前在/usr/src中安裝了linux的頭文件, 也不會對它們造成影響.

我采用的方法是: 在/usr/local/src/kernel目錄中進行.

編譯內核時候, 若在make 后添加 "O=<complete_dir>"將會使生成的目標文件(包括.config)被放置到指定的目錄. 否則, 生成的目標文件默認地被放到內核源碼目錄. 我們就采用默認的方法. 這是安全的.

4, 打補丁

對於kernel.org中的內核, 我個人認為沒必要下載patch, 再打補丁. 費那事干嘛, 直接下載bz2包不就行了. 特定的補丁只能針對緊隨其前的一個版本. 比如你想從2.6.17.1升級到2.6.17.13. 你得打12次補丁, 忒麻煩了.

但 是, 有時候需要對"官方內核"添加補丁, 以支持特定的系統. 比如ARMLinux, 它往往不是發布完整的內核, 而是發布針對特定版本的補丁包. 這種情況下就要知道如何打補丁了. 方法很簡單: 把補丁下載, 解壓. 得到patch-<version>. 將它放到解壓后的內核目錄樹的父目錄中(也就是補丁和內核目錄在同一目錄). 然后cd到內核目錄樹中運行:

patch -p1 <../patch-<version>


配置內核
1, 前提: 構建編譯環境

顯然, 需要make, gcc等工具, 在Ubuntu中, 只需一條簡單命令就可安裝所有的源代碼編譯工具: 
apt-get install build-essential

當然, 如果你的內核是要安裝到不同體系結構的目標系統中, 還需要構建cross編譯環境.

2, 內核配置工具介紹

Linux提供了多種內核配置工具, 最基礎的是 make config, 它列出每個編譯選項, 而且是基於文本的, 一般不用它.

menuconfig (make menuconfig)
menuconfig是比較主流的配置工具, 它需要curse庫的支持, 在Ubuntu中默認是沒有的, 先安裝它: 
apt-get install  libncurses5-dev 

xconfig ( make xconfig)
xconfig基於X11, 使用qt庫, 在Ubuntu中先安裝qt庫: 
# apt-get install libqt3-headers libqt3-mt-dev

3, 內核配置相關

.config配置文件
在內核樹的根目錄中,有一個.config文件,它記錄了內核的配置選項,可直接對它進行修改,再運行( 若.config不存在,對內核進行配置后會生成它,這種情況下當然不能開始就運行oldconfig ). 實際上, 如果你手頭有合適的 .config 文件, 可以運行 make oldconfig  直接按 .config 的內容來配置 
$ sudo make oldconfig

對內核的配置都是圍繞 .config 來展開的.  即便開始 .config 文件不存在, 進行配置后會創造它. 

其實可以直接在menuconfig中加載已有的配置文件, 不要將它改名為.config. 否則完成配置, 退出menuconfig時會提示你運行 make mrproper. 上面提到的方法只是比較適合於oldconfig!

make相關命令
make oldconfig    : 基於已有的.config進行配置, 若有新的符號, 它將詢問用戶.
make defconfig    : 按默認選項對內核進行配置(386的默認配置是Linus做的).
make allnoconfig : 除必須的選項外, 其它選項一律不選. (常用於嵌入式系統).

make clean        : 刪除生成的目標文件, 往往用它來實現對驅動的重新編譯.
make mrproper : 刪除包括.config在內的生成的目標文件. 

可以查看內核源碼樹中的README和Makefile了解上述配置方法.

4, 開始配置

1, 修改Makefile (可選)
在Makefile中, 有這樣的內容:

VERSION = 2
PATCHLEVEL = 6
SUBLEVEL = 16
EXTRAVERSION = .20
NAME=Sliding Snow Leopard

我們在編譯內核之前, 可以先修改Makefile中的版本信息(一般是修改EXTRAVERSION, 比如EXTRAVERSION =-zp). 這樣就能將自己編譯的內核同別人編譯的相同版本內核區分開來. 修改, 編譯之后, 可使用 $  uname -r 查看內核版本信息.

但實際上, 從2.6.8的版本起可在內核版本號后面添加個性化字符串. 所以也就沒有必要修改Makefile了:  ()  Local version - append to kernel release

如果你即修改了Makefile中的EXTRAVERSION, 又在配置時定義了local version. 那么local version所定義的字符串將位於末尾, 緊跟在EXTRAVERSION的值之后.

另外, 如果要用到ccache, 也需要修改Makefile. 參考后面的內容!

2, 准備一個.config文件.
內核配置選項眾多, 一個個去配置相當麻煩. 建議使用手頭已有的配置文件. 如果你手頭沒有,  有多種方法獲得它:

(1) 使用make defconfig將在源碼樹的根目錄得到.config. 
(2) 使用當前系統內核的配置文件, 一般位於/boot目錄中. 它的名稱並不是.config.
(3) 使用別的發行版提供的配置文件(網上去下載).

slackware的.config是個不錯的起點. 在它的配置文件基礎上作出適合自己系統的修改, 比較方便.  也可以拷貝發行版提供商的.config文件.

3, 建議配置步驟:
(1) 將配置文件(不要將它命名為.config!)拷貝到內核源碼樹根目錄.
(2) make menuconfig, 然后將上述的配置文件加載進去.
(3) 配置完成后, 將生成的配置文件備份(.config, 也可以在menuconfig中指定生成的配置文件名).


配置選項是最頭疼的問題
: 配置時候注意驅動的問題, 尤其是網絡驅動. 使用 pppoe 的話, 要選上 ppp 相關的選項. 網卡驅動也要注意, 我剛開始配置的時候, 只加上了 lspci | grep Ethernet 對應的網卡, 但是重啟后找不到eth0, 一怒之下, 把所有的1000M 網卡驅動都選為模塊. 總算成功. 以后有空仔細看看. 再就是聲卡驅動也要注意. 可參考我blog里另一篇文章: 配置2.6內核選項注解

也可以到Linux KernelConfiguration Archive看一看, 雖然它里面的內容與圖形化配置工具中的help大同小異. 


編譯內核

配置完成后,就要進行編譯了。編譯2.6的內核很簡單, Makefile自動檢測依賴性,產生編譯文件(bzImage),你也不用另外編譯modules!.  只需運行:
$ make
 
使用make編譯內核的技巧     

1, 可以略去編譯信息(但仍能看到warning, error)
$sudo make > /dev/null
$sudo make -j2 > /dev/null

2, 加速編譯過程.
(1) 可以使用 $ make -j<n> . 其中n = 2 * cpu的個數. 對於一般的單CPU系統, 通常用 $ make -j2 . 為編譯過程分配2個人物, 這樣在進行磁盤I/O時候, CPU就不會空閑了. 一般這個選項可以將速度提高10%左右.
 
(2) 還可以使用
ccache 來提高編譯速度.  Debian/Ubuntu系統中默認沒有安裝, 首先安裝它: $ sudo apt-get install ccache . 然后更改內核根目錄的Makefile, 將CC和HOSTCC變量定義前添加ccache: 
CC               = $(CROSS_COMPILE)gcc
HOSTCC      = gcc
更改為:
CC               = ccache $(CROSS_COMPILE)gcc
HOSTCC      = ccache gcc


編譯生成的文件介紹

vmlinux   :  未經壓縮的原始linux內核鏡像.
/arch/<arch>/boot/zImage(bzImage):  使用zlib壓縮后的內核鏡像.
注意, 不同的體系結構對壓縮后內核鏡像的默認命名不同, 比如arm的是zImage, 而i386的是bzImage. (z表示zlib, bz表示"big zlib", 而非bzip2!)


安裝內核
編譯完成后, 在 arch/i386/boot目錄中會有 bzImage 映象文件.

安裝內核步驟如下: 
(1)在/boot目錄下新建mynewkernel目錄,並將bzImage拷貝到/boot/mynewkernel目錄下:
$ sudo cp arch/i386/boot/bzImage /boot/mynewkernel

(2)更改/boot/mynewkernel中bzImage的名字
$ sudo mv bzImage vmlinuz-2.6.17.13

(3)備份、修改grub配置文件
$sudo cp /boot/grub/menu.lst menu.lst.origin

修改menu.list,加入以下內容(從既有的menu.list中相關的內容拷貝):
title        zp, make defconfig, 2.6.17.13
root        (hd0,2)
kernel        /boot/mynewkernel/vmlinuz-2.6.17.13 root=/dev/sda3 ro quiet splash
savedefault
boot


(4)安裝模塊:

$sudo make modules_install

reboot, 在grub啟動菜單中選擇新內核啟動...


參考資料
(1)  Linux-kernel-tree/README
(2)  kernel-build-howto
(3) 關於ccache, 可參考IBM developworks上的 這篇介紹. 

-------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------
也可以用:
make && make modules && make modules_install && make install 

參考:http://forum.ubuntu.org.cn/viewtopic.php?t=46958&highlight=%E7%BC%96%E8%AF%91%E5%86%85%E6%A0%B8


-------------------------------------------------------------------------------------
-------------------------------------------------------------------------------------


Linux(Ubuntu)學習札記 /liaxiz  發表於2007-06-11, 20:26         
經過兩天一夜的實踐,終於成功編譯內核2.6.21.4,經歷了五次的失敗,一次次的在考驗着我的耐性,還好,堅持下來了,便將這兩天的經歷書於此處,與所有被初次編譯內核的困難折磨過的朋友們共勉。
        
        本次實踐最大的收獲有三點:
        1. 首次嘗試到了什么是真正的定制。linu把所有的自由賦予了使用者,我們應該珍惜這份尊重,並盡情地享受這種自由。內核中許多模塊許多是根本不需要的,還有一些是默認的設置不合理的,都可以根據自己的具體情況更改。
        2. 以前遺留的問題得到了解決。現在我的刻錄機能讀盤了,在編譯內核的時候,去掉了scsi模擬ide設備的模塊,這樣,2.6以后的內核就可以正常識別刻錄機了。
        3. 意外的驚喜。本來在2.6.20.16下,使用的是Ubuntu帶得顯卡驅動,但是無論怎么調,刷新率都到不了60HZ,並且,如果使用這個 xorg.conf,新內核根本無法進入Xwindows,所以,我又把xorg.conf改回剛裝好Ubuntu時沒換驅動時的狀態,結果新內核進入了 Xwindows,並且刷新率為60HZ,真是意外的驚喜,新內核的兼容性可是好。
         
        現在反省下為什么會失敗那么多次:
        1.  網上的編譯方法得版本太多了,隨着內核的升級,有些版本 就太老了,不免發生了些邏輯上的混亂。
        2,  第一次編譯內核,可是不知深淺,在配置內核的時候,有些模塊刪掉了,結果無法啟動。

        編譯步驟如下:
        1. 到官方網站下載內核 http://kernel.org/pub/linux/kernel/v2.6
            解包到 /usr/src 目錄下,命令:
                   sudo tar -xvjf linux-2.6.21.4.tar.bz2
        2. 進入到編譯目錄中,此后的所有操作均在該目錄下進行。
                   cd /usr/src/linux-2.6.21.4/
            配置內核,推薦使用xconfig,非常直觀,圖形界面,需要Qt,非常穩定,編譯了六次沒有出現意外。
                   sudo make xconfig
            選項很多,不明白的,默認就可以了,可參考文章:
                   http://lamp.linux.gov.cn/Linux/kernel_options.html
            配置好了,保存,在目錄中會創建.config文件,編譯的時候是根據此文件進行。
        3.開始編譯:
           自2.6內核開始,就不用make dep了,依賴關系會自動維護,並且命令也減少了,以往是:
                   sudo make dep 
                   sudo make clean 
                   sudo make bzImage 
                   sudo make modules 
                   sudo bzImage install
                   sudo make modules_install
            現在僅需要:
                   sudo make              //時間會很長
                   sudo make modules_install
                   sudo make install    //有些資料顯示,這個命令可以自動更改/boot/grub/menu.lst,可是我的實踐中並沒有成功,而且還有錯誤
            本來到此因改結束了,可是在sudo make install后,並沒有產生預期的結果,/boot/grub/menu.lst並沒有改動,因此還得執行下述命令:
                   sudo mkinitramfs -0 /boot/initrd.img-2.6.21.4 2.6.21.4
                   sudo gedit /boot/grub/menu.lst
            加入如下內容:
                   title         Ubuntu, kernel 2.6.21.4
                   root        (hd0,6)
                   kernel         /vmlinuz-2.6.21.4 root=UUID=2f48ce41-ead0-463e-af93-b0503de13273 ro quiet splash
                   initrd        /initrd.img-2.6.21.4
                   savedefault
             綠色的字體是根據需要更改的,其他的是復制的別的核心啟動項的。
             
        到此,編譯,安裝結束,重新啟動,就可以進入新核心的系統了。因為這個核心太新了,源里還沒有它的頭文件,虛擬機就沒法用了,等以后升級吧。

       為了這一個問題,被“殘酷”地折磨了將近30個小時,但心情還是蠻愉快的。linux讓我們能在痛苦中體會自由帶來的樂趣,也可謂之奇。希望每一個編譯過內核的朋友都能享受這一過程。   原文地址 http://liaxiz.bloghome.cn/posts/97402.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM