Qua stationでLinuxを動かす — ⑵ Build

カーネルビルド

某氏の猫空 に詳しく書かれているので、そちらを参照していただくとして、大まかな流れと遭遇したトラブルについて記しておきます。なお、当方では、当時使っていた konalinux7 でビルドしました。

  1. GitHubで BPI-W2-bsp-w2-4.9-v1.0.zip[KTS31] .config for linux-rt を入手する。
  2. 前者を ~/qua に展開、後者を.configにリネームして、前者のlinux-rtフォルダにコピーする。
  3. $ cd ~/qua/BPI-W2-bsp-w2-4.9-v1.0/
  4. 不足するパケージ があった ⇒ インストール $ sudo apt-get install libncurses-dev
  5. ビルドするも→ エラー発生  下記「※ビルドエラー」の対策を実施する
  6. $ ./build.sh → で「4. kernel configure」を選択
  7. $ ./build.sh → で「1. build all …」を選択

非力なマシンだったのでビルドに2時間以上かかった。

起動用USBメモリの作成

起動用USBメモリは最低2個のパーティションに分け、先頭にはカーネルが入るだけの容量のパーティションを置き(カーネルモジュールをここに入れる場合にはもう少し大きくする)、FAT32でフォーマットする。そのうしろのルートファイルシステム用パーティションはExt4でフォーマットする。ルートファイルシステムはいくつあってもよいが、各々があまりに小さいと起動後に問題が生じることがある。

  1. USBメモリのFAT32領域bpi-w2.dtbuImage をコピーする。
  2. USBメモリのExt4領域に、
    ルートファイルシステム(ArchLinuxARM-aarch64-latest.tar.gz)を展開する。
  3. カーネルモジュールをコピー
    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 以降がインストールされている環境ではビルドに失敗するらしい。

Qua stationでLinuxを動かす — ⑶ Boot に続く