Raspberry Piのカーネルバージョンを手っ取り早く最新にしたい時などの為に、ソースビルドして導入する方法をまとめます。なお、本解説は64bit(Aarch64)版カーネルで検証した内容です。
コンパイルにはWindows母艦PC上のwslを用います。
依存関係をインストールする
sudo apt install git bc bison flex libssl-dev make libc6-dev libncurses5-dev
sudo apt install crossbuild-essential-arm64
ソースのクローン
公式のGitHubからカーネルソースを引っ張ってきます。
git clone --depth=1 https://github.com/raspberrypi/linux
cd linux
環境変数と .config
の準備
# Raspberry Pi 3/3+/CM3/CM3+/Z2W/4/400/CM4/CM4S
KERNEL=kernel8
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- bcm2711_defconfig
# Raspberry Pi 5/500/CM5
KERNEL=kernel_2712
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- bcm2712_defconfig
KERNELは後ほどカーネルイメージをコピーする際に出てきます。
ビルド
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- Image modules dtbs -j8
-j8
はCPUのスレッド数に合わせて任意で変更します。
転送
丸ごと送るのでかなり時間がかかります。
もっと賢いやり方があるかもしれない?
scp -r ~/linux pi@[Rapberry PiのIP]:/home/pi/
インストール
Raspberry Pi側での実行
cd linux
sudo make -j6 modules_install
sudo cp /boot/firmware/$KERNEL.img /boot/firmware/$KERNEL-backup.img
sudo cp arch/arm64/boot/Image.gz /boot/firmware/$KERNEL.img
sudo cp arch/arm64/boot/dts/broadcom/*.dtb /boot/firmware/
sudo cp arch/arm64/boot/dts/overlays/*.dtb* /boot/firmware/overlays/
sudo cp arch/arm64/boot/dts/overlays/README /boot/firmware/overlays/
カーネルモジュール単位でビルド・転送する
例:drivers/media/usb/em28xx/
のドライバをコンパイルし転送する
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- M=drivers/media/usb/em28xx modules
scp -r ./drivers/media/usb/em28xx/ pi@[Rapberry PiのIP]:/home/pi/linux/drivers/media/usb/