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

參考資料:
https://segmentfault.com/a/1190000000733628

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章