😺

NuttX: ARM64 向けにビルドして QEMU で動かす

2022/10/09に公開

はじめに

NuttX でサポートされている ARM64 ターゲット向けにビルドして QEMU で動かす方法をまとめています。

1. セットアップ

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

sudo apt install kconfig-frontends
$ wget https://developer.arm.com/-/media/Files/downloads/gnu/11.2-2022.02/binrel/gcc-arm-11.2-2022.02-x86_64-aarch64-none-elf.tar.xz
xz -d gcc-arm-11.2-2022.02-x86_64-aarch64-none-elf.tar.xz
$ sudo mkdir -p /opt/arm/linaro-toolchain
$ sudo tar xf gcc-arm-11.2-2022.02-x86_64-aarch64-none-elf.tar -C /opt/arm/linaro-toolchain
$ export PATH=$PATH:/opt/arm/linaro-toolchain/gcc-arm-11.2-2022.02-x86_64-aarch64-none-elf/bin

QEMUインストール

sudo apt install qemu-system-arm qemu-efi-aarch64 qemu-utils

ソースコードのクローン

git clone https://github.com/apache/incubator-nuttx.git nuttx
git clone https://github.com/apache/incubator-nuttx-apps.git apps
cd nuttx

2. ビルド

シングルコア

./tools/configure.sh -l qemu-armv8a:nsh
make

SMP (マルチコア)

./tools/configure.sh -l qemu-armv8a:nsh_smp
make
make menuconfig

CPUコアを変更

System Type -> Qemu Virt Chip Selection -> Qemu COre Configuration

GIC version

System Type -> GIC Version

別の仕向で再ビルドする場合

一度クリーンしておく

make distclean

(自分用のメモ)defconfigファイルを自動生成

普段利用するだけの人はこの作業は全くもって不要です。

/tools/refresh.sh --silent qemu-armv8a:nsh

3. 実行

qemu-system-aarch64 -cpu cortex-a53 -nographic \
     -machine virt,virtualization=on,gic-version=3 \
     -net none -chardev stdio,id=con,mux=on -serial chardev:con \
     -mon chardev=con,mode=readline -kernel ./nuttx
qemu-system-aarch64 -cpu cortex-a53 -smp 4 -nographic \
     -machine virt,virtualization=on,gic-version=3 \
     -net none -chardev stdio,id=con,mux=on -serial chardev:con \
     -mon chardev=con,mode=readline -kernel ./nuttx

GIC v2 を利用する場合

qemu-system-aarch64 -cpu cortex-a53 -smp 4 -nographic \
     -machine virt,virtualization=on,gic-version=2 \
     -net none -chardev stdio,id=con,mux=on -serial chardev:con \
     -mon chardev=con,mode=readline -kernel ./nuttx

4. 参考文献

https://github.com/apache/incubator-nuttx/tree/master/boards/arm64/qemu/qemu-a53

Discussion