明日にはでっかい太陽が昇るかもしれません。

「覚悟」とは!! 暗闇の荒野に!!進むべき道を切り開く事だッ!

Das U-Boot on Qemu (aarch64) を動かしてみる

U-Boot を aarch64 emulated by Qemu な環境で動作させることができるか試してみる。

Qemu のビルド

まずは、 Qemu をビルドしてみる。

### とりあえず、現状最新の v2.10.1 で試してみる。
$ git clone git://git.qemu.org/qemu.git
$ cd qemu
$ git checkout -b v2.10.1-release refs/tags/v2.10.1
$ git submodule update --init

### arm と aarch64 を有効にする。
### あと、 raspberry pi にあわせてオーディオは alsa にしておく。 (無指定の場合は oss になるため)
$ ./configure --prefix=`pwd`/build --target-list=arm-softmmu,aarch64-softmmu --audio-drv-list=alsa
$ make
$ make install

U-Boot のビルド

つづいて、 U-Boot のビルドを行う。

U-Boot はターゲット上で動作するため、 aarch64 向けにビルドする必要がある。

手っ取り早く、 Linaro のツールチェインを入れる。

### クロスコンパイラをダウンロードする。
$ curl -L https://releases.linaro.org/components/toolchain/binaries/latest-5/aarch64-linux-gnu/gcc-linaro-5.4.1-2017.05-x86_64_aarch64-linux-gnu.tar.xz | tar xJ

### runtime & sysroot をダウンロードする。 (必要?)
$ curl -L https://releases.linaro.org/components/toolchain/binaries/latest-5/aarch64-linux-gnu/runtime-gcc-linaro-5.4.1-2017.05-aarch64-linux-gnu.tar.xz | tar xJ
$ curl -L https://releases.linaro.org/components/toolchain/binaries/latest-5/aarch64-linux-gnu/sysroot-glibc-linaro-2.21-2017.05-aarch64-linux-gnu.tar.xz | tar xJ

### クロスコンパイラへのパスを通しておく。
$ export PATH=`pwd`/gcc-linaro-5.4.1-2017.05-x86_64_aarch64-linux-gnu/bin:$PATH
### こちらは、諸事情で v2016.09 を使用する。
$ git clone git://git.denx.de/u-boot.git
$ cd u-boot
$ git checkout -b v2016.09 refs/tags/v2016.09

### とりあえず aarch64 を利用している raspberry pi3 で試す。
$ make ARCH=arm CROSS_COMPILE=aarch64-linux-gnu- rpi_3_defconfig
$ make ARCH=arm CROSS_COMPILE=aarch64-linux-gnu-

だめでした

まともに起動はしないにしても、何かしらのログは出てくれるかなーと思ったけど、沈黙しかそこにはありませんでした。。

### raspi2 をベースに cortex-a53 を cpu に指定して動かす。 (ちなみに u-boot.bin も同様に動かなかった。)
$ qemu/build/bin/qemu-system-aarch64 -M raspi2 -cpu cortex-a53 -nographic -kernel u-boot/u-boot

32bit 版は起動はする

同じ raspberry pi3 向けの u-boot でも、 32bit 版はログは出た。

### u-boot のビルド。
$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- rpi_3_32b_defconfig
$ make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf-
$ file u-boot
u-boot: ELF 32-bit LSB  shared object, ARM, EABI5 version 1 (SYSV), dynamically linked (uses shared libs), not stripped
### qemu のオプションは同じ。
$ qemu/build/bin/qemu-system-aarch64 -M raspi2 -cpu cortex-a53 -nographic -kernel u-boot/u-boot


U-Boot 2016.09-dirty (Oct 05 2017 - 00:58:21 +0900)

DRAM:  960 MiB
RPI 2 Model B (0xa21041)
MMC:   ### ここでフリーズ

Qemu で aarch64 な U-Boot を動かすには、何から手を付ければよいものやら。。。