原因:新的核心修訂了舊核心的bug,並增加了許多新的特性;如果使用者想要使用這些新特性,或想根據自己的系統度身定制一個更有效率,更穩定的內核,就需要重新編譯Linux內核。通常,更新的核心會支援更多的硬件,具備更好的進程管理能力,運行速度更快、 更穩定,並且一般會修復舊版本中發現的許多漏洞等,經常性地選擇升級更新的系統內核是Linux使用者的必要操作內容。
本教學操作環境:Ubuntu 18.04系統、Dell G3電腦。
新的核心修訂了舊核心的bug,並增加了許多新的功能。如果使用者想要使用這些新特性,或想根據自己的系統度身自訂更有效率,更穩定的內核,就需要重新編譯Linux內核。
通常,更新的核心會支援更多的硬件,具備更好的進程管理能力,運行速度更快、 更穩定,並且一般會修復舊版本中發現的許多漏洞等,經常性地選擇升級更新的系統核心是Linux使用者必要的操作內容。
為了正確的合理地設定內核編譯配置選項,從而只編譯系統需要的功能的程式碼,一般主要有以下四個考慮:
(1)自行自訂編譯的核心運行更快(具有更少的程式碼)
(2)系統將擁有更多的記憶體(核心部分將不會被交換到虛擬記憶體中)
(3)不需要的功能編譯進入核心可能會增加被系統攻擊者利用的漏洞
(4) 將某種功能編譯為模組方式會比編譯到核心內的方式速度慢一些
這類編譯的目的主要是透過編譯來了解Linux核心編譯的過程,熟悉核心的工作原理,甚至還可以嘗試進行一些修改。
編譯只是將原始碼編譯成程序,不會替換目前的系統,也不會影響目前系統的運作。
編譯核心可能是出於某種需求,例如對核心大小有要求,去掉核心中某些用不到的部分,這種場景往往是嵌入式系統。
或是自己修改了某部分核心程式碼,需要編譯後驗證功能。
模組編譯時將某些功能模組編譯成 .ko 可以在不重新編譯核心的情況下,insmod xxx.ko 到系統中使用編寫的程式碼功能。
編譯內核後不會替換當前內核,編譯後的新內核往往在類似下面的目錄下,名字大都是bzImage
/usr/src/kernels/3.xx.x-.x86_64/arch/x86/boot/
然後可以編輯系統的grub list 添加最新的內核來用它
新核心整合了新驅動程式,例如Intel核顯: /lib/modules/`uname -r`/kernel/drivers/gpu/drm/i915/i915.ko
#一個系統可以安裝多個核心,例如啟動檔案,新核心不會覆蓋舊核心:
/boot/vmlinuz-VERSION /boot/initrd.img-VERSION
安裝新核心過程中,有些核心模組需要重新編譯,例如VirtualBox:
/lib/modules/`uname -r`/updates/dkms/vboxdrv.ko
如果新核心運作不正常,可以在開機GRUB引導裡選擇舊核心啟動。
也可以這樣改回原來使用的核心:
ln -sf /boot/vmlinuz-VERSION /vmlinuz ln -sf /boot/initrd.img-VERSION /initrd.img
其中VERSION是原來核心的版本。
整個核心編譯的過程非常簡單,但是核心編譯需要花費比較長的時間。這主要是因為核心的程式碼非常多。當然,如果你的電腦效能強勁,時間會短很多。另外要注意的是,建議在虛擬機器環境下編譯,這樣避免錯誤導致系統問題。如果在虛擬機器測試,建議系統分區和核心原始碼分區的大小大於20GB。
Step 1: 下載原始碼
#1、 進入Linux 內核的官網,下載最新版本,或其它版本的內核代碼。這裡是原始碼的壓縮包。
2、假設我們現在在一個Linux作業系統中,在命令列輸入如下指令就可以下載核心了。
wget 链接(由于链接会被认为是广告,本文省略链接,请自行复制)
在下載的過程中可以看到下載進度,下載完成後資訊大致如下所示。
#Step 2: 解壓縮原始碼
壓縮包下載完成後,可以透過tar指令解壓縮。
tar xvf linux-5.9.6.tar.xz
在解压的时候可以看到文件列表,这个会很多,可能需要等一会儿。
Step 3: 安装需要的软件包
安装编译工具以及其它一下依赖的软件包,在Ubuntu 18.04环境下执行如下命令。
sudo apt-get install git fakeroot build-essential ncurses-dev xz-utils libssl-dev bc flex libelf-dev bison
如果一切顺利,大概安装输出信息如下所示。
Step 4: 配置内核代码
在编译内核之前,我们可以对内核源代码进行配置。配置的目的主要是确定哪些模块会编译到内核当中。
1. 进入源代码目录
cd linux-5.9.6
2. 从当前机器的启动目录拷贝配置信息到源代码目录。这步操作的意思是我们编译内核的配置采用用当前环境一致的配置。
cp -v /boot/config-$(uname -r) .config
3. 可以通过如下命令启动配置界面
make menuconfig
该命令会运行一些脚本,然后打开一个配置界面
4. 下面是打开的配置界面。可以看出里面包含所有的内核组件,包括文件系统,网络,IO栈,虚拟化和设备驱动等等。如果你不熟悉,可以不做任何修改。
Step 5: 编译内核
1. 通过如下命令就可以编译内核了
make -j 10
上面参数是并发数量,通常可以是CPU的2倍。
2. 安装模块
sudo make modules_install
3. 安装内核
sudo make install
安装完成后会有如下提示信息。
Step 6: 重启,验证版本
当上述步骤都没有出错的情况下,我们重启一下计算机,然后运行如下命令。
uname -mrs
此时就可以看到内核版本已经是我们编译的版本了。
结论
通过上面几步,我们可以很简单的编译一个内核。如果后面开发内核模块,也是要基于内核代码树的,因此这个是内核开发的基础。
可能遇到的问题
编译内核的时候可能会遇到这个问题:
没有规则可制作目标
debian/certs/debian-uefi-certs.pem,由certs/x509_certificate_list需求停止
在要编译的内核目录下编辑一下配置文件即可。简单的方式是执行如下命令
vim .config
然后找到
CONFIG_SYSTEM_TRUSTED_KEYS,将其设置为空,也就是下面这个样子。
CONFIG_SYSTEM_TRUSTED_KEYS=”
相关推荐:《Linux视频教程》
以上是linux為什麼編譯內核的詳細內容。更多資訊請關注PHP中文網其他相關文章!