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 を動かすには、何から手を付ければよいものやら。。。