読者です 読者をやめる 読者になる 読者になる

Around the modern stone age.

近年はシリコン(石)の半導体から進化した便利なもので溢れる時代。そんな気になった事や試した事など徒然と記す。

スポンサーリンク

【Ubuntu 16.04 LTS Server】u-bootをコンパイルする

プログラミング Raspberry Pi u-boot Ubuntu

Raspberry Pi」用に、u-bootをUbuntu 16.04のLinux上でコンパイルする。ARMツールチェーンなどのコンパイル環境は、前回の記事でインストール済の環境を使う。

u-bootソース一式を取得

適当な作業フォルダーで、下記gitコマンドでGitHubから取得(本家サイトからでも可)

$ git clone https://github.com/RobertCNelson/u-boot

「Raspberry Pi」用をコンパイル

まずは、「Raspberry Pi 」用をコンパイル(ZeroでもOK)

$ cd u-boot
$ export CROSS_COMPILE=arm-none-eabi-
$ 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に公開、後の記事で紹介。

関連記事

参考

  1. Das U-Boot
  2. git.denx.de Git - u-boot.git/summary
  3. GitHub u-bootミラー
  4. Raspberry Pi 2 で PXE boot してみる
  5. U-bootによるネットワークブート
  6. KMC Staff Blog:KZM-A9-GTボードのU-Bootをソースからビルドする(更新)
  7. KMC Staff Blog:U-Bootのデバッグ
  8. 高機能なブートローダ U-BOOT (についてわかったこと)