UBUNTU 7.04 編譯核心

來源:互聯網
上載者:User

每一個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 kernel_image
kernel_headers

在--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檔案中移去不需要的引導核心資訊.

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.