kraftsrv.net

QEMU 上での AArch64 版 NetBSD の環境構築

QEMU 上に AArch64 版 NetBSD の環境を構築する手順です。

事前準備

QEMU のインストール

QEMU のインストール』を参照して QEMU のインストールを行います。

SD カードイメージファイルの取得

本稿では 2021 年 5 月にリリースされた NetBSD 9.2 を使用します。
arm64.img.gz を取得します。
取得したファイルは gz 形式で圧縮されているため 7-Zip 等のツールを使用して解凍します。

UEFI イメージファイルの取得

本稿ではビルド済みイメージを使用します。
QEMU_EFI.fd を取得します。

作業用フォルダの作成

作業用フォルダを作成します。
本稿では『C:\netbsd』とします。
取得を行った SD カードイメージファイルならびに UEFI イメージファイルを作業用フォルダに配置します。

コマンドプロンプトの起動

コマンドプロンプトを起動して作業用フォルダに移動します。

> cd C:\netbsd

SD カードイメージファイルのサイズ拡張

SD カードイメージファイルのサイズを拡張します。
本稿ではサイズを 16G とします。

> "C:\Program Files\qemu\qemu-img.exe" resize -f raw arm64.img 16G

NetBSD の起動

仮想マシンの起動

SD カードイメージファイルを使用して仮想マシンを起動します。
本稿ではユーザモードネットワークを使用することとします。
また、仮想マシンへは TELNET 経由でのシリアル接続を行うこととします。

> "C:\Program Files\qemu\qemu-system-aarch64.exe" ^
    -M virt ^
    -cpu cortex-a53 ^
    -smp 4 ^
    -m 1g ^
    -bios QEMU_EFI.fd ^
    -drive if=none,file=arm64.img,format=raw,id=hd0 ^
    -device virtio-blk-device,drive=hd0 ^
    -device virtio-net-device,netdev=net0 ^
    -netdev type=user,id=net0 ^
    -nographic ^
    -serial telnet::20023,server,nowait

NetBSD への接続

TELNET 経由で NetBSD のシリアルコンソールへの接続を行います。
接続先は QEMU を実行しているホストの 20023/TCP となります。
以下は Tera Term を使用した場合の接続先設定例となります。

TELNET 接続画面

起動完了後、ターミナル画面に NetBSD のログインプロンプトが表示されます。

NetBSD/evbarm (arm64) (constty)

login:

ユーザ名『root』でログインします。
※パスワードの入力は不要です。
以下のプロンプトが表示されます。

arm64#

マシンアーキテクチャが『aarch64』であることを確認します。

arm64# uname -p
aarch64

ネットワーク情報の設定確認

ユーザモードネットワークで DHCP により設定されたネットワーク情報を確認します。

IP アドレス

仮想マシンへは『10.0.2.15/24』以降の IP アドレスが付与されます。
またネットワークインタフェース名は『vioif0』となります。

arm64# ifconfig -a
vioif0: flags=0x8843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> mtu 1500
        ec_capabilities=1<VLAN_MTU>
        ec_enabled=0
        address: 52:54:00:12:34:56
        inet6 fe80::bec:f488:e9de:c266%vioif0/64 flags 0x0 scopeid 0x1
        inet6 fec0::e437:8131:1d81:4138/64 flags 0x0
        inet 10.0.2.15/24 broadcast 10.0.2.255 flags 0x0
lo0: flags=0x8049<UP,LOOPBACK,RUNNING,MULTICAST> mtu 33624
        inet6 ::1/128 flags 0x20<NODAD>
        inet6 fe80::1%lo0/64 flags 0x0 scopeid 0x2
        inet 127.0.0.1/8 flags 0x0

ゲートウェイ

ゲートウェイの IP アドレスは『10.0.2.2』となります。

arm64# netstat -rn -f inet
Routing tables

Internet:
Destination        Gateway            Flags    Refs      Use    Mtu Interface
default            10.0.2.2           UGS         -        -      -  vioif0
10.0.2/24          link#1             UC          -        -      -  vioif0
10.0.2.15          link#1             UHl         -        -      -  lo0
127/8              127.0.0.1          UGRS        -        -  33624  lo0
127.0.0.1          lo0                UHl         -        -  33624  lo0
10.0.2.2           52:55:0a:00:02:02  UHL         -        -      -  vioif0
10.0.2.3           52:55:0a:00:02:03  UHL         -        -      -  vioif0

DNS サーバ

DNS サーバの IP アドレスは『10.0.2.3』となります。

arm64# cat /etc/resolv.conf
# Generated by resolvconf
nameserver 10.0.2.3

NetBSD の環境設定

システムの環境設定

Raspberry Pi 上での NetBSD 9.2 環境の構築』を参照して適宜環境設定を行います。