🗂

[VIM3] U-Boot のビルドと書き込み手順

2022/10/04に公開

1. はじめに

VIM3のU-BootはVIMシリーズ (1/2/3) 向けの独自機能カスタマイズが入っている様子です。本記事では、このU-BootのVIM3向けのビルドおよびインストール手順についてまとめています。

作業環境はUbuntu 18.04 PCです。macOS環境でのビルドはおそらく無理だと思いますので (私は出来なかった)、Linux PC環境をお勧めします。

2. ツールチェーンのインストール

Ubuntu 18.04のGCC8環境でビルドしたしたところ、以下のエラーでビルドが出来なかったので、VIM3向けに用意されているToolchainを利用します。

../include/linux/compiler-gcc.h:114:1: fatal error: linux/compiler-gcc7.h: そのようなファイルやディレクトリはありません
#include gcc_header(__GNUC__)

Toolchainについては以下のページに情報がまとめられていますので、この手順で進めます。

https://docs.khadas.com/vim3/InstallToolchains.html

以下の手順で/opt/toolchains以下に必要なToolChainがインストールされます。VIM3 U-Bootのビルドでは、/opt/toolchains以下にツールが存在する前提でMakefileが作られているため、パスは問題なければこのままの方が良いです (※make時のCROSS_COMPILEオプションで上書き可能 ) 。

$ sudo apt-get install gcc-arm-none-eabi
$ wget https://releases.linaro.org/archive/13.11/components/toolchain/binaries/gcc-linaro-aarch64-none-elf-4.8-2013.11_linux.tar.bz2
$ wget https://developer.arm.com/-/media/Files/downloads/gnu-rm/6-2017q2/gcc-arm-none-eabi-6-2017-q2-update-linux.tar.bz2
$ sudo mkdir /opt/toolchains
$ sudo tar -xjf gcc-linaro-aarch64-none-elf-4.8-2013.11_linux.tar.bz2 -C /opt/toolchains
$ sudo tar -xjf gcc-arm-none-eabi-6-2017-q2-update-linux.tar.bz2 -C /opt/toolchains

lib32z1 のインストール

私の環境では、ビルド時にlib32z.so.1が見つからないエラーになってしまったので、lib32z1パッケージをインストールして対応しました。

$ sudo apt-get install lib32z1

ビルド

今回はリリースされている最新版 (タグがVims-Pie-V200320) を利用します。

まず、ソースコードを取得します。

$ git clone https://github.com/khadas/u-boot.git -b Vims-Pie-V200320
$ cd u-boot

次に、U-Bootをビルドします。

$ ./mk kvim3

ビルドが成功すると、./buildディレクトリ以下にu-boot.binファイルが生成されています。

参考までですが、良くある以下のようなU-Bootの手順でもビルドは出来ましたが、アップデートして正常動作させることが出来ませんでした。。

$ make kvim3_defconfig
$ make

U-Bootの書き込み

ビルド成果物のbuildディレクトリ以下のu-boot.binファイルをUSBメモリのルートにコピーし、VIM3ボードに接続します。

今回は、SPI Flash (16MB) にビルドしたU-Bootイメージを書き込み、SPI Flashブートで動作確認します。

USBデバイスをusb startコマンドでデバイスサーチします。

kvim3#usb start
(Re)start USB...
USB0:   USB3.0 XHCI init start
Register 3000140 NbrPorts 2
Starting the controller
USB XHCI 1.10
scanning bus 0 for devices... 3 USB Device(s) found
scanning usb for storage devices... init_part() 274: PART_TYPE_EFI
1 Storage Device(s) found

次に、ファイルをDDRメモリにロードします。

kvim3#load usb 0 1080000 u-boot.bin
reading u-boot.bin
1384816 bytes read in 63 ms (21 MiB/s)

その後、SPI Flashにデータを書き込みます。erase/writeには少し時間がかかります。

kvim3#sf probe
spifc_probe: reg=00000000ffd14000, mem_map=00000000f6000000
SF: Detected W25Q128FW with page size 256 Bytes, erase size 4 KiB, total 16 MiB
kvim3#sf erase 0 +$filesize
SF: 1441792 bytes @ 0x0 Erased: OK
kvim3#sf write 1080000 0 $filesize
SF: 1384816 bytes @ 0x0 Written: OK

参考情報ですが、SPI FlashではなくてeMMCに書き込みたい場合は、以下のコマンドを実行します。なお、この場合は後述のbootmodeはemmcのままにしておく必要があります。

kvim3#store rom_write 1080000 0 $filesize

最後に、ブートモードを初期状態のeMMCからSPI Flashに変更します。

kvim3#kbi bootmode r
bootmode: emmc
kvim3#kbi bootmode w spi

あとは電源OFF、ONすればSPI FlashからビルドしたU-Bootで起動するはずです。適当なprintfログを挿入するなどして、自分がビルドしたもので起動していることを確認してみましょう。

3. References

https://docs.khadas.com/vim3/BootFromSpiFlash.html

Discussion