2017/01/22

Windows 上で Raspberry Pi 3 Model B+ 64 bit の U-Boot イメージをビルド

Windows 上で Raspberry Pi 3 Model B+ の U-Boot イメージをビルドする手順を書いていく。

ただし、 U-Boot イメージのビルドには Bash on Ubuntu on Windows を使用する。

前提条件

U-Boot の準備

ネットワークブートに必要な U-Boot のビルドと設定を行う。 MSYS2 上でのビルドに成功しないので、この作業は Bash on Ubuntu on Windows 上で行う。 このセクションの作業はすべて Bash on Ubuntu on Windows 上で行う。

必要パッケージのインストール

sudo apt install git gcc-aarch64-linux-gnu device-tree-compiler

U-Boot の取得とビルド

mkdir ~/project
cd ~/project
git clone git://git.denx.de/u-boot.git
cd ~/project/u-boot
export CROSS_COMPILE=aarch64-linux-gnu-
make rpi_3_defconfig
make all

ブートスクリプトの作成

Raspberry Pi 起動時に、 TFTP サーバーへ接続してイメージのロードと実行を行うスクリプトを作成する。

boot.txt を、下記の通り作成する。

dhcp 0x80000 192.168.2.100:kernel8.img
go 0x80000

boot.txt を、 boot.scr に変換する。

/PATH/TO/u-boot/tools/mkimage -A arm -O linux -T script -C none -a 0 -e 0 -n "PXE Boot" -d boot.txt ./boot.scr

ここで作成した boot.scr を、 U-Boot 起動時に読み込ませることで、 TFTP サーバー 192.168.2.100kernel8.img をイメージとして取得・ロードしてくれるようになる。

ネットワーク設定

ノート PC の無線 LAN を WAN に、有線を Raspberry Pi 3 に接続する。 そのままだと、有線が優先されるせいか WAN に出れないので、有線 LAN アダプタの設定を行う。

  1. 「タスクトレイのネットワークアイコンを右クリック -> ネットワーク共有センターを開く」選択
  2. 「アダプターの設定の変更」を選択
  3. 「イーサネットを右クリック -> プロパティ」を選択
  4. 「インターネットプロトコル バージョン 4(TCP/IPv4)」をダブルクリック
  5. 「次の IP アドレスを使う」を選択
  6. 下記通りに設定
    • IP アドレス : 192.168.2.100
    • サブネットマスク : 255.255.255.0
    • デフォルトゲートウェイ : 192.168.2.1
    • 他は空欄のままでよい

SD カードの準備

  1. ビルドした成果物の u-boot.bin を SD カードのルートにコピーする
  2. 下記ページのファイルをすべて SD カードのルートにコピーする。
  3. boot.scr を SD カードのルートにコピーする
  4. config.txt を書き換える

config.txt の書き換え後の内容

enable_uart=1
arm_control=0x200
kernel=u-boot.bin

TFTPD の準備

TFTPD の取得

下記ページから tftpd64 standard edition (zip) をダウンロードする。

TFTPD の設定

ダウンロード・展開してできた tftpd64.exe を起動し、 Setting ボタンを押下。

グローバル設定画面で、 TFTP Server と DHCP Server を使用するように設定。

TFTPD 設定画面でいろいろ設定する。

  • Base Directory
    • TFTP で公開するディレクトリのルート( kernel8.img を置く。今回は C:\\Users\\mikoto\\project\\raspberrypi_bare_metal\\ftproot を設定)
  • 下記チェックボックスにチェック
    • Option negotiation
    • Show Progress bar
    • Translate Unix file names
    • Bind TFTP to this address
      • 192.168.2.100 (自分が Listen する IP アドレスを入力)

DHCPD 設定画面でもいろいろ設定する。

  • この辺直感で設定したので根拠なし。誰かツッコミあればお願いしますって感じで。

OK ボタンを押下。

これで、TFTP のファイルを公開すると同時に、 PC と Raspberry Pi を繋げたときに、 Raspberry Pi に対して IP を設定してくれるようになる。

物理的な準備

  1. SD カードを Raspberry Pi に挿入
  2. PC と Raspberry Pi を LAN ケーブルで繋げる
  3. PC と Raspberry Pi を UART ケーブルでつなげる

ファイルの準備

実行したいプログラム( kernel8.img ) を TFTP のルートディレクトリにコピー

実行

Raspberry Pi の電源を入れる

Raspberry Pi を再起動するたび、 TFTP のルートディレクトリに格納した kernel8.img が実行されるようになっている。

感想

  • U-Boot, 積極的に使っていきたい。
  • とりあえず目的は達成できたので満足。
  • U-Boot のビルドに Ubuntu を使ったのが悔しくて仕方ない。

参考文献

以上。