共計 2838 個字符,預計需要花費 8 分鐘才能閱讀完成。
這篇文章主要講解了“linux 編譯內核的原因是什么”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著丸趣 TV 小編的思路慢慢深入,一起來研究和學習“linux 編譯內核的原因是什么”吧!
原因:新的內核修訂了舊內核的 bug,并增加了許多新的特性;如果用戶想要使用這些新特性,或想根據自己的系統度身定制一個更高效,更穩定的內核,就需要重新編譯 Linux 內核。通常,更新的內核會支持更多的硬件,具備更好的進程管理能力,運行速度更快、更穩定,并且一般會修復老版本中發現的許多漏洞等,經常性地選擇升級更新的系統內核是 Linux 使用者的必要操作內容。
為什么要編譯 Linux 內核?
新的內核修訂了舊內核的 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 是原來內核的版本。
編譯一個 Linux 內核?
整個內核編譯的過程非常簡單,但是內核編譯需要花費比較長的時間。這主要是因為內核的代碼非常多。當然,如果你的計算機性能強勁,時間會短很多。另外需要注意的是,建議在虛擬機環境下編譯,這樣避免錯誤導致系統問題。如果在虛擬機測試,建議系統分區和內核源代碼分區的大小大于 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 編譯內核的原因是什么這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是丸趣 TV,丸趣 TV 小編將為大家推送更多相關知識點的文章,歡迎關注!