😺
NuttX: ARM64 向けにビルドして QEMU で動かす
はじめに
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
menuconfig (必要ならば)
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. 参考文献
Discussion