Raspberry Piのカーネルビルドをまとめたやつの2021/5/24版
Raspberry Piシリーズのクロスコンパイルでのカーネルビルド
がぶさんちの覚書
1.最初に必要なやつら
sudo apt install git bc bison flex libssl-dev make libc6-dev libncurses5-dev
2.ツールチェイン
32bit sudo apt install crossbuild-essential-armhf
64bit sudo apt install crossbuild-essential-arm64
3.ソースげっちゅー
git clone --depth=1 https://github.com/raspberrypi/linux
4.環境変数設定
32bit
Pi 1, Pi Zero, Pi Zero W, or Compute Module:
export KERNEL=kernel
For Pi 2, Pi 3, Pi 3+, or Compute Module 3:
export KERNEL=kernel7
For Raspberry Pi 4:
export KERNEL=kernel7l
64bit
For Pi 3, Pi 3+ or Compute Module 3:
export KERNEL=kernel8
For Raspberry Pi 4:
export KERNEL=kernel8
5. EXTRAVERSIONを設定
cd linux vim Makefile EXTRAVERSION = -mod
カーネルのバージョンのあとにひっつけて識別します。
6..configをつくろー
32bit
Pi 1, Pi Zero, Pi Zero W, or Compute Module:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- bcmrpi_defconfig
For Pi 2, Pi 3, Pi 3+, or Compute Module 3:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- bcm2709_defconfig
For Raspberry Pi 4:
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- bcm2711_defconfig
64bit
For Pi 3, Pi 3+ or Compute Module 3:
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- bcmrpi3_defconfig
For Raspberry Pi 4:
make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- bcm2711_defconfig
6.ビルドします
32bit
make -j$(nproc) ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- zImage modules dtbs
64bit
make -j$(nproc) ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- Image modules dtbs
7.インストールするMicroSDをマウント
mkdir mnt mkdir mnt/fat32 mkdir mnt/ext4 sudo mount /dev/sdb1 mnt/fat32 sudo mount /dev/sdb2 mnt/ext4
sdb1 は FAT (boot) パーテーション
sdb2 は ext4 filesystem (root) パーテーション
間違えたら悲しい気持ちになります。
sdb1,sdb2は環境により異なります。
8.カーネルモジュールのインストール
32bit
sudo env PATH=$PATH make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- INSTALL_MOD_PATH=mnt/ext4 modules_install
64bit
sudo env PATH=$PATH make ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- INSTALL_MOD_PATH=mnt/ext4 modules_install
9.カーネルのコピー
32bit
sudo cp mnt/fat32/$KERNEL.img mnt/fat32/$KERNEL-backup.img sudo cp arch/arm/boot/zImage mnt/fat32/$KERNEL.img sudo cp arch/arm/boot/dts/*.dtb mnt/fat32/ sudo cp arch/arm/boot/dts/overlays/*.dtb* mnt/fat32/overlays/ sudo cp arch/arm/boot/dts/overlays/README mnt/fat32/overlays/ sudo umount mnt/fat32 sudo umount mnt/ext4
64bit
sudo cp mnt/fat32/$KERNEL.img mnt/fat32/$KERNEL-backup.img sudo cp arch/arm64/boot/Image mnt/fat32/$KERNEL.img sudo cp arch/arm64/boot/dts/broadcom/*.dtb mnt/fat32/ sudo cp arch/arm64/boot/dts/overlays/*.dtb* mnt/fat32/overlays/ sudo cp arch/arm64/boot/dts/overlays/README mnt/fat32/overlays/ sudo umount mnt/fat32 sudo umount mnt/ext4
おつかれやんした。
KERNEL以外のコンパイルオプションは、
環境変数に登録してもうまく参照してくれない可能性があるので、
参考にした(ぱくった)Raspberry Pi Documentation - The Linux kernelこちらのサイトにあるようにしときました。
カーネルが5.xになってえらい変わりましたが、
Zeroと3のコンパイルはでけました。
当方の環境は
Mac mini Late 2012 i7 2.6GHz
RAM 16GB
VirtualBox6.1
ubuntu 20.04 64bit
詳しくはそのうち加筆します。
とりあえず
コンパイルが終わったやつどうしよう。
そんなかんじ。