close
[adsense_id="1"]

想必很多人已經玩過Linux了,而目前最火紅的版本就是Ubuntu。作業系統這麼多種,功能這麼多,有沒有曾經想過要自己製作屬於自己版本的作業系統呢?其實是不難的,我們可以透過重建核心來改變。

(為方便使用者輕鬆閱讀本文,內部的圖片均可點擊放大)

[adsense_id="4"]



核心,英文就是Kernel,那是什麼東西呢?它是作業系統中最不可或缺的一部分,裡面存有許多關鍵性的資訊,以及連動關係,可能短短3000多行左右的程式碼就可以形成一個作業系統的核心,不過別小看這3000多行程式碼,它可對作業系統有著很大的影響力,若是少了它,作業系統根本沒法開機。

重新編譯作業系統,可以把自己想要的功能利用模組化的方式增加進去,而不用的功能,也可以在重新編譯的時候,把那些功能拿掉,這樣就可以製作出一套最符合自己,也最具有效能的作業系統,本篇以Ubuntu來實作重新編譯,不過版本並不是最新的,但是其實在編譯上的過程大同小異。

請注意重新編譯Kernel可能會造成系統的損毀,請在實作重新編譯之前,將重要的資料備份起來,並且在過程中一定要注意每一個小細節,建議也先備份好原本的Kernel,若是編譯壞掉還可以回復!另外,本教學是基於使用者已經對Linux熟悉的狀況下進行實作,若您為初學者,或是只是好奇好玩,請不要嘗試!

好的,以下開始實作重新編譯Kernel。我是使用Ubuntu 9.10這個版本,Kernel則是2.6.31.20,不知道自己是哪一個版本的Kernel嘛?請打開終端機下指令吧!
uname -a



接下來進行以下動作前,請務必確定一定要備份好重要的檔案!

我使用的新Kernel是2.6.33.1,然後環境是在Virtual Box虛擬機器實作。

好的,打開終端機吧!接下來我們要先來下載一些必要的元件才能進行編譯Kernel

1

第一個先裝GCC,用Linux寫過程式的應該都一定會裝這個才對,當然若是你之前裝過,這一步可以跳過的。
apt-get build-dep gcc

若是使用Ubuntu,那指令要加打上sudo,
sudo apt-get build-dep gcc

切換到root的權限才有辦法進行一些重大的指令碼。Ubuntu為了系統安全性,所以把可以登入成root權限的功能取消了!只好每次我們要用的時候自己加上sudo去切換權限。

裝好GCC後,再來裝5個編譯kernel必須的元件,分別為:

kernel-package — 顧名思義一下吧

libncurses5-dev — 這是一個用來控制終端機顯示的資料庫,想知道其他詳情請自行Google

fakeroot — 可以模擬出一個root的執行環境,但是只能以root身份去執行,並不等於sudo後的root身份。使用fakeroot模擬出來的只能做執行,並不能修改。

wget — 這個是用來下載資料用的工具,當然你高興也可以自己先下載好檔案,在從終端機呼叫進來執行。

bzip2 — 一個(解)壓縮軟體,使用它是因為他的壓縮率比較高。

好了,一口氣講了五套軟體,現在就來裝好它們。
apt-get install kernel-package libncurses5-dev fakeroot wget bzip2

2

裝好以後,就來下載核心檔吧。我們先切換目錄到./usr/src去執行下載,當然你可以把核心下載到其他地方,但是系統預設是在這個地方編譯核心的,所以乾脆直接下載到該目錄等等比較方便操作。
cd /usr/src

大家可以到

http://www.kernel.org

去查看自己想裝的Kernel版本。
wget http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.33.1.tar.bz2

這後面的網址請自己修改,看想裝哪個版本的,請自行改掉連結,或是有其他地方的檔案就改成該下載檔案的網址,這部份我想應該不用多做說明吧!

5

接下來,我們要來解壓縮下載回來的kernel

6
tar jxf linux-2.6.33.1.tar.bz2

(請自行修改檔案名稱)解壓好的檔案會在./usr/src目錄底下,再來建立一個軟連結(soft link) 是這樣翻嗎?!就是類似Windows的捷徑,當然你也可以使用mv指令把資料夾名稱改掉,當然你也可以什麼都不改!不過等一下的所有指令會打到你想哭出來而已。

我們把解出來的資料夾linux-2.6.33.1製作一個連結到linux

當然有軟連結就會有硬連結,製作硬連結指令只要把 -s 拿掉就是硬連結了,大家執行完可以執行 ls 去看看產生的軟連結跟硬連結的顏色,不一樣喔!連結方式當然也不一樣,但是這邊不多講,要不然這篇教學文就變成指令大全集了…囧

好,我們繼續。

然後有一個小小插曲,因為從2.6.32以後,有一個檔案UTS_RELEASE被換地方了!所以我們要去把位址改掉,要不然編議會出現以下神秘的錯誤:

echo "The UTS Release version in include/linux/version.h";

echo " \"\" "; echo "does not match current version:";

echo " \"2.6.33-tchdavid\" ";

echo "Please correct this.";

exit 2
The UTS Release version in include/linux/version.h
""
does not match current version:
"2.6.33-tchdavid"


然後你會瘋掉,因為花了好多時間居然跟你說有錯誤!所以我瘋過一次就好了,當然若是你不介意想再當個嘗試家的話,就請便囉!歡迎你提供新的方法。不過其他不願意嘗試的朋友就請繼續看下去吧!看到這個錯誤了嗎?就是那個UTS_RELEASE搞得鬼!

現在去開啟檔案 ./usr/share/kernel-package/ruleset/misc/version_vars.mk,看你要怎麼開啟吧!我是用vim去開啟來編輯,不過從圖片上應該不難看出我已經在 ./usr/share/kernel-package/ruleset/misc 這個目錄底下了,所以我的指令只剩下:
vim version_vars.mk

打開後看到以下位置:(點擊圖片可以放大)

8

把 echo include/linux/version.h;

改成 echo include/generated/utsrelease.h;

存檔就好了!

什麼?!執行vim指令沒反應!!代表你沒裝vim這個編輯器,請執行指令:
apt-get install vim-full

什麼?!你不會用vim編輯器?!好吧,進去vim以後,按 i 或 o 是啟動編輯模式,進入編輯模式才能改動檔案,要不然任憑你怎麼按delect或是其他鍵,它都無動於衷啦!編輯好,按esc離開編輯模式就會回到瀏覽模式,再來要怎麼離開呢?請看以下指令:(在瀏覽模式直接輸入就可以了)

:q — 離開不存檔

:q!強制離開不存檔

:w — 存檔

:wq — 存檔後離開

:wq!強制存檔後離開

請自己判斷吧(XD)!(又不小心多寫了文字編輯器的使用方法了~)

若是你進去vi或是vim後,發現你按上下左右或是其他鍵,它顯示出來的功能不一樣,像是你按上,卻在裡面出現A等等之類的,也就是程式不聽話!為什麼為什麼為什麼呢?因為vim有兩種使用集,vim.basic 跟 vim.tiny,會出現以上狀況是因為你的vim被設成 vim.tiny 了,執行指令:
update-alternative  –config vi

把它改成 vim.basic 就好了。

[adsense_id="1"]

7

好,離題太久了,我們繼續吧!接下來要來複製系統的設定檔,這麼做就是讓等一下在選擇功能時,可以輕鬆一點,先把現在可以跑起來的系統設定複製編輯進去新核心,出錯率會降低很多,請再次使用終端機輸入指令:
cp /boot/config-`uname -r` ./.config

9

cp 就是一個複製指令,好了以後,要進去編輯核心了!
make menuconfig

10

進入後,會看到像以下畫面:

11

看到這麼洋洋灑灑一片,是不是有點害怕呢?不要緊張,先直接移動到 Load an Alternative Configuration File ,把設定檔叫進來吧。

12

確認路徑後按 Enter 吧!然後進入 General setup,在 Local version 那邊按一下 Enetr 進去編輯自己想要得新核心名稱。

13

14

像此例,我輸入 -tchdavid,那到時候安裝好得核心就會是 2.6.33.1-tchdavid,夠簡單吧!

15

記得把 Local version 下面那個選項標示成 * (按 y),才能把你剛剛設定的名字附加 (append) 在版本名稱後面。然後其他設定就大家自己看看吧。我會去多調整 Prcessor family 跟 Preemption Model。

16

17

還有一些驅動程式,沒用到的話可以編譯成模組,編成模組的好處是,未來當你要使用這些功能還是可以另外安裝的,不過現在系統會先當成模組去安裝,這樣核心就會減肥許多,系統也會更快更穩定!全部完成後,請記得 Save ,然後離開。回到終端機,我們要來清除一些配置設定:
make-kpkg clean

18

這指令相當於make distclean,要知道啥意思請自行Google吧,再來就要執行編譯了!
fakeroot make-kpkg --initrd kernel_image kernel_headers

19

這一步驟要相當長的時間,大家可以去泡個茶聊聊是非這樣。

20

這就是編譯好的畫面,下 ls 指令可以看到多出兩個檔案,紅色那兩個,再來要來安裝它們。
dpkg -i linux-image-XXXX.Custom_i386.deb

這檔名請自己改掉。

21
dpkg -i linux-headers-XXXX.Custom_i386.deb

一樣,檔名請自己改!

22

然後重新開機,再次執行終端機,
uname -a

若是出現的版本碼是你剛剛編譯的新版本,那恭喜你,就成功啦!

25

這裡面有很多複雜的指令流程,請大家自己去瞭解吧!會發現linux很好玩的!

我終於把這篇文章復原了。YA!

[adsense_id="1"]

[adsense_id="5"]
arrow
arrow
    全站熱搜

    淺草靈 發表在 痞客邦 留言(0) 人氣()