【Ubuntu 18.04/16.04 LTS】Raspberry Pi用のu-bootをコンパイルする

スポンサーリンク
728×90 ビッグバナー

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

以前の記事で、「Ubuntu 18.04 LTS Server」をインストールした。 そこで、ARM用のGCCコンパイラをインストールして使...
以前の記事で、Windows10のWSLで「Ubuntu 18.04」が使えるようにした。そこで、ARM用のGCCコンパイラをインストールし...
Macでの、ARM用のGNUクロスコンパイル環境を構築する。 そこで「GNU ARM Embedded Toolchain」のツールチェーン...
  • 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に公開、後の記事で紹介。

参照記事で報告の、Raspbery Pi Zero〜3用のコンパイル済みu-bootのバイナリファイルをGitHubに公開(下記URL) ...

補足

  • コンパイラのバージョンは、多少違ってても大丈夫だが Ver6.x 以上が必要。

参照記事

ソフトウェアのビルドに欠かせないmakeですが、便利な反面機能も豊富。 私が読んだ中でお薦めなのが、オライリー「GNU Make 第3版」の...

参考

  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 (についてわかったこと)
スポンサーリンク
レシポンシブ広告
レシポンシブ広告

シェアする

フォローする

コメント

  1.  高木 利公 より:

    記事の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」挿入でもだめでした。

    以上 ご報告まで。
     高木

    • yoko より:

      コメントありがとうございます。
      「Raspberry Pi Zero W」は持ってないので、また機会があれば試してみようと思います。
      きっと今までのuartは、Raspberry Pi3と同じようにブルートゥースとかに使われているのでしょうね。
      ご報告ありがとうございました。