CentOS7 內(nèi)核編譯

CentOS 7 內(nèi)核編譯

本文是參考CentOS官網(wǎng)說(shuō)明文件,詳細(xì)內(nèi)容請(qǐng)參考以下鏈接
https://wiki.centos.org/zh/HowTos/I_need_the_Kernel_Source 內(nèi)核源碼生成
https://wiki.centos.org/zh/HowTos/Custom_Kernel 內(nèi)核編譯

原理

內(nèi)核編譯需要正確版本的內(nèi)核源碼,以及正確的內(nèi)核選項(xiàng)。

  1. CentOS7的內(nèi)核源碼是通過(guò)rpm包生成的,如果需要內(nèi)核源碼來(lái)進(jìn)行編譯,直接安裝rpm是不行的,還得配置一下。
  2. 有了正確的內(nèi)核源碼后,需要通過(guò)正確生成內(nèi)核的.config文件,這樣才能正確編譯rpm包
  3. 對(duì)了,CentOS7是通過(guò)kernel*.rpm包來(lái)更新內(nèi)核的

生成可編譯的內(nèi)核源碼

  1. 需要安裝一些開(kāi)發(fā)庫(kù)
 # yum install rpm-build redhat-rpm-config asciidoc hmaccalc perl-ExtUtils-Embed pesign xmlto
 # yum install audit-libs-devel binutils-devel elfutils-devel elfutils-libelf-devel
 # yum install ncurses-devel newt-devel numactl-devel pciutils-devel python-devel zlib-devel
  1. 切換用戶
  后續(xù)操作,使用非root用戶進(jìn)行后續(xù)操作,切記
  1. 在用戶的home目錄下創(chuàng)建一些目錄,生成一些配置
   $ mkdir -p ~/rpmbuild/{BUILD,BUILDROOT,RPMS,SOURCES,SPECS,SRPMS}
   $ echo '%_topdir %(echo $HOME)/rpmbuild' > ~/.rpmmacros

4.安裝源碼組件,kernel-xxxxxxxxx.src.rpm請(qǐng)?jiān)?http://vault.centos.org/7.N.YYMM/updates/Source/SPackages/
(請(qǐng)以相關(guān)的副版本編號(hào)、年度及月份取代 N.YYMM。)下載

  $ rpm -i kernel-xxxxxxxxx.src.rpm 2>&1 | grep -v exist
  1. 解壓源碼并生成源碼
   $ cd ~/rpmbuild/SPECS
   $ rpmbuild -bp --target=$(uname -m) kernel.spec
  1. 現(xiàn)在內(nèi)核的源代碼目錄樹(shù)可以在 ~/rpmbuild/BUILD/kernel/linux/ 這個(gè)目錄內(nèi)找得到

編譯內(nèi)核

  1. 切換用戶
后續(xù)操作,使用非root用戶進(jìn)行后續(xù)操作,切記
  1. 生成內(nèi)核配置文件
    進(jìn)到 ~/rpmbuild/BUILD/kernel-/linux-/ 目錄,然后選擇復(fù)制 configs/ 目錄內(nèi)的配置文件或 /boot/ 目錄內(nèi)的現(xiàn)有內(nèi)核配置文件,并命名為 .config。
    這里選用了 /boot/目錄內(nèi)的配置,為了保持和現(xiàn)有的系統(tǒng)內(nèi)核一致
  $ cd ~/rpmbuild/BUILD/kernel-*/linux-*/
  $ cp /boot/config-`uname -r` .config
  1. 設(shè)置內(nèi)核
  $ make oldconfig   
  $ make menuconfig  設(shè)置你所需要的選項(xiàng)
接著在.config文件的第一行加入uname -i的輸出,比如:x86_64,使文件第一行如下
# x86_64

注意 #號(hào)和文字之間有空格

修改完后更新config文件

$ cp .config configs/kernel-3.10.0-`uname -m`.config
$ cp configs/* ~/rpmbuild/SOURCES
  1. 更新spec文件,進(jìn)入rpmbuild/SPECS目錄,修改kernel.spec文件,替換如下行。
  # % define buildid .local  ----> %define buildid .xxxx
__注意__ 刪除#號(hào), %和define之間無(wú)空格,xxx自定義

5.編譯內(nèi)核
進(jìn)入~/rpmbuild/SPECS目錄

$ rpmbuild -bb --target=`uname -m` --without kabichk kernel.spec 2> build-err.log | tee build-out.log

漫長(zhǎng)的編譯后: ~/rpmbuild/RPMS/uname -m/ 目錄內(nèi)找到生成的rpm包們

安裝和啟動(dòng)

1.使用root賬戶: yum localinstall ~/rpmbuild/RPMS/uname -m/kernel*.rpm

  1. 重啟并加載新的內(nèi)核,大功告成
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容