「Raspberry Pi」用に、u-bootをUbuntのLinux上でコンパイルする。
ARMクロスコンパイル環境の準備
ARMツールチェーンなどのコンパイル環境は、下記記事でインストール済の環境を使う。
- macOSでもコンパイル可能。
u-bootソース一式を取得
適当な作業フォルダーで、下記gitコマンドでGitHubから取得(本家サイトからでも可)
$ git clone https://github.com/RobertCNelson/u-boot
- 本家のサイトからは「
git clone git://git.denx.de/u-boot.git
」コマンドで取得。
「Raspberry Pi」用をコンパイル
作業フォルダに移動
$ cd u-boot
環境変数の設定(~/.bashrc
などに記述しておいてもよい)
$ export CROSS_COMPILE="arm-none-eabi-"
まずは、「Raspberry Pi 」用をコンパイル(ZeroでもOK)
$ make distclean
$ make rpi_defconfig
$ make u-boot.bin
作成した、u-boot.bin
をどこかにコピーしておき、
続いて、「Raspberry Pi 2」用をコンパイル
$ make clean
$ make distclean
$ make rpi_2_defconfig
$ make u-boot.bin
作成した、u-boot.bin
をどこかにコピーしておき、
続いて、「Raspberry Pi 3(32bit)」用をコンパイル
$ make clean
$ make distclean
$ make rpi_3_32b_defconfig
$ make u-boot.bin
尚、コンパイルできる種類は、configs
のフォルダに定義が準備してあり、Raspberry Pi関係は以下の指定が使える
・rpi_defconfig … Raspberry Pi 1, Zero用
・rpi_2_defconfig …Raspberry Pi 2用
・rpi_3_32b_defconfig …Raspberry Pi 3(32bit)用
・rpi_3_defconfig …Raspberry Pi 3(64bit)用
※Raspberry Pi 3(64bit)用は、2016/8/11現在、私の環境ではコンパイルエラーとなった。いまの所64bit版は必要ないので、とりあえずヨシとする。
u-bootを起動
ここで、作成したu-boot.bin
のファイルをSDカードにコピーし、config.txt
ファイルに、下記行を記述して起動する。
# Raspberry Pi 3では下記を有効にする
# enable_uart=1
kernel=u-boot.bin
尚、Raspberry Piでのu-bootの起動については、後の記事で紹介する。
fatloadコマンドで不具合?
loads や loadbコマンドで、自作プログラムをシリアル経由で転送して実行させる事はできたが、fatload コマンドで、SDカードに記録しておいたプログラムを読み込んで実行させようとすると、2016/8/11版のソースではうまく実行できなかった。
どうやらキャッシュ不整合がおきているような感じなので、ソースの下記部分を修正したu-bootで試すとOK。
本不具合はそのうち修正されるかもしれないので、参考まで。
/fs/fs.c
のdo_load()関数内の下記ソースの箇所に”flush_cache(addr, len_read);”の行を追加
416 puts(")");
417 }
418 puts("\n");
419
420 flush_cache(addr, len_read); //←この行を追加
421
422 setenv_hex("fileaddr", addr);
423 setenv_hex("filesize", len_read);
424
425 return 0;
426 }
コンパイル済u-bootバイナリファイル(2016/8/25追記)
GitHubに公開、後の記事で紹介。
補足
- コンパイラのバージョンは、多少違ってても大丈夫だが
Ver6.x
以上が必要。
コメント
記事のU-Boot(GitHubに公開されていたもの)をいろいろ使わせて頂きました。有難うございました。
さて、「Raspberry Pi Zero W/WH」へのu-boot適用(Zero WHで動作確認済み)のご報告です。Raspberry Pi1用のu-boot.binを作り直して、config.txtに「enable_uart=1」挿入で動作しました。
また、configsのフォルダにはrpi_0_w_defconfigも定義されてましたが、make rpi_0_w_defconfigで作成したu-boot.binでは動きませんでした。原因は不明です。
ーーー ビルド環境 —
2018年8月に、以下のようにして u-boot.bin(Zero W/WH用)を作成しました。
マシン:Ubunts 18.04 64ビット
U-Boot ソース:「git clone https://github.com/RobertCNelson/u-boot」で2018年7月末にget。
make: 以下の2種類を作成。ビルドは成功。
1) make rpi_defconfig
2) make rpi_0_w_defconfig
実際にZero WH で動かしてみましたが、2)で作成したu-boot.binでは動来ませんでした。
1)で作成したu-boot.binに、config.txtに「enable_uart=1」挿入で動作しました。
なお、2016年版(GitHubに公開)のPai1用のu-boot.binではenable_uart=1」挿入でもだめでした。
以上 ご報告まで。
高木
コメントありがとうございます。
「Raspberry Pi Zero W」は持ってないので、また機会があれば試してみようと思います。
きっと今までのuartは、Raspberry Pi3と同じようにブルートゥースとかに使われているのでしょうね。
ご報告ありがとうございました。