前言:此篇不算是一個news,只是對Debian對kernel的處理整理,文章理的步驟大家都很清楚了,所以改以介紹觀念為主,另外一方面,也是請大家幫忙Debug內容
** Using APT
經過前面的apt指令介紹,應該對Debian安裝軟體的方式有所了解了,而本章節是要介紹如果透過apt來生及系統的kernel。
筆者的PC是P4的機器,所以要升級的套件名稱是kernel-image-2.4.20-686,然後請開一個terminal,執行
apt-get install kernel-image-2.4.20-686
可以看到圖中有詢問到是否要停止安裝,這是因為Debian official package tree所附的kernel-image是有使用initrd.img,所以在update kernel-image的時候會有此警告,要避免此訊息可以在/etc/kernel-img.conf中加入:
do_initrd = Yes
grub的使用者請修改/boot/grub/menu.lst
title Debian GNU/Linux, kernel 2.4.20-686
root (hd0,1)
kernel /vmlinuz-2.4.20-686 root=/dev/hda7 ro
initrd /initrd.img-2.4.20-686 savedefault
boot
然後請重跑:grub-install /dev/hda
重開機之後,選用新的kernel,這樣就算是完整的使用APT升級Kernel的方法了。
** Building Kernel
編譯核心!!!
這個動作對於新手是相當害怕且興奮的事情,害怕的是因為在Kernel選單中有太多東西不認識了,且不清楚該怎麼選擇才是正確的,在這一節中,我們不詳細解釋Kernel選單中的意思,重點擺在如何利用Debian中的技巧來快速編譯自己的核心。
首先,先確定好系統已經安裝好下列的package。
1. libncurses5-dev
2. kernel-package
3. kernel-source-2.4.20
4. 目前所使用的kernel的config檔案,位置放在/boot/下面,檔名以config-xx.xx.xx
然後切換到/usr/src下,會發現有一個kernel-source-2.4.20.tar.bz2,注意:此檔案已經是Debian patch過後的,跟http://www.kernel.org/所放的kernel-source並不一樣,請先注意此點,會在後面做解釋。
接下來,跟著筆者所寫的指令完成kernel building的動作。
1. tar -jxf kernel-source-2.4.20.tar.bz2
2. cd kernel-source-2.4.20
3. make-kpkg clean
4. make-kpkg --revision 2.4.20.custom-1 --append-to-version -custom --config menuconfig
5. make-kpkg binary-arch
步驟一:當然是解開kernel-source的壓縮檔摟。
步驟二:切換到以解開的kernel-source目錄下。
步驟三:make-kpkg是Debian自己實作的tool,主要是用來簡化編譯kernel的步驟,執行make-kpkg clean相當於make distclean(請參照 kernel source 中的 Makefile)的動作。
步驟四:在這個指令中,會發現筆者使用了兩個參數,--revision,--append-to-version,後面又加入了一些奇怪的數字,這到底是什麼意思呢,讓筆者好好的解釋一下吧。
--revision這個參數會影響到此deb的Version。
這樣講似乎有點模糊,可以先看一下kernel-image-2.4.20-686的例子。
dpkg -l kernel-image-2.4.20-686
||/ Name Version Description
+++-=================================-=================================-=======================================================
ii kernel-image-2.4.20-686 2.4.20-5 Linux kernel image 2.4.20 on PPro/Celeron/PII/PIII/PIV.
在這個例子中,Version對應的就是-revision所產生的編號,-append-to-version會在安裝好核心的時候驗證,繼續往下看。
步驟五:binary-arch會產生kernel-image.deb和kernel-headers.deb,並用dpkg -i來安裝編譯好的kernel。
再來驗證一次剛剛的地方。
dpkg -l kernel-image-2.4.20*
||/ Name Version Description
+++-=================================-=================================-=======================================================
ii kernel-image-2.4.20-custom 2.4.20.custom-1 Linux kernel image 2.4.20 on PPro/Celeron/PII/PIII/PIV.
可以看出變化嗎?以上就是在Debian上自行編譯kernel的方法,很簡單吧。^_^...
** Patching Kernel
Patch Kernel!! 為什麼要patch kernel呢?用好好的還需要更換嗎?
是的,使用正常的核心基本上是不建議更換,除非是臭蟲修正或是新的功能要求為主。
以下筆者以2.4.20的kernel且加入preempt和low latency的功能來實現patch的步驟。
Package:
1. kernel-source-2.4.20
2. kernel-patch-2.4-preempt
3. kernel-patch-lowlatency-2.4
以上這些package皆可以用apt-get install安裝。 ok,萬事具備,請跟著筆者的動作一步一步完成patch kernel的動作。
1. tar -jxf kernel-source-2.4.20.tar.bz2
2. cd kernel-source-2.4.20
3. make-kpkg clean
4. make-kpkg --revision 2.4.20.custom-2 --add-patches=lowlatency,preempt --config menuconfig
5. make-kpkg binary-arch
看到這裡,是否覺得被筆者騙了呢?...
patch的步驟只差在第四步中的--add-patches而已,後面所填的是所要修正的patch name,可以在/usr/src/kernel-patch/all/apply中的目錄找到,想要增加patch的file請用','分開,接下來就跟前一節手動編譯核心的動作一樣了。
** 我還是不懂-revision的意思,能告訴我好處在那嗎?
-revision的作用最主要是要建立此kernel的版本數字,比如-revision 2.4.20,這表示編譯好的deb檔案,它在dpkg的資料庫中的version是2.4.20。
舉個例子來說,Debian的package tree中有2.4.20-1,2.4.20-2的kernel-image,以上兩者皆為2.4.20的版本,而後面用-(dash)連結的數字表示此2.4.20的第幾個release。
也就是說原本2.4.20的kernel image釋出之後,該維護者會利用-revision 2.4.20-1,這樣的方式來編譯新的kernel,往後如果維護者要釋出修正版,就可以改成-revision 2.4.20-2,最大的好處在於可以簡易的用apt的方式直接升級到下一個release。
最重要的一點,使用 APT 升級 kernel 之後,切記一定要馬上重新開機載入修正好的 kernel,以免系統出現當機的現象
以上三節介紹了在Debian上安裝,編譯,修訂核心的辦法,很炫吧,使用Debian就是如此神奇與方便呢。