[VIM3] U-Boot のビルドと書き込み手順
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については以下のページに情報がまとめられていますので、この手順で進めます。
以下の手順で/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
Discussion