標籤:linux 編譯核心
一、背景介紹
編譯核心雖然在實際工作中用到的幾率不大,但作為一個Linux營運人員,還是要對編譯核心有初步的瞭解,以下就來介紹下編譯核心的方法
二、操作步驟
1.檢查開發環境
以CentOS6為例,確認Server Platform Development和Development tools這兩個包組已安裝。
yum grouplist | grep "Development"
2.下載核心源碼
此處以3.10.105版本為例,下載到root使用者的家目錄下並解壓到指定目錄,同時建立一個軟串連(建立軟串連的目的是以後更換核心時直接更改軟串連指向)
tar -xf linux-3.10.105.tar.xz -C /usr/src/
ln -sv linux-3.10.105 linux
3.準備核心模板
編譯核心其實就是對核心功能的開啟或者關閉,類似於編譯安裝源碼程式./config --apr.....一樣,只是核心的選項過於多,使用模板會大大降低選擇的時間。CentOS6早已準備了一個核心模板在/boot/目錄下名為config-$(uname -r)的檔案,將它拷貝至核心源碼目錄中
cd /usr/src/linux
cp /boot/config-2.6.32-642.el6.i686 .config
4.選擇核心啟用的功能
make manuconfig
需要注意的是:任何編譯操作只能在核心源碼目錄下進行,即/usr/src/linux 目錄下,使用make help查看更多資訊,選擇完成後退出並儲存
5.編譯核心
make -j #
進行編譯,#表示同時展開的作業數,建議和CPU核心數保持一致,make是對.config檔案進行編譯,如果對.config檔案編譯完成後發現遺漏或者想新增幾個功能可以在核心源碼目錄下進行部分功能、特定模組的編譯:
cd /usr/src/linux
make dir/ 只編譯莫目錄中的相關代碼(部分功能)
make dir/file.ko 只編譯一個特定的模組
6.安裝模組
make modules_install 建議在安裝編譯好的核心前先安裝模組,避免缺少相關的模組
7.安裝核心
make install
安裝核心,此步驟完成後會在/boot目錄下會建立新的核心及initramfs,
650) this.width=650;" src="https://s1.51cto.com/wyfs02/M00/91/43/wKiom1j0yAqByjf-AABDdVVrmzw746.png" title="1.png" style="float:none;" alt="wKiom1j0yAqByjf-AABDdVVrmzw746.png" />
同時也會將新核心的配置資訊加入grub目錄下的grub.conf檔案中,只是預設還是使用老核心
650) this.width=650;" src="https://s1.51cto.com/wyfs02/M00/91/41/wKioL1j0yArAueEMAAB9RaBGrpk604.png" title="2.png" style="float:none;" alt="wKioL1j0yArAueEMAAB9RaBGrpk604.png" />
重啟作業系統,此時你會看到新的核心已經可以使用
650) this.width=650;" src="https://s1.51cto.com/wyfs02/M00/91/41/wKioL1j0yAuDRbYJAAAmaoLGuC8888.png" title="3.png" style="float:none;" alt="wKioL1j0yAuDRbYJAAAmaoLGuC8888.png" />
三、補充說明
1.screen命令的使用
在編譯時間make命令的等待時間過長,如果此時終端與伺服器取消連結(ssh中斷),那由此ssh發起的命令同樣會終止,為了避免這種情況出現,建議使用screen命令,screen命令的常用選項:
screen #開啟一個監視器
Crtl+a後鬆開鍵盤再按d鍵 #暫時退出screen介面
screen -ls #查看當前所有的screen介面
screen -r <螢幕號> #返回指定螢幕號的screen介面
exit #關閉screen介面
2.交叉編譯核心
如果編譯的目標平台與當前平台不相同,在當前平台上直接編譯的核心就無法在指定平台上運行,此時就需要交叉編譯,編譯是使用:make ARCH=arch_name,要擷取特定目標平台的使用協助make ARCH=arch_name help
本文出自 “兔樣兔森破” 部落格,請務必保留此出處http://arkling.blog.51cto.com/2844506/1916812
Linux核心編譯