最近一直在看Linux內核,但是始終沒有得以實踐,今天從早上弄到現在終於搞定了,或許對高手來說這不值一提,但是對我來說確實是個挑戰,以前只是使用Linux從未涉及到內核的東西。 我用的是Fedora13,前兩天一直在找內核包,從www.kernel.org中竟然沒找到我用的版本的包(其實可以不用找自己的版本的包,現在編譯完成了才知道,只要版本比自己用的高的就可以下載下來編譯通過。)Fedora官網我也沒有找到,於是從書上找到一個RedHat的下載網站(download.fedora.redhat.com上面有RedHat基本上所有的內核和應用軟體,比較崩潰的是速度太慢了(我昨天晚上下了兩個小時才把kernel-2.6.33.3-85.fc13.src.rpm這個內核下載下來,內核64M)。現在總結下今天遇到的問題和解決方法,供那些和我一樣的菜鳥參考下。 我不得不承認,livecd版的Fedora如果沒有軟體源那就是廢物什麼用也沒有,你所用到的任何軟體基本都沒有,所以接著一件崩潰的事情就是西電的Fedora源不能用了,所有的請求都是伺服器沒有相應,沒辦法,只得換成上海交大的源,速度還算可以,穩定在300--500KB/S。 整個配置過程最好在root用戶下使用,免得出現許可權不夠的煩惱。但是Fedora從9還是10(我記不清了)開始禁止以root用戶登錄,只能在終端中切換為root用戶,但是有時會遇到點小麻煩,所以不得不改配置文件,先在終端輸入命令su,然後輸入root用戶密碼,提升許可權 gedit /etc/pam.d/gdm 將auth required pam_succeed_if .so user != root quiet註釋掉或者將root改成其他的用戶名 gedit /etc/pam.d/gdmpassword 同樣將auth required pam_succeed_if .so user != root quiet註釋掉或者將root改成其他的用戶名,這樣就可以以root用戶登陸了。 以root登陸后,cd /etc/yum.repo.d/ 首先備份本身自帶的repo文件,不然默認的在makecache時也會使用默認的源。 mv fedora.repo fedora.repo.bak mv fedora-updates.repo fedora-updates.repo.bak gedit sjedu.repo 然後將以下內容寫入這個siedu.repo,保存退出。 [Fedora-ftp.sjtu.edu.cn] name=Fedora 13 ? i386 baseurl=http://ftp.sjtu.edu.cn/fedora/linux/releases/13/Fedora/i386/os/ enabled=1 gpgcheck=0 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora [Everything-ftp.sjtu.edu.cn] name=Everything 13 ? i386 baseurl=http://ftp.sjtu.edu.cn/fedora/linux/releases/13/Everything/i386/os/ enabled=1 gpgcheck=0 gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-fedora [updates-ftp.sjtu.edu.cn] name=Fedora updates baseurl=http://ftp.sjtu.edu.cn/fedora/linux/updates/13/i386/ enabled=1 gpgcheck=0 然後用yum clean all //這個命令可以不要。 yum makecache 就好了。 然後安裝軟體包,如果你有下面這些軟體包就不要裝了,因為我用的是livecd版的,什麼軟體都沒有。 yum -y install gcc yum -y install redhat-rpm-config yum -y install xmlto yum -y install asciidoc yum -y install elfutils yum -y install elfutils-libelf-devel yum -y install zlib-devel yum -y install binutils-devel yum -y install libdwarf-devel yum -y install ncurces-devel 下面開始編譯內核,我從圖書館借的那本書把我害慘了,讓我走了很多彎路,他的方法也是對的,但是他對以前的RedHat版本比較熟悉,於是他就按照以前的版本進行講解安裝,但是現在版本默認安裝的跟他講的不一樣,很是無奈。 把下載到的kernel放在/usr/src/kernel/下。 然後進入這個目錄 cd /usr/src/kernel/ 安裝內核 rpm -ivh kernel-2.6.33.3-85.fc13.src.rpm 在這個過程中會出現沒有用戶組mockbuild和用戶mockbuild的warning,不用理會就行,你也可以增加這個用戶和用戶組。這是因為這個RPM包是src的,解壓后是源代碼,不能執行。所以系統會提示這個, cd ~/rpmbuild/SPECS/ rpmbuild -bp --target $(uname -m) kernel.spec 這樣就會出現安裝內核的進程,等待會即可。(解釋下我前面說我看的書使我繞彎子的原因,在/usr/src/下有一個Linux目錄,但是這個目錄在新版中已經不再是放置內核源代碼的地方,這裡放置的是頭文件 而我看的書上他寫的是執行完安裝命令后是安裝在這個目錄下了,但是我的沒有,我的是安裝在用戶的根目錄下。讓我費了好長時間去找安裝在哪了,很是迷茫,然後看了官方給的說明文檔才知道) 然後現在我們將指定一個字元串方便以後區別內核版本. 因此我們需要做: cd ~/rpmbuild/BUILD/kernel-2.6.33/linux-2.6.33.i686 vi Makefile 在EXTRAVERSION一行, 你可以輸入一個內核識別碼. 我想最好是在字元串后附上內核的版本號, 這樣來操作: EXTRAVERSION = -86.fc13 保存 配置內核 運行 make menuconfig 然後看到內核的配置菜單. 移動綠色游標到 Load an Alternate Configuration File 行后選擇.config文件做為配置文件: Load an Alternate Configuration File 完成配置后, 選擇Exit, 回答下面的問題(Do you wish to save your new kernel configuration? 你希望保存新的內核配置嗎?), 選擇Yes: 然後根據自己機器的情況進行配置,大部分選擇預設值就行了。 編譯內核 make 編譯內核需要較長時間,我的用了將近一個小時,跟機器的性能有很大關係。 如果選擇了可載入模塊,編譯內核完成後,要對選擇的模塊進行編譯。用下面的命令 make modules make modules_install 然後 make install 現在編輯/boot/grub/menu.lst. 把你的新的內核信息放到列表的頂端, 確認新的內核已經替代老的內核, default值需要設為0. vi /boot/grub/menu.lst 我的menu.lst是這樣的: # NOTICE: You have a /boot partition. This means that # all kernel and initrd paths are relative to /boot/, eg. # root (hd0,0) # kernel /vmlinuz-version ro root=/dev/sda2 # initrd /initrd-[generic-]version.img #boot=/dev/sda default=0 timeout=5 splashimage=(hd0,0)/grub/splash.xpm.gz hiddenmenu title Fedora (2.6.33-85.fc13) root (hd0,0) kernel /vmlinuz-2.6.33-85.fc13 ro root=UUID=3832e93f-edbf-40b5-87d7-b46d902231f6 rd_NO_LUKS rd_NO_LVM rd_NO_MD rd_NO_DM LANG=en_US.UTF-8 SYSFONT=latarcyrheb-sun16 KEYBOARDTYPE=pc KEYTABLE=us rhgb quiet initrd /initramfs-2.6.33-85.fc13.img title Fedora (2.6.33.3-85.fc13.i686) root (hd0,0) kernel /vmlinuz-2.6.33.3-85.fc13.i686 ro root=UUID=3832e93f-edbf-40b5-87d7-b46d902231f6 rd_NO_LUKS rd_NO_LVM rd_NO_MD rd_NO_DM LANG=en_US.UTF-8 SYSFONT=latarcyrheb-sun16 KEYBOARDTYPE=pc KEYTABLE=us rhgb quiet initrd /initramfs-2.6.33.3-85.fc13.i686.img 現在重新啟動系統: shutdown -r now 會進入到一個選擇要進入的系統,一個就是剛剛編譯過的 如果一切進展順利, 你的新內核正常工作
[火星人
]
Fedora13內核編譯 已經有506 次圍觀
本文地址: http://coctec.com/docs/linux/show-post-143622.html