核心終於編過並且升級了,本來打算抓緊繼續往下學習。但是在老婆的鼓勵下,感覺還是停下來總結下比較好,這樣對自己對別人都有所協助。
0、環境介紹
我是在VirtualBox-3.1.6-59338-Win的虛擬機器上安裝了ubuntu-9.10-desktop-i386.iso。電腦本身是XP系統。
注意,在進行下面之前最好做以下工作:
1) 安裝了增強包。這個裝上後虛擬機器和我們的電腦之間切換很是方便,不需要按右ctl鍵了。至於其他的好處,現在還沒意識到,呵呵。
2) 和主機(XP系統)之間設定好共用資料夾。這樣比較方便互連資料。
3) 虛擬機器的硬碟空間最好要20G以上。因為核心解壓後就占很大空間了,再做其他的,可能就不方便了。
1、下載核心源碼
地址為www.kernel.org,在“LatestStableKernel”下面有個綠色的箭頭,點擊就能下載了。我下載是2.6.33.2,下面以這個版本為例進行講解。
將下載下來的linux-2.6.33.2.tar.bz2放在/usr/src下。
2、解壓核心源碼
運行命令:
#cd/usr/src
#tar-jxvf linux-2.6.33.2.tar.bz2
#ln-s linux-2.6.33.2 linux (將linux符號連結映射到linux-2.6.33.2)
#cdlinux
3、#makemrproper
該命令確保原始碼目錄下沒有不正確的.o檔案以及檔案的相互依賴。
因為是剛下載的完整來源程式包,本步驟可以省略。但是如果這些來源程式被多次使用過,那麼本步驟不可以忽略。
4、配置核心
注意:執行這步之前,需要先安裝libncurses,因為ubuntu預設沒有安裝。安裝命令為:
#apt-getinstall libncurses5-dev
配置可以使用下面命令中的一個:
#makeconfig (基於文本的最傳統的配置介面,不推薦使用)
#makemenuconfig (基於文本菜單的配置介面)
#makexconfig (需要QT已經被安裝)
#makegconfig (需要GTK+已經被安裝)
通常我們都用第二個:#makemenuconfig
具體配置核心,這裡不再詳述了。我第一次也什麼都沒有改動。
5、編譯核心
注意:執行此命令前
1)需要是root使用者才行。可以用su或者sudo命令。
2)要確保/lib檔案夾是可以寫的,因為ubuntu預設為不可寫的。命令:
#chmod777 /lib
這個可要注意哦。我就是沒注意更改,然後執行了下面的編譯核心的命令就下班回家了,以為第二天來了就編譯好了。沒想到第二天來了發現執行了沒多久就停掉了,原因就是打算往/lib裡的某個檔案夾下考檔案時候,出錯了。
下面開始編譯:
#makebzImage ( 產生可執行檔Ubuntu核心引導檔案)
#makemodules modules_install
以上要花一兩個小時吧。
6、以上成功的話,核心就編譯成功了。下面更新核心
#cp arch/i386/boot/bzImage /boot/vmlinuz-2.6.33.2
然後將將System.map複製至/boot下:
#cp System.map /boot/System.map-2.6.33.2
產生initrd.img:
#cd/lib/modules/2.6.33.2
#mkinitramfs-o /boot/initrd.img-2.6.33.2
注意:這個地方有些要說明的。
製作initrd.img,在Fedora下面一般是用mkinitrd,而在Ubuntu/Debian下是用mkintramfs.
它們的用法稍微有些不一樣,如下所示:
#mkinitrd /boot/initrd.img 2.6.33.2
#mkintramfs 2.6.33.2 -o /boot/initrd.img
我這個是Ubuntu/Debian,當然要用mkintramfs。我一開始沒分清 Fedora還是Ubuntu/Debian,用mkinitrd始終說找不到,查了下才發現,原來使用mkintramfs啊。
7、自動尋找新Ubuntu核心,並添加至grub引導
#update-grub
8、好了,此時重啟,用命令(uname -r)查看下你的核心是不是2.6.33.2吧。
注意:以上都是依據核心版本為2.6.33.2寫的,但是請將所有相應的2.6.33.2替換為你的新的版本號碼。