如果你跟鳥哥一樣,曾經為了某些緣故需要最新的 4.x.y 的核心版本來實作某些特定的功能時,那該如何是好?沒辦法,只好使用最新的核心版本來編譯??! 你可以依照上面的程序來一個一個處理,沒有問題~不過,你也可以根據 ELRepo 網站提供的 SRPM 來重新編譯打包喔! 當然你可以直接使用 ELRepo 提供的 CentOS 7.x 專屬的核心來直接安裝。
下面我們使用 ELRepo 網站提供的 SRPM 文件來實作核心編譯。而要這么重新編譯的原因是,鳥哥需要將 VFIO 的 VGA 直接支持的核心功能打開! 因此整個程序會變成類似這樣:
- 先從 ELRepo 網站下載不含源代碼的 SRPM 文件,并且安裝該文件
- 從 www.kernel.org 網站下載滿足 ELRepo 網站所需要的核心版本來處理
- 修改核心功能
- 通過 SRPM 的 rpmbuild 重新編譯打包核心
就讓我們來測試一下啰?。ㄗ⒁?,鳥哥使用的是 2015/10/20 當下最新的 4.2.3 這一版的核心。由于核心版本的升級太快,因此在你實作的時間, 可能已經有更新的核心版本了。此時你應該要前往 ELRepo 查閱最新的 SRPM 之后,再決定你想使用的版本喔?。?/p>
1\. 先下載 ELRepo 上面的 SRPM 文件!同時安裝它: [root@study ~]# wget http://elrepo.org/linux/kernel/el7/SRPMS/kernel-ml-4.2.3-1.el7.elrepo.nosrc.rpm [root@study ~]# rpm -ivh kernel-ml-4.2.3-1.el7.elrepo.nosrc.rpm 2\. 根據上述的文件,下載正確的核心源代碼: [root@study ~]# cd rpmbuild/SOURCES [root@study SOURCES]# wget https://cdn.kernel.org/pub/linux/kernel/v4.x/linux-4.2.3.tar.xz [root@study SOURCES]# ll -tr .....(前面省略)..... -rw-r--r--. 1 root root 85523884 Oct 3 19:58 linux-4.2.3.tar.xz # 核心源代碼 -rw-rw-r--. 1 root root 294 Oct 3 22:04 cpupower.service -rw-rw-r--. 1 root root 150 Oct 3 22:04 cpupower.config -rw-rw-r--. 1 root root 162752 Oct 3 22:04 config-4.2.3-x86_64 # 主要的核心功能 3\. 修改核心功能設置: [root@study SOURCES]# vim config-4.2.3-x86_64 # 大約在 5623 行找到下面這一行,并在下面新增一行設置值! # CONFIG_VFIO_PCI_VGA is not set CONFIG_VFIO_PCI_VGA=y [root@study SOURCES]# cd ../SPECS [root@study SPECS]# vim kernel-ml-4.2.spec # 大概在 145 左右找到下面這一行: Source0: ftp://ftp.kernel.org/pub/linux/kernel/v4.x/linux-%{LKAver}.tar.xz # 將它改成如下的模樣: Source0: linux-%{LKAver}.tar.xz 4\. 開始編譯并打包: [root@study SPECS]# rpmbuild -bb kernel-ml-4.2.spec # 接下來會有很長的一段時間在進行編譯行為,鳥哥的機器曾經跑過兩個小時左右才編譯完! # 所以,請耐心等候??! Wrote: /root/rpmbuild/RPMS/x86_64/kernel-ml-4.2.3-1.el7.centos.x86_64.rpm Wrote: /root/rpmbuild/RPMS/x86_64/kernel-ml-devel-4.2.3-1.el7.centos.x86_64.rpm Wrote: /root/rpmbuild/RPMS/x86_64/kernel-ml-headers-4.2.3-1.el7.centos.x86_64.rpm Wrote: /root/rpmbuild/RPMS/x86_64/perf-4.2.3-1.el7.centos.x86_64.rpm Wrote: /root/rpmbuild/RPMS/x86_64/python-perf-4.2.3-1.el7.centos.x86_64.rpm Wrote: /root/rpmbuild/RPMS/x86_64/kernel-ml-tools-4.2.3-1.el7.centos.x86_64.rpm Wrote: /root/rpmbuild/RPMS/x86_64/kernel-ml-tools-libs-4.2.3-1.el7.centos.x86_64.rpm Wrote: /root/rpmbuild/RPMS/x86_64/kernel-ml-tools-libs-devel-4.2.3-1.el7.centos.x86_64.rpm
如上表最后的狀態,你會發現竟然已經有 kernel-ml 的軟件包產生了!接下來你也不需要像手動安裝核心一樣,得要一個一個項目移動到正確的位置去, 只要使用 yum install 新的核心版本,就會有 4.2.3 版的核心在你的 CentOS 7.x 當中了耶!相當神奇!
[root@study ~]# yum install /root/rpmbuild/RPMS/x86_64/kernel-ml-4.2.3-1.el7.centos.x86_64.rpm [root@study ~]# reboot [root@study ~]# uname -a Linux study.centos.vbird 4.2.3-1.el7.centos.x86_64 #1 SMP Wed Oct 21 02:31:18 CST 2015 x86_64 x86_64 x86_64 GNU/Linux
這樣就讓我們的 CentOS 7.x 具有最新的核心啰!與核心官網相同版本咧~夠帥氣吧!
24.6 重點回顧
- 其實核心就是系統上面的一個文件而已,這個文件包含了驅動主機各項硬件的偵測程序與驅動模塊;
- 上述的核心模塊放置于:/lib/modules/$(uname -r)/kernel/
- “驅動程序開發”的工作上面來說,應該是屬于硬件發展廠商的問題
- 一般的使用者,由于系統已經將核心編譯的相當的適合一般使用者使用了,因此一般入門的使用者,基本上,不太需要編譯核心
- 編譯核心的一般目的:新功能的需求、原本的核心太過臃腫、與硬件搭配的穩定性、其他需求(如嵌入式系統)
- 編譯核心前,最好先了解到您主機的硬件,以及主機的用途,才能選擇好核心功能;
- 編譯前若想要保持核心源代碼的干凈,可使用 make mrproper 來清除暫存盤與配置文件;
- 挑選核心功能與模塊可用 make 配合:menuconfig, oldconfig, xconfig, gconfig 等等
- 核心功能挑選完畢后,一般常見的編譯過程為:make bzImage, make modules
- 模塊編譯成功后的安裝方式為: make modules_install
- 核心的安裝過程中,需要移動 bzImage 文件、創建 initramfs 文件、重建 grub.cfg 等動作;
- 我們可以自行由硬件開發商之官網下載驅動程序來自行編譯核心模塊!