MacでのLLVMを使ったRaspberry Pi 64bit kernel cross-compile
下記のページによると、基本的にはLLVMをインストールして
が実行出来れば良い。
Clang / LLVMのインストール
下記の手順に沿って実行。特に問題は起きませんでした。
OpenSSLのインストール
$ brew install openssl
大文字と小文字を区別出来るFATのストレージを用意する
MacのOSがインストールされているストレージは大文字と小文字を区別しない仕様でフォーマットされているとのこと…。そのままだとkernelのヘッダなど同じファイル名で大文字と小文字の区別があるものが消えてしまう。
外部ストレージのFATをどうするか迷ったけれど、ジャーナリングを無効にしたHFS+を試してみたところラズパイで問題なくマウント出来た。
byteswap.hとelf.hを/usr/local/includeにコピー
2つのファイルをダウンロードし、/usr/local/includeにコピーする。byteswap.hは最後の2行をコメントアウトすること。
scripts/mod/file2alias.cにpatch適用
Macでのbuildではscripts/mod/file2alias.cのコンパイルでerrorが出るので下記のpatchを適用する。
Kernelのビルド
$ make LLVM=1 ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- bcm2711_defconfig
$ make LLVM=1 ARCH=arm64 CROSS_COMPILE=aarch64-linux-gnu- menuconfig
した後
で基本は良いんだけど、最適化オプションを付けたいのでmakeのコマンドは最終的に下記のようになりました。
$ make LLVM=1 ARCH=arm64 \
CROSS_COMPILE=aarch64-linux-gnu- \
KCFLAGS="-O3 -mcpu=cortex-a72+fp+simd+crc" \
HOSTCFLAGS="-O3" \
Image modules dtbs
AppArmorのコンパイルでerrorが出るけれどこれに関しては現状解決策が分からなかった。自宅でオーディオ用途に使うだけなのでAppArmorは無効にして対処しました。
2022年5月28日追記:
インストール
Linuxでマウント出来るストレージで作業しているはずなので
$ mkdir /mnt/usb
$ mount /dev/sdb2 /mnt/usb/root
$ cd /mnt/usb/root/path/to/src
などとすれば後はmake install、make modules_installで普通にインストール出来る。