Red Hat核心升級過程記錄
專案中因為要用到一些新的系統呼叫,需要升級當前所用的Red Hat5.2,於是就從Linux核心官方網站上下載原始碼進行編譯。
準備工作
1.確認核心及版本資訊
2.安裝軟體
編譯安裝新核心,依賴於開發環境和開發庫
# yum grouplist // 檢視已經安裝的和未安裝的軟體包組,來判斷我們是否安裝了相應的開發環境和開發庫;
# yum groupinstall "Development Tools" // 一般是安裝這兩個軟體包組,這樣做會確定你擁有編譯時所需的一切工具
# yum install ncurses-devel // 你必須這樣才能讓 make *config 這個指令正確地執行
# yum install qt-devel // 如果你沒有 X 環境(圖形介面),這一條可以不用
# yum install hmaccalc zlib-devel binutils-devel elfutils-libelf-devel // 建立 CentOS-6 核心時需要它們
編譯核心
1.獲取並解壓核心原始碼,配置編譯項
本次我選擇的升級核心版本是2.6.32.23。
我們在系統原有的核心配置檔案的基礎上建立新的編譯選項,所以複製一份原配置檔案到當前目錄下,命名為.config。
[root@src ~]# tar -jxvf linux-2.6.32.23.tar.bz2 -C /usr/src/
[root@src ~]# cd /usr/src/linux-2.6.32.23/
[root@src linux-2.6.32.23]# cp /boot/config-2.6.18-92.el5 .config
接下來繼續配置:
[root@src linux-2.6.32.23]# sh -c 'yes "" | make oldconfig'
make oldconfig會讀取當前目錄下的.config檔案,在.config檔案裡沒有找到的選項則提示使用者填寫。make oldconfig會在生成新的.config之前備份為.config.old,並生成新的.config檔案。
有的文件裡介紹使用make memuconfig(系統中必須安裝有ncurses庫),它是以選單的方式,選擇編譯核心需要的模組,類似介面如下:
2.開始編譯
[root@src linux-2.6.32.23]# make bzImage // 生成核心檔案
[root@src linux-2.6.32.23]# make modules // 編譯模組
[root@src linux-2.6.32.23]# make modules_install // 編譯安裝模組
生成核心檔案
編譯模組
編譯安裝模組
3.安裝
[root@src linux-2.6.32.23]# make install
4.修改grub引導,重啟
安裝完成後,需要修改Grub引導順序,讓新安裝的核心作為預設核心。
# vim /etc/grub.conf
數一下剛剛新安裝的核心在哪個位置,從0開始,然後設定default為那個數字,一般新安裝的核心在第一個位置,所以設定default=0。
然後,重啟後確認當前核心版本
[root@src ~]# shutdown -r now
[root@src ~]# uname -r
顯示核心版本為2.6.32.23,則表示升級核心成功。
異常
1.在升級編譯完核心,重啟後無法進入系統,提示如下錯誤資訊:
解決方法:編譯時修改.config檔案中的“CONFIG_SYSFS_DEPRECATED_V2”,預設該選項是被註釋掉的,為not set,將其改為y,即修改為“CONFIG_SYSFS_DEPRECATED_V2=y”,修改後,再編譯,重啟即正常了。
2.如果編譯失敗(如缺少依賴包),可以先清除,再重新編譯
[root@src ~]# cd /usr/src/linux-2.6.32.23
[root@src linux-2.6.32.23]# make mrproper // 完成或者安裝過程出錯,可以清理上次編譯的現場
[root@src linux-2.6.32.23]# make clean