カーネルビルド
某氏の猫空 に詳しく書かれているので、そちらを参照していただくとして、大まかな流れと遭遇したトラブルについて記しておきます。なお、当方では、当時使っていた konalinux7 でビルドしました。
- GitHubで BPI-W2-bsp-w2-4.9-v1.0.zip と [KTS31] .config for linux-rt を入手する。
- 前者を ~/qua に展開、後者を.configにリネームして、前者のlinux-rtフォルダにコピーする。
- $ cd ~/qua/BPI-W2-bsp-w2-4.9-v1.0/
- 不足するパケージ があった ⇒ インストール $ sudo apt-get install libncurses-dev
- ビルドするも→ エラー発生 ⇒ 下記「※ビルドエラー」の対策を実施する
- $ ./build.sh → で「4. kernel configure」を選択
- $ ./build.sh → で「1. build all …」を選択
非力なマシンだったのでビルドに2時間以上かかった。
起動用USBメモリの作成
起動用USBメモリは最低2個のパーティションに分け、先頭にはカーネルが入るだけの容量のパーティションを置き(カーネルモジュールをここに入れる場合にはもう少し大きくする)、FAT32でフォーマットする。そのうしろのルートファイルシステム用パーティションはExt4でフォーマットする。ルートファイルシステムはいくつあってもよいが、各々があまりに小さいと起動後に問題が生じることがある。
- USBメモリのFAT32領域に bpi-w2.dtb、uImage をコピーする。
- USBメモリのExt4領域に、
ルートファイルシステム(ArchLinuxARM-aarch64-latest.tar.gz)を展開する。 - カーネルモジュールをコピー
Ext4領域の場合、 /lib/modules 以下にカーネル名ごとコピーする。
(カーネル名: 4.9.119-BPI-W2-Kernel)
※ビルドエラー(multiple definition of `yylloc’)
……………error……………
/usr/bin/ld: scripts/dtc/dtc-parser.tab.o:(.bss+0x10): multiple definition of `yylloc'; scripts/dtc/dtc-lexer.lex.o:(.bss+0x0): first defined here
collect2: error: ld returned 1 exit status
Build failed!
……………error……………
ビルドに際して上記エラーが出て進まなくなったが、このサイトを参考に、
/linux-rt/scripts/dtc/dtc-lexer.lex.c_shipped (記事では ./linux-rtk/scripts/dtc/dtc-lexer-lex.c )に「YYLTYPE yylloc → extern YYLTYPE yylloc」なる変更を加えて、ビルドは成功した。GCC 10 以降がインストールされている環境ではビルドに失敗するらしい。