Linux編譯內核 Ubuntu18.04 -2020.11.04
- 2020 年 11 月 4 日
- 筆記
- Eebedded System, Operating System
Linux編譯內核 Ubuntu18.04 -2020.11.04
關閉虛擬機並備份
首先關閉虛擬機,其次直接找到.vmdk所在目錄,並壓縮該目錄實現備份
下載內核源碼
Linux內核官網://www.kernel.org/,點擊圖標下載,摘自//blog.csdn.net/qq_36290650/article/details/83052315
將壓縮包移動到虛擬機中,並備份/boot/grub/grub.cfg
文件這個文件他負責啟動你的Ubuntu系統,你編譯好內核之後是要把新內核信息加入到這個文件裏面,這樣你才能在啟動Ubuntu的時候運用你的新內核。這個文件也是極其重要的。如果你在編譯內核過程中操作不當,將裏面的信息破壞了,那麼你的系統將無法啟動,這樣你只能通過恢復這個文件來解決,摘自://blog.csdn.net/qq_43688952/article/details/88856354
準備工作
安裝一系列軟件
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
解壓內核源碼
tar -xavf linux-5.9.3.tar.xz
進入解壓後的目錄,使用命令make mrproper
,這個命令會刪除所有的編譯生成文件、內核配置文件(.config文件)和各種備份文件,所以幾乎只在第一次執行內核編譯前才用這條命令
將boot目錄下的當前系統內核的config配置信息複製一份到當前目錄下的.config文件中
linkchen@master:~/UserProgram/linux-5.9.3$ cp /boot/config-4.15.0-121-generic ./.config
確認無誤後,輸入make menuconfig
命令,打開一個圖形界面
移動鍵盤光標,到Load上,再回車,可以看到確認是當前目錄下的.config文件
選擇OK後,再移動到Save上,保存並關閉,最後選擇退出Exit
輸入make clean
命令,用於刪除大多數的編譯生成文件,但是會保留內核的配置文件.config,還有足夠的編譯支持來建立擴展模塊。所以你若只想刪除前一次編譯過程的殘留數據,只需執行make clean命令
在進行編譯之前還需要將虛擬機的存儲空間擴展,否則會在編譯的過程中產生存儲空間不足的錯誤,擴展可參考://blog.csdn.net/lhl_blog/article/details/86636217
編譯內核
輸入命令sudo make
開始編譯,編譯過程需要很長時間,至少兩個小時左右
編譯完成後,輸入命令du -sh
查看編譯後的目錄大小
可以看到有19GB,我們需要將整個移植到軟盤中,並在軟盤中啟動
安裝內核
輸入make modules_install
,安裝內核模塊
輸入sudo make install
,安裝內核
Linux啟動過程圖解
參考://www.thegeekstuff.com/2011/02/linux-boot-process/
配置啟動內核
首先查看當前系統內核,輸入uname -a
輸入命令,查看initrd.img的不同內核版本
initrd.img即boot loader initialized RAM disk,就是由 boot loader 初始化的內存盤
具體可參考://blog.csdn.net/li33293884/article/details/53183622
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
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
發現內核已經成功切換了為新編譯的5.9.3版本