Third Encore

思い出すために忘れたことたち

MacでのLLVMを使ったRaspberry Pi 64bit kernel cross-compile

下記のページによると、基本的にはLLVMをインストールして

$ make ARCH=arm64 LLVM=1 CROSS_COMPILE=aarch64-linux-gnu-

が実行出来れば良い。

 

www.kernel.org

 

 

Clang / LLVMのインストール

下記の手順に沿って実行。特に問題は起きませんでした。

 

students-tech.blog

 

OpenSSLのインストール

$ brew install openssl

 

大文字と小文字を区別出来るFATのストレージを用意する

MacのOSがインストールされているストレージは大文字と小文字を区別しない仕様でフォーマットされているとのこと…。そのままだとkernelのヘッダなど同じファイル名で大文字と小文字の区別があるものが消えてしまう。

sugawarayusuke.hatenablog.com

 

外部ストレージのFATをどうするか迷ったけれど、ジャーナリングを無効にしたHFS+を試してみたところラズパイで問題なくマウント出来た。

javaflavor.cocolog-nifty.com

 

byteswap.hとelf.hを/usr/local/includeにコピー

2つのファイルをダウンロードし、/usr/local/includeにコピーする。byteswap.hは最後の2行をコメントアウトすること。

byteswap.h · GitHub

elf.h for OSX · GitHub

 

scripts/mod/file2alias.cにpatch適用

Macでのbuildではscripts/mod/file2alias.cのコンパイルでerrorが出るので下記のpatchを適用する。

gitce.net

 

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 ARCH=arm64 LLVM=1 CROSS_COMPILE=aarch64-linux-gnu-

で基本は良いんだけど、最適化オプションを付けたいので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日追記:

third-encore.hatenablog.com

 

インストール

Linuxでマウント出来るストレージで作業しているはずなので

$ mkdir /mnt/usb

$ mount /dev/sdb2 /mnt/usb/root

$ cd /mnt/usb/root/path/to/src

などとすれば後はmake install、make modules_installで普通にインストール出来る。