Linux編譯核心 Ubuntu18.04 -2020.11.04
阿新 • • 發佈:2020-11-04
# Linux編譯核心 Ubuntu18.04 -2020.11.04
## 關閉虛擬機器並備份
首先關閉虛擬機器,其次直接找到.vmdk所在目錄,並壓縮該目錄實現備份
![](https://img2020.cnblogs.com/blog/1560524/202011/1560524-20201104170117643-806855235.png)
## 下載核心原始碼
Linux核心官網:https://www.kernel.org/,點選圖示下載,摘自https://blog.csdn.net/qq_36290650/article/details/83052315
![](https://img2020.cnblogs.com/blog/1560524/202011/1560524-20201104170127401-645169216.png)
將壓縮包移動到虛擬機器中,並備份```/boot/grub/grub.cfg```檔案這個檔案他負責啟動你的Ubuntu系統,你編譯好核心之後是要把新核心資訊加入到這個檔案裡面,這樣你才能在啟動Ubuntu的時候運用你的新核心。這個檔案也是極其重要的。如果你在編譯核心過程中操作不當,將裡面的資訊破壞了,那麼你的系統將無法啟動,這樣你只能通過恢復這個檔案來解決,摘自:https://blog.csdn.net/qq_43688952/article/details/88856354
![](https://img2020.cnblogs.com/blog/1560524/202011/1560524-20201104170140269-153344181.png)
## 準備工作
安裝一系列軟體
```shell
sudo apt-get install libncurses5-dev openssl libssl-dev
sudo apt-get install build-essential
sudo apt-get install pkg-config
sudo apt-get install libc6-dev
sudo apt-get install bison
sudo apt-get install flex
sudo apt-get install libelf-dev
sudo apt-get install zlibc minizip
sudo apt-get install libidn11-dev libidn11
```
解壓核心原始碼
```shell
tar -xavf linux-5.9.3.tar.xz
```
進入解壓後的目錄,使用命令```make mrproper```,這個命令會刪除所有的編譯生成檔案、核心配置檔案(.config檔案)和各種備份檔案,所以幾乎只在第一次執行核心編譯前才用這條命令
將boot目錄下的當前系統核心的config配置資訊複製一份到當前目錄下的.config檔案中
```shell
linkchen@master:~/UserProgram/linux-5.9.3$ cp /boot/config-4.15.0-121-generic ./.config
```
![](https://img2020.cnblogs.com/blog/1560524/202011/1560524-20201104170230473-1561312006.png)
確認無誤後,輸入```make menuconfig```命令,開啟一個圖形介面
![](https://img2020.cnblogs.com/blog/1560524/202011/1560524-20201104170242858-1624631299.png)
移動鍵盤游標,到Load上,再回車,可以看到確認是當前目錄下的.config檔案
![](https://img2020.cnblogs.com/blog/1560524/202011/1560524-20201104170248678-2071163842.png)
選擇OK後,再移動到Save上,儲存並關閉,最後選擇退出Exit
輸入```make clean```命令,用於刪除大多數的編譯生成檔案,但是會保留核心的配置檔案.config,還有足夠的編譯支援來建立擴充套件模組。所以你若只想刪除前一次編譯過程的殘留資料,只需執行make clean命令
在進行編譯之前還需要將虛擬機器的儲存空間擴充套件,否則會在編譯的過程中產生儲存空間不足的錯誤,擴充套件可參考:https://blog.csdn.net/lhl_blog/article/details/86636217
## 編譯核心
輸入命令```sudo make```開始編譯,編譯過程需要很長時間,至少兩個小時左右
![](https://img2020.cnblogs.com/blog/1560524/202011/1560524-20201104170350188-2047342140.png)
編譯完成後,輸入命令```du -sh```檢視編譯後的目錄大小
![](https://img2020.cnblogs.com/blog/1560524/202011/1560524-20201104170429925-280586965.png)
可以看到有19GB,我們需要將整個移植到軟盤中,並在軟盤中啟動
## 安裝核心
輸入```make modules_install```,安裝核心模組
![](https://img2020.cnblogs.com/blog/1560524/202011/1560524-20201104170436384-1144384793.png)
輸入```sudo make install```,安裝核心
![](https://img2020.cnblogs.com/blog/1560524/202011/1560524-20201104170517364-639346343.png)
## Linux啟動過程圖解
![](https://img2020.cnblogs.com/blog/1560524/202011/1560524-20201104170529625-340648742.png)
參考:https://www.thegeekstuff.com/2011/02/linux-boot-process/
## 配置啟動核心
首先檢視當前系統核心,輸入```uname -a```
![](https://img2020.cnblogs.com/blog/1560524/202011/1560524-20201104170537980-665993008.png)
輸入命令,檢視initrd.img的不同核心版本
initrd.img即boot loader initialized RAM disk,就是由 boot loader 初始化的記憶體盤
具體可參考:https://blog.csdn.net/li33293884/article/details/53183622
```shell
linkchen@master:~/UserProgram/linux-5.9.3$ sudo mkinitramfs -o /boot/initrd.img-
initrd.img-4.15.0-118-generic initrd.img-4.15.0-121-generic initrd.img-5.9.3
```
輸入命令
* ```sudo mkinitramfs -o /boot/initrd.img-5.9.3```
* ```sudo update-initramfs -c -k 5.9.3```
* ```update-grub2```
```shell
linkchen@master:~/UserProgram/linux-5.9.3$ sudo mkinitramfs -o /boot/initrd.img-5.9.3
[sudo] password for linkchen:
linkchen@master:~/UserProgram/linux-5.9.3$ sudo update-in
update-inetd update-info-dir update-initramfs
linkchen@master:~/UserProgram/linux-5.9.3$ sudo update-in
update-inetd update-info-dir update-initramfs
linkchen@master:~/UserProgram/linux-5.9.3$ sudo update-initramfs -c -k
4.15.0-118-generic 4.15.0-121-generic 4.15.0-29-generic 5.9.3 all
linkchen@master:~/UserProgram/linux-5.9.3$ sudo update-initramfs -c -k 5.9.3
update-initramfs: Generating /boot/initrd.img-5.9.3
linkchen@master:~/UserProgram/linux-5.9.3$ sudo update-grub2
Sourcing file `/etc/default/grub'
Generating grub configuration file ...
Found linux image: /boot/vmlinuz-5.9.3
Found initrd image: /boot/initrd.img-5.9.3
Found linux image: /boot/vmlinuz-4.15.0-121-generic
Found initrd image: /boot/initrd.img-4.15.0-121-generic
Found linux image: /boot/vmlinuz-4.15.0-118-generic
Found initrd image: /boot/initrd.img-4.15.0-118-generic
Found memtest86+ image: /boot/memtest86+.elf
Found memtest86+ image: /boot/memtest86+.bin
done
linkchen@master:~/UserProgram/linux-5.9.3$
```
輸入命令```sudo reboot```重啟計算機,再次檢查核心版本,輸入```uname -a```
![](https://img2020.cnblogs.com/blog/1560524/202011/1560524-20201104170548475-433602374.png)
發現核心已經成功切換了為新編譯的5.9