[分享]debian patch kernel 真輕鬆!

常言道:『飲水思源』,在 Open Source 的世界裡,我們常常需要別人的幫助,但是在您有所心得的時候請記得分享給大家,『幫助人是快樂的喔』。歡迎您在使用 debian 的過程中的任何心得分享給大家。

[分享]debian patch kernel 真輕鬆!

文章moto » 週一 3月 17, 2003 9:11 pm


自己手動編譯 kernel 是一件需要很小心謹慎的動作!請千萬記得先保留一份可正常開機的 kenel ,以備不時之需 ( 通常都會用到.. :ooops: )


debian 真是太棒了,連 patch kernel 都這麼貼心,底下我以加入 ck patch 為例子來介紹如何利用 debian 的工具輕鬆的 patch kernel! :-D


ps.全程請以 root 身份執行


找尋您想要的 kernel source :

代碼: 選擇全部
root@debian[~]$ apt-cache search kernel-source
freeswan - IPSEC utilities for FreeSWan
kernel-patch-2.2-lids - LIDS Kernel Patch
kernel-patch-2.4-lids - LIDS Kernel Patch
kernel-source-2.2.20 - Linux kernel source for version 2.2.20
kernel-source-2.2.22 - Linux kernel source for version 2.2.22
kernel-source-2.4.10 - Linux kernel source for version 2.4.10
kernel-source-2.4.16 - Linux kernel source for version 2.4.16
kernel-source-2.4.17 - Linux kernel source for version 2.4.17
kernel-source-2.4.17-ia64 - Linux kernel source for version 2.4.17 on IA-64
kernel-source-2.4.18 - Linux kernel source for version 2.4.18
kernel-source-2.4.18-hppa - Linux kernel source for version 2.4.18 on HPPA
kernel-source-2.4.19 - Linux kernel source for version 2.4.19
kernel-source-2.4.19-hppa - Linux kernel source for version 2.4.19 on HPPA
kernel-source-2.4.19-ia64 - Linux kernel source for version 2.4.19 on IA-64
kernel-source-2.4.20 - Linux kernel source for version 2.4.20 with Debian patches
lidstools-2.2 - LIDS Admintool
lidstools-2.4 - LIDS Admintool


以 linux kernel 2.4.20 為例:

代碼: 選擇全部
root@debian[~]$ apt-get install kernel-source-2.4.20


這時候 debian 會下載 kernel source 到系統的:

代碼: 選擇全部
/usr/src/kernel-source-2.4.20.tar.bz2


解開 kernel source :

代碼: 選擇全部
root@debian[/usr/src]$ tar jxvf kernel-source-2.4.20.tar.bz2


搜尋 ck patch 的 package name:

代碼: 選擇全部
root@debian[/usr/src]$ apt-cache search kernel | grep patch | grep ck
dh-kpatches - Debhelper script to help packaging kernel patches
kernel-patch-2.2.20-ide - Andre Hedrick's IDE patch.
kernel-patch-ck - Con Kolivas' patch to improve system responsiveness
kernel-patch-irc - IRC connection tracking and NAT
kernel-patch-scripts - Scripts to help dealing with packaged kernel patches
kernel-patch-speakup - A screen review package for the Linux kernel


安裝 ck patch :

代碼: 選擇全部
root@debian[/usr/src]$ apt-get install kernel-patch-ck


進入 kernel source 位置:

代碼: 選擇全部
root@debian[/usr/src]$ cd /usr/src/kernel-source-2.4.20
root@debian[/usr/src/kernel-source-2.4.20]$


運用 debian 指令 make-kpkg,先清除一下,確保是最乾淨的開始:

代碼: 選擇全部
root@debian[/usr/src/kernel-source-2.4.20]$ make-kpkg clean


指定您新編 kernel 名稱,以 foo 為例、指定 kernel 選項選擇方式,這裡我們以最好用的 menuconfig 為例,指定所要加入的 patch ,我們以 『 ck 、,aa,preempt,read_latency,tune,varhz』 為例:

代碼: 選擇全部
root@debian[/usr/src/kernel-source-2.4.20]$ make-kpkg --added-patches=ck,aa,preempt,read_latency,tune,varhz --revision foo.1 --config=menuconfig


這時候 make-kpkg 開始自動幫助您完成 patch ( 如果有 patch 間有衝突, debian 會想辦法解決,真神奇! 8-) ),如果 patch 過程都 Okay 的話會出現 menuconfig 的畫面,kernel 的選項就完全 依照個人機器而定 ,要讓 ck patch 生效記得把如下面幾張圖片反藍處所示選項加入:

<img src="http://chuany.net/albums/album09/abc.sized.png">

<img src="http://chuany.net/albums/album09/abd.sized.png">

<img src="http://chuany.net/albums/album09/abe.sized.png">

<img src="http://chuany.net/albums/album09/abf.sized.png">

其他選項就依照您自己的需求嚕,選好了之後就離開並存檔選項。

編譯好 kernel 之後,下底下參數製作 kernel-image 和kernel-header 的 deb 檔:

代碼: 選擇全部
root@debian[/usr/src/kernel-source-2.4.20]$ make-kpkg binary-arch


如果還想編譯出含 source 和 doc 的 deb ,可下底下參數:

代碼: 選擇全部
root@debian[/usr/src/kernel-source-2.4.20]$  make-kpkg
binary


完成後您就可以在 /usr/src/ 發現幾個 deb 檔案囉:

代碼: 選擇全部
root@debian[/usr/src/kernel-source-2.4.20]$ ls /usr/src/*.deb
/usr/src/kernel-headers-2.4.20_foo.1_i386.deb
/usr/src/kernel-image-2.4.20_foo.1_i386.deb


安裝新的 kernel image 檔:

代碼: 選擇全部
root@debian[/usr/src/kernel-source-2.4.20]$ dpkg -i /usr/src/kernel-image-2.4.20_foo.1_i386.deb


安裝好了以後就重新開機測試看看囉.. 8-)


注意事項:
如果發現無法開機,或是不正常狀況可以重複底下步驟,重新選擇 kernel 選項:

root@debian[/usr/src/kernel-source-2.4.20]$ make-kpkg clean;make-kpkg --revision foo.1 --config=menuconfig;make-kpkg binary-arch

報告完畢!下台一鞠躬.. ;-)
最後由 moto 於 週二 3月 18, 2003 7:14 am 編輯,總共編輯了 1 次。
頭像
moto
摩托學園站長
摩托學園站長
 
文章: 2808
註冊時間: 週二 9月 03, 2002 3:37 am
來自: 台北

re:[分享]debian patch kernel 真輕鬆!

文章阿威 » 週一 3月 17, 2003 9:18 pm

好像很好用說,改天來用一下。
阿威
摩托學園!學園長們
摩托學園!學園長們
 
文章: 419
註冊時間: 週三 9月 04, 2002 2:31 am

re:[分享]debian patch kernel 真輕鬆!

文章阿信 » 週一 3月 17, 2003 11:19 pm

大家陷入一場重編kernel的惡夢,...:-)

小弟偷偷試用了jess patch -3,jesse兄不要打我洩密了...
頭像
阿信
版面大總管
版面大總管
 
文章: 4756
註冊時間: 週二 9月 03, 2002 11:58 pm
來自: 台灣 - 嘉義

re:[分享]debian patch kernel 真輕鬆!

文章訪客 » 週一 3月 17, 2003 11:33 pm

請問一下,在上面那個安裝新的 kernel image 檔,他應該是安裝/usr/src/kernel-image-2.4.20_foo.1_i386.deb,這個deb 檔吧,對不對,假如有錯的話,請指點指點,謝謝
訪客
 

re:[分享]debian patch kernel 真輕鬆!

文章阿信 » 週一 3月 17, 2003 11:35 pm

yes...沒錯,moto兄 typo
頭像
阿信
版面大總管
版面大總管
 
文章: 4756
註冊時間: 週二 9月 03, 2002 11:58 pm
來自: 台灣 - 嘉義

re:[分享]debian patch kernel 真輕鬆!

文章訪客 » 週二 3月 18, 2003 5:34 am

請問一下,我按照moto前輩的步驟來patch kernel,但在編譯的過程中出現Error如下:
make[1]: *** [vmlinux] Error 1
make[1]: Leaving directory `/usr/src/kernel-source-2.4.20'
make: *** [stamp-build] Error 2
請問這是什麼問題阿,我本以為是我的kernel編的有點過大所以我在make-kpkg裡有加進
--bzimage的指令,但還是一樣的問題,
訪客
 

re:[分享]debian patch kernel 真輕鬆!

文章moto » 週二 3月 18, 2003 7:16 am

Anonymous 寫:請問一下,在上面那個安裝新的 kernel image 檔,他應該是安裝/usr/src/kernel-image-2.4.20_foo.1_i386.deb,這個deb 檔吧,對不對,假如有錯的話,請指點指點,謝謝


抱歉輸入錯誤!真正的 kernel image 檔是 /usr/src/kernel-image-2.4.20_foo.1_i386.deb 才對... :ooops:
已修正.. ;-)
頭像
moto
摩托學園站長
摩托學園站長
 
文章: 2808
註冊時間: 週二 9月 03, 2002 3:37 am
來自: 台北

re:[分享]debian patch kernel 真輕鬆!

文章moto » 週二 3月 18, 2003 7:35 am

Anonymous 寫:請問一下,我按照moto前輩的步驟來patch kernel,但在編譯的過程中出現Error如下:
make[1]: *** [vmlinux] Error 1
make[1]: Leaving directory `/usr/src/kernel-source-2.4.20'
make: *** [stamp-build] Error 2
請問這是什麼問題阿,我本以為是我的kernel編的有點過大所以我在make-kpkg裡有加進
--bzimage的指令,但還是一樣的問題,


有沒有更多的錯誤訊息? .. 看樣子編譯核心的錯誤..而不是參數下錯! 請照文中所說重複
代碼: 選擇全部
root@debian[/usr/src/kernel-source-2.4.20]$ make-kpkg clean;make-kpkg --revision foo.1 --config=menuconfig;make-kpkg binary-arch
頭像
moto
摩托學園站長
摩托學園站長
 
文章: 2808
註冊時間: 週二 9月 03, 2002 3:37 am
來自: 台北

re:[分享]debian patch kernel 真輕鬆!

文章訪客 » 週二 3月 18, 2003 7:52 am

感謝moto大大的回應,但是我在執行
make-kpkg --added-patches=ck,aa,preempt,read_latency,tune,varhz --revision foo.1 --config=menuconfig;之後就會出錯,而我看到的error訊息,就那幾行而已,還是說先不管那個error訊息,直接給他下;make-kpkg binary-arch指令試試看呀??
訪客
 

re:[分享]debian patch kernel 真輕鬆!

文章moto » 週二 3月 18, 2003 8:11 am

:mygod:
注意喔..如果您已經下過一次 --added-patches=ck,aa,preempt,read_latency,tune,varhz
而且沒錯誤訊息的話!表示已經 patch 成功,之後如果編譯不成功要重新選擇 kernel 選項時,就千萬別再下--added-patches=ck,aa,preempt,read_latency,tune,varhz
這樣會因為重複 patch 造成錯誤!

要重新選擇 kernel 選項請照底下的參數:

代碼: 選擇全部
root@debian[/usr/src/kernel-source-2.4.20]$ make-kpkg clean;make-kpkg --revision foo.1 --config=menuconfig;make-kpkg binary-arch


留意以上參數已經去除了 『--added-patches=ck,aa,preempt,read_latency,tune,varhz』 ;-)
頭像
moto
摩托學園站長
摩托學園站長
 
文章: 2808
註冊時間: 週二 9月 03, 2002 3:37 am
來自: 台北

re:[分享]debian patch kernel 真輕鬆!

文章訪客 » 週二 3月 18, 2003 10:15 am

moto 寫::mygod:
注意喔..如果您已經下過一次 --added-patches=ck,aa,preempt,read_latency,tune,varhz
而且沒錯誤訊息的話!表示已經 patch 成功,之後如果編譯不成功要重新選擇 kernel 選項時,就千萬別再下--added-patches=ck,aa,preempt,read_latency,tune,varhz
這樣會因為重複 patch 造成錯誤!

要重新選擇 kernel 選項請照底下的參數:

代碼: 選擇全部
root@debian[/usr/src/kernel-source-2.4.20]$ make-kpkg clean;make-kpkg --revision foo.1 --config=menuconfig;make-kpkg binary-arch


留意以上參數已經去除了 『--added-patches=ck,aa,preempt,read_latency,tune,varhz』 ;-)




嗯 這我也做過了,可是還是有問題,看來我要重新手動編譯kernel囉,
訪客
 

re:[分享]debian patch kernel 真輕鬆!

文章阿信 » 週二 3月 18, 2003 11:05 am

照理說make-kpkg只是簡化手動編譯,所以make-kpkg有錯的話,手動也會出錯。

建議是事先看一下kernel-source裡面的Document/changelog

裡面有很多點是需要注意才能夠正確編譯好kernel的。
頭像
阿信
版面大總管
版面大總管
 
文章: 4756
註冊時間: 週二 9月 03, 2002 11:58 pm
來自: 台灣 - 嘉義

re:[分享]debian patch kernel 真輕鬆!

文章Angus » 週二 3月 18, 2003 5:16 pm

我也來提供一個有趣的東西,這個之前好像沒人提過,
debian 在patch kernel還有一個方式是......
先裝這個
apt-get isntall dh-kpatches
這個東西會在/usr/src/kernel-patch/all/
產生apply和unpatch這兩個目錄,
之後你只要是apt-get install任何patch,
就會在這兩個目錄下產生patch script,
把你要的script複製到kernel-source下執行,
她就會自動幫你patch進kernel,
還蠻好用的啦,不過我沒試過unpatch的script是不是有用.....
Angus
可愛的小學生
可愛的小學生
 
文章: 10
註冊時間: 週五 10月 04, 2002 12:29 am


回到 share

誰在線上

正在瀏覽這個版面的使用者:沒有註冊會員 和 1 位訪客