ZT 菜鳥編譯核心(kernel2 6 0)

2021-04-02 12:51:22 字數 3942 閱讀 2948

轉貼自:linux技術中堅站(

前期準備

大家都知道的要先公升級「module-init-tools「軟體包,否則的話,等你安裝核心模組檔案的時候,系統會提示你:warning: you may need to install module-init-tools see

#rpm -e --nodeps modutils (強行解除安裝原有的modutilsrpm包)

#rpm -ivh modutils-2.4.21-23.src.rpm (把源**包安裝到了/usr/src/redhat目錄下)

#cd /usr/src/redhat/specs (進入規範檔案目錄下)

#rpmbuild --bb modutils.spec (生成二進位制的rpm包)

#cd ../rpms/i386 **入剛生成的二進位制的rpm包所在位置)

#rpm -ivh modutils*.rpm (剛生成兩個[modutils-2.4.21-23.i386.rpm與modutils-debuginfo-2.4.21.23.i386.rpm]二進位制的rpm包,一起安裝吧!)

因為是在redhat9.0的平台,redhat的使用者可能還會遇到一些麻煩,我會慢慢說的,除了要以上的公升級之外,還有個檔案 (/etc/rc.d/rc.sysinit)可能有缺陷,因為/proc/ksyms檔案在新核心(kernel2.6.0)中已經沒有了,開啟檔案命 令如下:

#vi /etc/rc.d/rc.sysinit

找到:if ! lc_all=c grep -iq nomodules /proc/cmdline 2>/dev/null && [ -f /proc/ksyms ]; then

usemodules=y

fi替換成:

if ! lc_all=c grep -iq nomodules /proc/cmdline 2>/dev/null; then

usemodules=y

fi也就是把「&& [ -f /proc/ksyms ]」去掉,儲存檔案(操作之前最好做備份以免刪錯,這個檔案是系統初始指令碼,重要的很),這樣子核心才能載入模組,當然能啟動iptable防火牆了,否 則防火牆在新核心中啟動時紅色的「failed「非常醒目。(請在新核心中核查/proc/sys/kernel/modprobe中的內容是不是: /sbin/modprobe,也可手工注入指令:#echo "/sbin/modprobe" > /proc/sys/kernel/modprobe)。下面開始構造新核心。

一、準備源**

#cp linux-2.6.0.tar.gz /usr/src

2、轉到/usr/src目錄並解開tarball包,

#cd /usr/src

#tar xvzf linux-2.6.0.tar.gz

二、定製核心

定製核心是門很大的學問,需要大量的硬體知識,特別是2.6.0的核心,如果你從2.4.n配置檔案裝載進去的,的確,很多人遇到過麻煩。我是重新配置文 件(x視窗伺服器進行),配製核心之前請清理源**樹,如果還沒有進入/usr/src/linux-2.6.0目錄,請進入此目錄,命令如下:

#make mrproper (剛解開的tarball包不需此步驟)

#make gconfig (需要gtk開發庫的支援)

或make config

或make xconfig(需要qt開發庫的支援)

注意:如果你是ext3檔案系統,則在定製核心配置檔案時把對ext3、ext2檔案的支援直接編譯進核心,否則,等你啟用新核心時機器就會當掉,出錯信 息如下:

kernel panic : no init found ,try passing init = option to kernel......

或者是:

kernel panic:vfs:unable to mount root fs on unknown-block(0,0)

我一開始不知道,編譯了好幾次,系統總給我冷板凳坐,最後把對ext3、ext2檔案系統的支援直接編譯進核心, 才解決此問題,還有把對「module unloading「選項也選上,否則的話,你在新核心環境下無法解除安裝核心模組(rmmod命令不能用)。

file systems--->[*] ext3 journalling file system support

[*] ext3 security labels

[*] jbd (ext3) debugging support

以上三項一定要選上,而且要內建(即標*). 這個非常重要,在配置完後一定要檢查一下.config檔案有沒有"config_ext3_fs=y"這一項. 如果不是"config_ext3_fs=y"而是"config_ext3_fs=m",會遇上以下錯誤: pivotroot: pivot_root(/sysroot,/sysroot/initrd) failed 。

三、編譯核心及模組

定製好的核心配置檔案(/usr/src/linux-2.6.0/.config)之後,激動的時刻到來了,編譯核心及模組,

#make (此命令已完成make bzimage及make modules的工作),

bzimage核心檔案在arch/i386/boot目錄中,你的cpu不同核心檔案存放位置也不同,我是intel的cpu。

注意:我在redhat7.2平台時曾出現無法編譯的出錯資訊,出錯資訊如下:

/tmp/cc2hu7sh.s:3: error: unknown pseudo-op: `.incbin'

make[1]: *** [usr/initramfs_data.o] error 1

make: *** [usr] error 2,

重新裝了個9.0的才解決此問題。

說明:make命令在我的1.6ghz,128m的機器上跑了足足27分鐘。

四、安裝模組及核心檔案

#make modules_install install

以上這個命令可以分解成make modules_install與make install,make modules_install安裝核心模組到/lib/modules/2.6.0下。make install完成mkinitrd命令及核心(bzimage)和system.map的拷貝,請檢視/boot目錄,檔名是有區別的,如是grub 引導器,make install命令已幫你自動修改了引導選項,對於lilo則要手工修改,重寫引導記錄。

說明:make modules_install install這個命令在我的1.6ghz,128m的機器上只跑了三十幾秒,很快的哦。

五、後記

最後的工作就是重啟系統(#shutdown -r now),檢驗一下你的勞動成果吧。差點忘了還有一點,可能對你很重要,進入新核心之後我發現rpm命令不能用了,原來這是rpm的乙個bug,特別是對於rh9的使用者,請開啟/etc/profile檔案,命令如下:

#vi /etc/profile (在檔案的末尾加上幾句如下)

if [`uname -r`="2.6.0" ];then

export ld_assume_kernel=2.2.5

fi也就是給系統加上乙個全域性的環境變數,也可直接鍵入#export ld_assume_kernel=2.2.5。

使用新核心可能出現的問題及對策:

1、新核心根本起不來,解決方法:重新配置核心(學問挺大),也許還根引導記錄有關(很少了);

2、新核心模組無法載入,會導致很多問題,比如了防火牆沒法工作了,mount不上光碟和vfat及ntfs檔案系統,其解決方法:公升級module- init-tools軟體包(我是modutils-2.4.21-23.src.rpm包),redhat的使用者可能還要修改 /etc/rc.d/rc.sysinit檔案;

3、redhat使用者rpm命令不能使用,解決辦法:請把變數在全域性配置檔案中宣告。

編譯核心 kernel

學習linux就從核心編譯開始,現在就讓我們邁出第一步,下面記錄編譯過程 以下操作均在root下完成 1 準備工作 根據自己機器的硬體情況,選擇核心編譯配置選項,在這裡我使用的是預設配置 make menuconfig後直接儲存退出,生成.config檔案 具體配置可以參考金步國先生翻譯的資料 li...

linux核心編譯kernel編譯

核心編譯的簡單流程 1.先uname r查詢當前系統的kernel版本 3.切換至解壓後的原始碼目錄下,sudo i 進入root模式 4.apt get install libncurses dev,安裝 make menuconfig時需要用到的庫檔案 5.執行make menuconfig,選...

Linux的核心編譯,kernel

linux的核心 kernel 1 linux就是指kernel 2 kernel負責整個硬體的驅動,和提供各種核心功能 3 kernel是乙個檔案,一般放置在 boot vmlinuz uname r 此檔案包含各項硬體偵測程式和驅動模組 4 核心模組 kernel module 有些功能沒有整合...