使用WSL編譯及建構適用於RPi 4B的kernel
使用WSL編譯及建構適用於RPi 4B的kernel
本文基本上是參考這篇文章[1]的步驟,並再進一步提供一些會踩到的雷的解法。
版本環境:
- Windows 10
- WSL Ubuntu 22.04.3 LTS
- Raspberry Pi 4B 8GB
Windows Subsystem for Linux安裝
開啟Terminal,輸入以下指令以安裝WSL
wsl --install
將自動安裝Ubuntu及建立VM。
進入Ubuntu更新套件:
sudo apt update
Cross Compilation on WSL
環境安裝
安裝必要套件
sudo apt install build-essential libncurses-dev linux-tools-common git-lfs
安裝linux編譯器
編輯apt來源
*注意須返回根目錄
sudo vi /etc/apt/sources.list
取消註解第4行,並保存退出(:wq)
# See http://help.ubuntu.com/community/UpgradeNotes for how to upgrade to # newer versions of the distribution. deb http://archive.ubuntu.com/ubuntu/ jammy main restricted deb-src http://archive.ubuntu.com/ubuntu/ jammy main restricted # <---
更新套件
sudo apt update
安裝linux編譯器
*如果沒有做前述步驟則會有"E: You must put some 'deb-src' URIs in your sources.list"錯誤
sudo apt build-dep linux
Cross Compiler安裝
build套件安裝
sudo apt install crossbuild-essential-arm64
toolchain安裝
下載toolchain-arm
sudo git clone https://github.com/DLTcollab/toolchain-arm
解壓縮所需版本
cd toolchain-arm ls #查看檔案版本 sudo tar -xvJf gcc-arm-11.2-2022.02-x86_64-aarch64-none-linux-gnu.tar.xz
在~/.bashrc加入路徑
vi ~/.bashrc
*[username]請自行對應自己的Ubuntu user名稱
#加在最後一行 export PATH=$PATH:/home/[username]/toolchain-arm/gcc-arm-11.2-2022.02-x86_64-aarch64-none-linux-gnu/bin
Compile & Build Mainline Kernel
建立目錄
mkdir ~/kernelbuild cd ~/kernelbuild
安裝及解壓縮
wget https://cdn.kernel.org/pub/linux/kernel/v6.x/linux-6.11.1.tar.xz tar -xvJf linux-6.11.1.tar.xz cd linux-6.11.1/
執行compilation & build
清除並建立乾淨環境
make distclean
建立設定檔
make ARCH=arm64 CROSS_COMPILE=aarch64-none-linux-gnu- defconfig
套用設定檔
sed -i 's/CONFIG_LOCALVERSION_AUTO=y/CONFIG_LOCALVERSION_AUTO=n/' .config
編譯及建置
make ARCH=arm64 CROSS_COMPILE=aarch64-none-linux-gnu- LOCALVERSION="-cfs-raspi" -j$(nproc) bindeb-pkg
*如果是使用linux-6.3前的版本,可用deb-pkg。如果是較新版本(如本文採用6.11.1),請改用bindeb-pkg,理由[2]。
*時間參考:CPU i7-7700、RAM約4.2GB,耗時約45分鐘。
最終檔案會儲存在上層目錄(~/kernelbuild)。
在RPi 4B上安裝kernel
將*.deb檔轉移到rpi,有以下幾種轉移方式:
- SSH
# At WSL scp *.deb [username]@[hostname]:/home/[username]/
TTL-to-USB(ex. Zmodem)
USB隨身碟
Copy from WSL to mounted drive
#At WSL scp *.deb /mnt/c/Users/[username]/Downloads
Move your files to USB drive
Mount USB on RPi
# At RPi sudo mkdir /mnt/usb sudo mount /dev/sda1 /mnt/usb
安裝deb檔
#路徑位置請自行指定前一步驟轉移位置 sudo dpkg -i /path/to/*.deb
檢查新kernel安裝是否成功
如果以下兩種版本檢查方式可以找到新的安裝版本名稱,代表已安裝完成。
uname -r
ls /boot
參考
Chun-Hung Tseng(2021, Sep 14). 編譯 Raspberry Pi 4 的 Kernel Image. (n.d.). HackMD. Retrieved October 3, 2024, from link ↩︎
kbuild: use git-archive for source package creation - kernel/git/torvalds/linux.git - Linux kernel source tree. (2023, March 16). Kernel.Org. Retrieved October 3, 2024, from link ↩︎
- 0
- 0
- 0
- 0
- 0
- 0
Preview: