Red Hat核心升級過程記錄

li27z發表於2016-11-29

專案中因為要用到一些新的系統呼叫,需要升級當前所用的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

相關文章