菜鳥淺談Linux核心編譯過程…

來源:互聯網
上載者:User
菜鳥編譯Linux核心
雙眼皮的豬
菜鳥俺,最近研究了一下Linux核心的編譯,有些許心得,望同大家分享一下,故有此文…我們這裡要談的不涉及到源碼,只是一些核心編譯的步驟及相關知識…因為本人是菜鳥。所以,也就希望和菜鳥們分享一下…
首先,您要確定您有一台裝有Linux的系統,編譯核心可以在本機上直接對本機核心進行編譯,也可以從網上下載核心在其基礎上進行編譯.我們這裡詳細講一下升級核心的方法,
您可以從www.kernel.org下載到最新的Kernel版本,我們這裡以RedHat9為例(其他版本其實也都一樣,只是在make menuconfig中有點不同),詳細講一下核心編譯的步驟 :
首先,確認您是以root 使用者登陸.把核心源碼cp到/usr/src目錄底下(請確認您是以root的身份在進行操作,否則會返回Permission Denied的提示):
mkdir /usr/src/linux-2.4.22
cp 2.4.22.tar.bz2 /usr/src/linux-2.4.22 (我用的是2.4.22的kernel)
解壓縮之,熟悉linux系統的朋友應該會知道:
bunzip2 ***.tar.bz2 | tar xvf
進入到/usr/src/linux-2.4.22目錄,,請確定您是在此目錄下操作,而且保證您所敲入的命令是正確的,不然會返回No rule to make target ***,stop類似的錯誤提示,這可是菜鳥們所要注意的哦。不然開頭搞不好。後面就不用談了哦…
1#cd /usr/src/linux-2.4.22
2#make mrproper
其實這個步驟是可以不用要的,這個目的是清除原先此目錄下殘留的.config和.o(object檔案),如果我們是剛下載的源碼,那麼這一步您就可以省了:),但是如果您已經編譯過多次核心的話,這一步可是一定要的哦,不然以後出現很多小問題,可別怨我沒告訴你….config檔案我們會在後面提到…
3#make menuconfig或make config或make xconfig
這就開始編譯核心了,打起十二分精神,編譯不好,系統是無法啟動的啦.小心應付,其實這個步驟還有其他兩種方式,make config以及make xconfig,make config是一個一個的回答問題,命令列方式,您如果回答錯了一個,您就不能改正了哦(所以不推薦這種編譯方式),make menuconfig和make xconfig提供了更友好的操作方式,不過make menuconfig需要ncurse包,而make xconfig也需要某個東東,好象是tk,忘記了,一般都安裝了,俺就不提了,如果沒有您可沒法啟動並執行哦.什麼你不知道什麼是ncurse和tk是什嗎?那我就不說了,去www.google.com去搜尋一下吧...
這裡邊很多東東都要注意選啊,這個要求您對硬體,軟體,網路有一定的認識,實在不知道就按預設的來吧.免得以後啟動不了罵天罵地都沒用哦,我可是好多次啟動不了,最後才摸出竅門的…
這個不是這個文章的主題(其實我很想寫的,但是沒人合作,一個人寫又太累,再加上我最近也忙考試,所以…)所以我們就略過哦…
在make menuconfig中,有的讓您選擇[*],有的讓您選擇[M],有的讓你選擇[],*表示選中直接載入進kernel,而M則表示會在後面的make modules中編譯成modules,讓您隨時可以通過insmod和modprobe調入核心…個人認為Linux的這個功能確實非常非常的棒…而這可是其他動作系統所沒有的哦. ..而make *config的目的就是產生.config檔案.至於想知道.config檔案是幹啥子的,看一下就知道了…J
這個步驟完成之後,系統會提醒您,next step you should run “make dep”
4#make dep (一到兩分鐘)
在確定要編譯哪些東東之後(make *config),這個要確定依賴性,這個東東,手工也可以完成的,只是….怕您要把什麼東東都放下,然後花上十天半個月的來搞,還把您忙的焦頭爛額,還會出錯,不過我們用這條指令就可以完成了,也就不用麻煩您那麼忙著搞了,呵呵,這個確定依賴性以後,然後就要清除一些東東了…
5#make clean (少於一分鐘)
清除一些不必要的檔案,那些亂七八糟的東東是可能會導致您在編譯過程中出現錯誤的哦,一定要做哦…
6#make bzImage(15分鐘左右)-
哦,這個可是最最最重要的啦.這個就是產生您的新核心了,不要告訴我您不知道核心是什麼啊,也就是kernel啦,所有的系統硬體軟體互動都靠它了哦..

其實可以是make zImage的,但是你要確保您所編譯的這個新核心在640K之下,您就可以使用make zImage,如果比640K大,那就要用make bzImage,您要說沒編譯出來咋知道多大呢?我的看法是建議用bzImage,因為我編譯出來的核心一般都是800~900K左右. …我是菜鳥,本文章也是為我一樣的菜鳥所寫,所以. ..咱們就預設make bzImage…
還要注意哦,這段時間你是沒法做事的,你會看見螢幕上一行一行的字往下跑,不用擔心哦,你可以選擇把這些標準輸出上的東東都重新導向到/dev/null去哦,這樣您就看不到這些東東了,當然,你也可以把它放在背景執行啊,在運行要開始的時候在後面加上一個&符號,這個表示是後台運行…如果您怕這些會對您編譯核心有什麼影響(其實沒什麼影響哦),那您乾脆就這樣,按Alt+F2,直接開啟另一個虛擬終端,在那裡邊做事,等到編譯完的時候。機器會咚的一聲通知您的哦,您要真不想等的話,就去玩會吧,聽聽歌什麼的,過會再回來,這裡可是考驗您耐心的時候哦,如果這您都沒耐心,那後面還有個耗時的步驟哦,還是忍忍吧,為了不讓系統浪費資源,你還是忍忍哦,成功後您一定會很高興的…
假如您的核心現在已經編譯好了,當然越小越好哦J,這時候系統會有個提示編譯後的bzImage放到哪裡去了,提示最後幾行,已經告訴了您的新編譯出的核心位置啊,一般都在這裡哦(我這裡是RedHat9),/usr/src/linux-2.4.22/arch/i386/boot/,這時候您要做的就是把它放到/boot目錄底下去哦,不然系統可沒法啟動的 …
#cp /usr/src/linux-2.4.22/arch/i386/boot/bzImage /boot/vmlinuz-2.4.22
(這裡其實已經把bzImage更名為vmlinuz-2.4.22,呆會在/boot/grub/grub.conf裡就指定這個新核心)

7#make modules(耗費時間取決於您所選擇編譯為modules的數量)
哇哇,又一個耗費時間的步驟來了,您還是找點什麼做做吧,估計也要好久哦,大概20分鐘吧,這個步驟就是把您在make menuconfig裡邊所選擇為M的東東,全部編譯成模組並放在/usr/src/linux-2.4.22/下…如果你選擇的M比較多的話,還是…去玩會吧,家務沒做啊?功課沒做啊什麼的?不過如果您比較喜歡把所有東東都編進核心的話,那就不需要多長時間,少選一些為M,這樣很快就可以完成,我的只用了一分鐘就完成了,不過如果您有很多不知道而選擇預設的話,那恐怕就要好花時間了. ..
8#make modules_install
hoho,這裡可是安裝module的步驟了,您所選擇的模組編譯完成後都放在/usr/src/linux-2.4.22某子目錄下,哪個子目錄您看一下就知道了,make modules之後會有提示的..我也忘記了,呵呵:),這多不好,而insmod以及相關指令都是從/lib/modules/linux-2.4.22下取module的啊,這個指令就是把編譯好的mod放到/lib/modules下去的哦,如果開始沒有Linux-2.4.22目錄,(也就是說您是第一次編譯2.4.22的核心),那麼這條指令就會自動建立該目錄,如果已經有了。那就會把編譯後的核心放進該目錄 …您以後要把mod調進kernel的時候(insmod,modprobe)都從這裡尋找.o的哦…
注意哦,如果你用的是SCSI硬碟並且採用的是ext3分區格式的話,請注意,您一定要製作initrd.img(因為SCSI卡的驅動包括在這個裡邊),如果你使用的是IDE硬碟,您可以跳過這一步,當然,您要是有耐心的話,這裡學習一下也沒什麼壞處哦
mkinitrd可以製作initrd.img,一般是這麼使用的,如果想具體瞭解的話,可以man mkinitrd,如果只想搞個initrd.img出來的話,那就mkinitrd /boot/initrd-custom.img 2.4.22就在/boot目錄下建立了一個initrd-custom.img檔案,也就是初始化鏡像…(initialed ramdisk)…裡邊主要有一些驅動,因為放在核心中就顯得過大,所以編譯進initrd.img,在啟動中釋放…而這個2.4.22就表示/lib/modules下面的2.4.22目錄了…
到這裡,以下就有兩種做法哦…
一 手動更新System.map檔案
它是當前正在啟動並執行kernel的fuctions的說明,如果您編譯核心後不更新System.map,如果碰到問題.,Trouble shooting就很困難了哦,您可有可能遇見很多煩人的資訊哦,所以我們還是手動更新一次哦,也蠻簡單的…
#cp /usr/src/linux-2.4.22/System.map /boot/System.map
系統會提示您:
Overwrite the ‘boot/System.map’
敲入Y,斷行符號
二 make install
說到make install我們這裡又有點話要說哦,make install就相當於一個自動化的過程啦,因為其他東東它都會幫您做好的,如果您確實比較懶,或者已經對前邊的步驟已經很沒耐心了,您就直接執行此步驟吧…當然您可以很快做好新系統了,而且可以重新從新核心啟動哦,但是您可能對這中間發生的事情就不明白了哦,小時侯上課的時候老師談什麼要授之以漁,而不要授之以魚,沒辦法。您要是覺得麻煩,俺就省了,俺手還覺得累,呵呵:)
還是談談這個過程吧,這期間,系統會把您的當前release版本號碼後面加上一個custom然後寫到grub.conf裡邊去,重新啟動後您就可以看到2.4.22custom的選單了 …
至於這個檔案名稱是怎麼決定出來的呢?您可以看一看/usr/src/linux-2.4.22哦,裡邊有個Makefile,您試一下
#head –n 5 Makefile
相信你已經看出來了吧…這也就是命名的原因啦,於是您也可以自己修改您的Linux哦…自己custom一下release名稱豈不爽哉…
從以上步驟來看,基本上已經沒有什麼問題了,當然,請確認您在make menuconfig裡邊沒有做過任何錯誤的事情哦,不然重新啟動後,依然引導不了的,譬如fs裡邊一定要選中VFS,EXT3編譯為M,因為現在系統一般都採用了ext3格式,您要是漏掉這個東東,載入不了分區,可別怨我沒告訴你哦,當然second extended fs更是一定要選啦:)
我在編譯的曆史中曾經有VFS:Unable to mount root fs on 00:00的經曆,一直卡在那裡,好久都沒解決啊,不過後來終於發現應該是fs的問題,或者是您的root分區沒指定好啊..
看了這麼多。相信您也很累了,文章也快到頭了,因為馬上就要完了…(如果上邊您選擇了make install,這裡您就不用看了哦)最最最最後一點,我們要修改Grub.conf(如果您採用的是grub來引導的話,抱歉我不懂lilo,因為我也是菜鳥…),使系統在重新啟動後可以從新的核心啟動…
#vi /boot/menu.lst
menu.lst跟grub.conf內容是一樣的哦,是個link,不過這裡邊可是彩色的文字,我很喜歡,就編輯它了..
在原來的基礎上添加一行:
title new Linux(2.4.22) //這裡您可以自己命名,也就是出現在grub啟動菜單裡的東東哦
kernel /vmlinuz-2.4.22 ro root=LABEL=/
上邊這行是指定kernel 的路徑,記得我們前邊產生一個vmlinuz-2.4.22的新核心嗎?對了哦,就是它了…這裡指定為它後,在您選擇以這個選項啟動後,就會起用這裡的新核心了.
後面跟著的ro 表示是readonly,就是唯讀意思咯,root=LABEL=/是指定路徑
initrd /initrd.img
這裡要指定為您所製作的initrd.img哦,如果這個製作錯誤的話,可啟動不了的哦…當然,這說的是您使用的是SCSI硬碟,如果是IDE硬碟的話。您可以在這裡寫上no initrd取代,這樣系統就不會使用intird啦,當然這個最好還是帶著吧,前邊我們也講了它的作用了,主要還是一些驅動….以及系統初始化的程式…
好了,就到這裡了…假如您有什麼疑問,在下面跟貼討論啊:)
本來要有好長的,但是實在因為考試太多…又要忙著畢業…所以簡短的完成…對不住哦…有問題請發MAIL到newjintao@yahoo.com.cn討論吧…

ps:如果誰有興趣把make menuconfig的全過成以及詳細解釋寫出來,那就最好了….
這個實在寫的太菜….等偶進一步完善….有什麼錯誤請大家斧正,謝謝...

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.