如何編譯 Linux 核心
| 2018-05-22 12:56 評論: 4 收藏: 4
Jack 將帶你在 Ubuntu 16.04 伺服器上走過核心編譯之旅。
曾經有一段時間,升級 Linux 核心讓很多使用者打心裡有所畏懼。在那個時候,升級核心包含了很多步驟,也需要很多時間。現在,核心的安裝可以輕易地透過像 apt
這樣的包管理器來處理。透過新增特定的倉庫,你能很輕易地安裝實驗版本的或者指定版本的核心(比如針對音訊產品的實時核心)。
考慮一下,既然升級核心如此容易,為什麼你不願意自行編譯一個呢?這裡列舉一些可能的原因:
- 你想要簡單瞭解編譯核心的過程
- 你需要啟用或者禁用核心中特定的選項,因為它們沒有出現在標準選項裡
- 你想要啟用標準核心中可能沒有新增的硬體支援
- 你使用的發行版需要你編譯核心
- 你是一個學生,而編譯核心是你的任務
不管出於什麼原因,懂得如何編譯核心是非常有用的,而且可以被視作一個通行權。當我第一次編譯一個新的 Linux 核心(那是很久以前了),然後嘗試從它啟動,我從中(系統馬上就崩潰了,然後不斷地嘗試和失敗)感受到一種特定的興奮。
既然這樣,讓我們來實驗一下編譯核心的過程。我將使用 Ubuntu 16.04 Server 來進行演示。在執行了一次常規的 sudo apt upgrade
之後,當前安裝的核心版本是 4.4.0-121
。我想要升級核心版本到 4.17
, 讓我們小心地開始吧。
有一個警告:強烈建議你在虛擬機器裡實驗這個過程。基於虛擬機器,你總能建立一個快照,然後輕鬆地從任何問題中回退出來。不要在產品機器上使用這種方式升級核心,除非你知道你在做什麼。
下載核心
我們要做的第一件事是下載核心原始碼。在 Kernel.org 找到你要下載的所需核心的 URL。找到 URL 之後,使用如下命令(我以 4.17 RC2
核心為例) 來下載原始碼檔案:
wget https://git.kernel.org/torvalds/t/linux-4.17-rc2.tar.gz
在下載期間,有一些事需要去考慮。
安裝需要的環境
為了編譯核心,我們首先得安裝一些需要的環境。這可以透過一個命令來完成:
sudo apt-get install git fakeroot build-essential ncurses-dev xz-utils libssl-dev bc flex libelf-dev bison
務必注意:你將需要至少 12 GB 的本地可用磁碟空間來完成核心的編譯過程。因此你必須確保有足夠的空間。
解壓原始碼
在新下載的核心所在的資料夾下,使用該命令來解壓核心:
tar xvzf linux-4.17-rc2.tar.gz
使用命令 cd linux-4.17-rc2
進入新生成的資料夾。
配置核心
在正式編譯核心之前,我們首先必須配置需要包含哪些模組。實際上,有一些非常簡單的方式來配置。使用一個命令,你能複製當前核心的配置檔案,然後使用可靠的 menuconfig
命令來做任何必要的更改。使用如下命令來完成:
cp /boot/config-$(uname -r) .config
現在你有一個配置檔案了,輸入命令 make menuconfig
。該命令將開啟一個配置工具(圖 1),它可以讓你遍歷每個可用模組,然後啟用或者禁用你需要或者不需要的模組。
圖 1: 執行中的 make menuconfig
很有可能你會禁用掉核心中的一個重要部分,所以在 menuconfig
期間小心地一步步進行。如果你對某個選項不確定,不要去管它。或者更好的方法是使用我們複製的當前執行的核心的配置檔案(因為我們知道它可以工作)。一旦你已經遍歷了整個配置列表(它非常長),你就準備好開始編譯了。
編譯和安裝
現在是時候去實際地編譯核心了。第一步是使用 make
命令去編譯。呼叫 make
命令然後回答必要的問題(圖 2)。這些問題取決於你將升級的現有核心以及升級後的核心。相信我,將會有非常多的問題要回答,因此你得預留大量的時間。
圖 2: 回答 make
命令的問題
回答了長篇累牘的問題之後,你就可以用如下的命令安裝那些之前啟用的模組:
make modules_install
又來了,這個命令將耗費一些時間,所以要麼坐下來看著編譯輸出,或者去做些其他事(因為編譯期間不需要你的輸入)。可能的情況是,你想要去進行別的任務(除非你真的喜歡看著終端介面上飛舞而過的輸出)。
現在我們使用這個命令來安裝核心:
sudo make install
又一次,另一個將要耗費大量可觀時間的命令。事實上,make install
命令將比 make modules_install
命令花費更多的時間。去享用午餐,配置一個路由器,將 Linux 安裝在一些伺服器上,或者小睡一會吧。
啟用核心作為引導
一旦 make install
命令完成了,就是時候將核心啟用來作為引導。使用這個命令來實現:
sudo update-initramfs -c -k 4.17-rc2
當然,你需要將上述核心版本號替換成你編譯完的。當命令執行完畢後,使用如下命令來更新 grub:
sudo update-grub
現在你可以重啟系統並且選擇新安裝的核心了。
恭喜!
你已經編譯了一個 Linux 核心!它是一項耗費時間的活動;但是,最終你的 Linux 發行版將擁有一個定製的核心,同時你也將擁有一項被許多 Linux 管理員所傾向忽視的重要技能。
從 Linux 基金會和 edX 提供的免費 “Introduction to Linux” 課程來學習更多的 Linux 知識。
via: https://www.linux.com/learn/intro-to-linux/2018/4/how-compile-linux-kernel-0
作者:Jack Wallen 選題:lujun9972 譯者:icecoobe 校對:wxy
相關文章
- 編譯linux核心編譯Linux
- Linux核心模組編譯Linux編譯
- linux核心修改編譯Linux編譯
- 附錄A Linux 編譯核心Linux編譯
- 高效學習Linux核心——核心模組編譯Linux編譯
- 如何編譯樹莓派核心編譯樹莓派
- Vmware下成功編譯linux核心2.6(轉)編譯Linux
- 編譯安裝最新的Linux系統核心編譯Linux
- 編譯系統核心編譯
- 編譯核心過程編譯
- 在 21 世紀該怎樣編譯 Linux 核心編譯Linux
- 04_Linux下把驅動編譯進核心Linux編譯
- A40i &T3 全原始碼編譯-ARM Linux核心在PC Linux的編譯方法原始碼編譯Linux
- 核心編譯part5編譯
- 核心編譯part4編譯
- 核心編譯part3編譯
- 核心編譯part2編譯
- 如何預編譯 Android 模擬器專用核心編譯Android
- Linux作業系統核心編譯詳解(2)(轉)Linux作業系統編譯
- 香橙派編譯linux核心支援ebpf和虛擬WIFI編譯LinuxeBPFWiFi
- hi3520d核心編譯編譯方法編譯
- <摘錄>Linux 環境下編譯 0.11版本核心 kernelLinux編譯
- Linux核心重編譯常見故障及其解決方法(轉)Linux編譯
- Centos8編譯安裝核心CentOS編譯
- Android核心的編譯與裁剪Android編譯
- 編譯核心make dep 的意思(轉)編譯
- [bazel]-如何編譯編譯
- 如何在Linux下編譯安裝MariaDBLinux編譯
- Linux 下如何繞過編譯器優化Linux編譯優化
- Linux下如何用GCC編譯動態庫LinuxGC編譯
- Linux編譯核心 Ubuntu18.04 -2020.11.04Linux編譯Ubuntu
- 一個Linux愛好者的2.6.11核心編譯過程(轉)Linux編譯
- 編譯器如何生成彙編編譯
- 用Make編輯linux核心Linux
- Ubuntu20.04linux核心(5.4.0版本)編譯準備與實現過程-編譯過程(2)UbuntuLinux編譯
- nanoPI編譯核心的一些recordNaN編譯
- win7 64位編譯WebKit核心Win7編譯WebKit
- centos5.1編譯2.6.24.5核心總結CentOS編譯