傳送門:地址.筆者下載的是3.2.84版本
由於我下的是.tar.xz文件,用tar命令不能直接解壓。
1.我的系統裡不帶xz解壓軟件,先下載xz-5.0.3.tar.bz2文件並解壓安裝
tar -jvxf xz-5.0.3.tar.bz2 cd /opt/xz-5.0.3 #進入解壓後的文件夾./configuremakemake install
2.解壓內核
xz -d linux-3.2.84.tar.xztar -xvf linux-3.2.84.tar
3.如果是第一次編譯內核,並沒有上次殘留的文件可以跳過該步驟(最好仔細看下指令對應的功能)
make mrproper make clean 刪除大多數的編譯生成文件, 但是會保留內核的配置文件.config, 還有足夠的編譯支持來建立擴展模塊make mrproper 刪除所有的編譯生成文件, 還有內核配置文件, 再加上各種備份文件make distclean mrproper刪除的文件, 加上編輯備份文件和一些補丁文件。
4.搭建編譯內核所需要的環境
yum -y install gccyum install ncurses ncurses-develyum install openssl-devel
5.進入內核解壓文件夾配置內核參數 由於我是個小白不會選,為了方便,直接用make localmodconfig命令,這個命令是以本來的.config文件為基礎去選,可以參考論文:嵌入式linux系統的裁剪優化和測試技術.然後我就一直回車直到結束。然後再輸入make menuconfig命令進入圖形選擇菜單,將kenel hacking中的Sample..選項去掉(具體那一項我忘了,尴尬),退出保存。然後編輯.config文件中的“CONFIG_SYSFS_DEPRECATED”,默認該選項為not set,被注釋掉的,將其改為y,即修改為“CONFIG_SYSFS_DEPRECATED=y”,之後可能還要修改,後面再說。 6.編譯新內核
make bzImage && make modules && make modules_install
7.安裝內核
make install
8.編譯安裝可能出現的情況 應該是沒什麼問題, 不過也不排除會出現下面的情況:make:警告:檢測到時鐘錯誤。您的創建可能是不完整的。 解決辦法:find . -type f -exec touch {} \; 重新編譯下就好了。 9.處理下img中的東西(我說不清楚= =) 1)解壓initrd文件
# cp /boot/initrd-3.2.84.img /tmp# cd /tmp/# lsinitrd-2.6.30.4.img# mkdir newinitrd# cd newinitrd/# zcat ../initrd-2.6.30.4.img | cpio -i
釋放之後看到如下內容
# lsbin dev etc init lib proc sbin sys sysroot
2)編輯init,刪掉其中重復的四行中的兩行 echo “Loading dm-region-hash.ko module” insmod /lib/dm-region-hash.ko echo “Loading dm-region-hash.ko module” insmod /lib/dm-region-hash.ko 3)重新打包initrd
# find . | cpio -c -o > ../initrd11538 blocks# cd ..# gzip -9 < initrd > initrd.img# lsinitrd-2.6.30.4.img initrd initrd.img
這裡面的initrd.img就是重新打包後的文件。 4)把initrd.img復制到/boot下 命令:#cp initrd.img /boot 5)修改grub.config,在/etc文件夾下 把initrd-3.2.84.img改為initrd.img就可以了 6)reboot重啟 記得選擇自己的內核!別錯過啦!
這是個人的經驗,希望對大家有點幫助!如果有不對的地方,還請不吝賜教!