Cross Tool Chain インストール
Cross Tool Chainは多種のコンパイラを持っています。 ビルドを実行するホストPC用でダウンロードし、ターゲット(組込ボード)のCPUのアーキテクチャ(プラットフォーム)に適合したバイナリにコンパイルするためのものです。
クロスコンパイラ ダウンロード
Linaroはarm用のCross Tool ChainやLinux Kernelも手がける、arm用のクロスコンパイラとして最も有名な団体です。
- uBuntu PCの場合、https://releases.linaro.org/components/toolchain/binaries/7.5-2019.12/arm-linux-gnueabihf/ に行き、gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf.tar.xz をダウンロードします。(後々でますが、Buildroot-2022.11ではLinaro-ARM-2018.05しか使えませんでしたので、Buildroot時に別途2018.05もBuildroot内にインストールしました。)
- 好きなところでExtract(解凍)する。 私の場合は、~/BBB_Workspace/Udemy-build/ で解凍しました。
- *eabihfのhfはHard Floatの意味。 浮動小数点演算時HFだとFPUのレジスタに渡して受け取る。 Soft Floatは汎用レジスタ引き渡し。 BBBは浮動小数点演算をハードで処理するam3358 SoCを搭載しているのでhf指定です。
クロスコンパイラ用パス設定
ダウンロードして解凍したクロスコンパイラの場所のPATHを指定します。
- export PATH=$PATH:/home/ichiri/BBB_Workspace/Udemy-build/gcc-linaro-7.5.0-2019.12-x86_64_arm-linux-gnueabihf/bin を~/.bashrcの最後に書き込む。
- viのインサートモードでShift+Insで貼り付け。『viの使い方』
- source .bashrc で.bashrc を再実行
- ~/(ホームディレクトリ)で armと打ち込みTabキーを2回押すと、上記パス内のファイルが表示される。 これでPATHが通っていることが分かりクロスコンパイラのインストール完了。
U-BOOT コンパイル
U-BOOT ソースコード入手
以下のリンクからzipでダウンロードした
GitHub - u-boot/u-boot at v2022.10
"Das U-Boot" Source Tree. Contribute to u-boot/u-boot development by creating an account on GitHub.
*下の図は2021になっていますが、上記リンクは2022.11となっていて、私が使ったのも2022.11バージョンです。
以下のリンクはリストから選択してダウンロードできます。
Index of /pub/u-boot/
前回オブジェクトファイル削除
- ~/BBB_Workspace/Downloads/u-boot-2022.10/ に移動
$ cd ~/BBB_Workspace/Downloads/u-boot-2022.10/ $ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- distclean
U-BOOTにBBBのデフォルトコンフィギュレーションを追加
- 以下のコマンドで U−BOOTの各種設定する.config ファイルを生成。
- 1分弱で完了しました。
- .configファイルは絶対に編集してはいけません。 編集するのは次のmanuconfigで編集する。
$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- am335x_evm_defconfig //make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- am335x_boneblack_defconfig <--- U-BOOT-2017年以前はこれ
menuconfigの設定を追加
$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- menuconfig
menuconfigとは
- U-BOOT、Linux Kernel、BusyBox、Buildrootなどのビルド前に、Windows BIOSの様なGUIで環境設定を変更できる。
- Linux Kernelの場合は、menuconfigでドライバーの使用有無を設定できる
- < > はKernel Moduleのモジュール化が可能な項目
- この際、<*>とするとKernelに組み込まれてビルドされる。 高速に動作するが、RAM(DDR)容量を占有する。 また、後から見て何のModuleがインストールされたかがわからない。
- <M>とすると、moduleとしてルートファイルシステムのディレクトリに入れられる。
- { }には、Mか*しか設定できない。波括弧のオプションは他の機能/ドライバーがこの機能に依存しているため有効化またはモジュールとして有効化のみ。無効化することはできまない。
- -M-、-*- は他の機能/ドライバーによって表示されている形式で、選択できない。
- 基本的に、xxxxx_defconfigの初期値設定を使ってmenuconfigが出来ているので、アーキテクチャー用となっている。
- xxxxx_defconfigは、複数のパターン(ボードやアーキテクチャー)をサポートしているので、本当に必要なドライバー以外も多く含まれているので、ビルド後のファイルサイズが大きくなる。
- 不要なものはmenuconfigで削除する。
- menuconfigはそれをカスタマイズする為のもの。
- 項目上で『?』とすると、その項目のヘルプが表示される。 モジュールとして組み込む場合のモジュール名も記載されている。
- どこからでも『/』を押すと検索ができる
- 前の画面に戻るには『ESC』を2回押す
U-BOOT ビルド
最後にU-BOOTをビルドします。
- 2分弱程度
- 2回目以降、distcleanしなくても、menuconfigで値を変更してコンパイルできました。
このコンパイルで以下の3つのファイルが生成されます。 MLOはTI用ファイルです。
- MLO ーーーUART経由立ち上げ以外の時の、RBLの次の2ndブートローダ。
- u-boot-spl.bin —–UART経由でu-boot.img転送して立ち上げる時の2ndブートローダ。
- u-boot.img ーー/BOOT/に入れておく、3rdブートローダーのU-BOOTイメージ。 U-BOOTの本体イメージファイル。
make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j2 //2 core PCでコンパイルの時 2分弱で完成 make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j4 //4 core PCでコンパイルの時 make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- -j8 //8 core PCでコンパイルの時
ビルドを実行したディレクトリにMLOとu-boot.imgができました。 またその下のディレクトリ/spl/にu-boot-spl.binファイルができました。 これらをmicroSDに入れて使用します。
この3つのファイルが生成されたら『その5』は完了です。 新しく作ったMLOやu-boot.imgで『その4』を試してみてもいいと思います。
arm-linux-gnueabihf-gcc not found エラー対処法
U-BOOTコンパイルをした時、最初上記のエラーがでたので以下の対処をしました。
$ sudo apt install arm-linux-gnueabihf-gcc
コメント