[Linux] KERNEL更新編譯,第一次就上手(Debian系統)

如何KERNEL更新編譯,第一次就上手
其實,自己對重新編譯KERNEL非常的沒信心和挫折。
以前硬體很差,網路社群討論很難找(也許自己不會用google和英文能力不夠好)。
改個需要的KERNEL,常常弄好掛上去,就是死當或不能用。
印象中有成功能開機和改善電腦硬體運行的紀錄,大概是兩次(那時候KERNEL版本是2.x版)。
屈指一算,已經是快另外一個20年頭…@@
現在因為要嘗試跑安卓模擬機,為了驅動,發現甚至已經進步到6.x版本。
不過自己的系統沒有追新求變,我都還在用4.x版的和嘗試5.x版的APT預載版套件。
這次當然就來嘗試既有的版本,新增安卓模擬機需要的驅動程式,再次體驗KERNEL編譯的挫折地獄。
雖然現在的硬體依然是老電腦,整體效能還是跟當初不同而語的訓數,雖然縱使過程中有錯誤、失敗,仍然每個指令步驟都很快能完成運算,不像以前跑的時間是算小時起跳的。
現在算是成功了,故整理一下操作過程的心得,也給自己一個紀錄當未來需要參考。

查看自己現在使用的版本。
uname -a

先把相關套件透過apt(aptitude也可以)更新和必要的安裝。
sudo apt update
sudo apt upgrade
sudo apt install nano vim wget gnupg2
sudo apt install build-essential dwarves python3 libncurses-dev flex bison libssl-dev bc libelf-dev

剩下後面編譯若有缺套件,看名字缺什麼,後面再加裝什麼亦可。

範例,安裝5.15.12版本的KERNEL。
我們到這個網址抓下來source原始檔和patch補釘:
wget https://cdn.kernel.org/pub/linux/kernel/v5.x/linux-5.15.12.tar.gz
wget https://cdn.kernel.org/pub/linux/kernel/v5.x/patch-5.15.12.xz

tar xvfz linux-5.15.12.tar.gz
cd linux-5.15.12
sudo cp -v /boot/config-$(uname -r) .config

把目前KERNEL版本開機的檔案複製過來當基本設定檔,不一定要相同版本,後面有指令會幫助修正。

(*非必要可以略過)開始修正補釘。)
sudo cp ../patch-5.15.12.xz ./
xz -dc patch-5.15.12.xz | patch -p1 -dry-run
xz -dc patch-5.15.12.xz | patch -p1

(-dry-run是測試補釘檔案正確性;另外如必要,可以恢復為補釘修改前的版本xz -dc patch-5.15.12.xz | patch -p1 -R)

非第一次安裝可以先執行清除既有的編譯和設定檔。
make clean
(或sudo make clean)

*非必要呼叫和宣告
(uname -m)
(export ARCH=x86_64)
(export CROSS_COMPILE=x86_64-linux-gnu-)

進入預計安裝的版本,以文字對話介面的選單設定相關套件、驅動和功能。
sudo make menuconfig
當設定需要新增的驅動或預設檔案後,[save]、[exit]。

make localmodconfig
此KERNEL版本的.config和複製過來的.config比較差異,看缺什麼設定,就選擇新增好缺的條件亦可。

開始編譯準備相關開機IMAGE檔案和驅動程式檔案瞜!
sudo make bzImage -j$(nproc --all)
(-jx指的是用CPU多少顆核心跑編譯,參數可有可無)
(若因為GCC預設32bit環境用的異常:ld: warning: creating DT_TEXTREL in a PIE,可以嘗試:sudo make KBUILD_CFLAGS=-no-pie bzImage -j$(nproc –all)追加參數試試看bypass)
(或是sudo make bzImage -j$(nproc –all) -no-pie)
sudo make modules -j$(nproc --all)
sudo make modules_install
sudo make install

(make deb-pkg)

安裝完成,更新GRUB開機選單和重開機。
sudo update-grub
sudo reboot

PS.如有必要,X WINDOW下可以裝Grub Customizer來管理GRUB開機選單和設定參數。

祝各位順利開機和啟用需要的硬體驅動!!

目前KERNEL使用的各版本下載處:
https://cdn.kernel.org/pub/linux/kernel/v4.x/
https://cdn.kernel.org/pub/linux/kernel/v5.x/
https://cdn.kernel.org/pub/linux/kernel/v6.x/

相關參考文章:
https://techviewleo.com/how-to-install-linux-kernel-on-debian/
https://www.cyberciti.biz/faq/debian-ubuntu-building-installing-a-custom-linux-kernel/
https://unix.stackexchange.com/questions/194455/how-to-install-compile-module-in-debian-without-using-full-kernel-only-by-using
http://g2doc.com:81/pages/d7fdf0/
https://stackoverflow.com/questions/71253360/compiling-the-linux-kernel-make-menuconfig-error
https://man7.org/linux/man-pages/man1/gcc.1.html
https://gts3.org/2017/cross-kernel.html
https://www.kernel.org/doc/html/v4.11/process/applying-patches.html

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

請輸入下列驗證碼計算後阿拉伯數字 (Translate it, if not Taiwanese to post reply) *