kraftsrv.net

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

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

事前準備

QEMU のインストール

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

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

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

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

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

作業用フォルダの作成

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

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

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

> cd C:\freebsd

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

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

> "C:\Program Files\qemu\qemu-img.exe" resize -f raw FreeBSD-13.0-RELEASE-arm64-aarch64-RPI.img 16G

FreeBSD の起動

仮想マシンの起動

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

> "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=FreeBSD-13.0-RELEASE-arm64-aarch64-RPI.img,format=raw,id=hd0 ^
    -device virtio-blk-device,drive=hd0 ^
    -device virtio-net-device,netdev=net0 ^
    -netdev type=user,id=net0,hostfwd=tcp::10022-:22 ^
    -nographic

起動完了後、コマンドプロンプト画面に FreeBSD のログインプロンプトが表示されます。

FreeBSD/arm64 (generic) (ttyu0)

login:

FreeBSD への接続

FreeBSD に SSH 接続でログインします。
接続先は QEMU を実行しているホストの 10022/TCP となります。
以下は Tera Term を使用した場合の接続先設定例となります。

SSH 接続画面

ユーザ名『freebsd』、パスワード『freebsd』でログイン後、ターミナル画面に以下のプロンプトが表示されます。
Tera Term を使用してログインする場合は SSH 認証画面にて『キーボードインタラクティブ認証を使う』にチェックを入れます。

freebsd@generic:~ %

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

freebsd@generic:~ % uname -p
aarch64

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

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

IP アドレス

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

freebsd@generic:~ % ifconfig -a
vtnet0: flags=8863<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST> metric 0 mtu 1500
        options=80028<VLAN_MTU,JUMBO_MTU,LINKSTATE>
        ether 52:54:00:12:34:56
        inet 10.0.2.15 netmask 0xffffff00 broadcast 10.0.2.255
        media: Ethernet autoselect (10Gbase-T <full-duplex>)
        status: active
        nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL>
lo0: flags=8049<UP,LOOPBACK,RUNNING,MULTICAST> metric 0 mtu 16384
        options=680003<RXCSUM,TXCSUM,LINKSTATE,RXCSUM_IPV6,TXCSUM_IPV6>
        inet6 ::1 prefixlen 128
        inet6 fe80::1%lo0 prefixlen 64 scopeid 0x2
        inet 127.0.0.1 netmask 0xff000000
        groups: lo
        nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL>

ゲートウェイ

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

freebsd@generic:~ % netstat -rn4
Routing tables

Internet:
Destination        Gateway            Flags     Netif Expire
default            10.0.2.2           UGS      vtnet0
10.0.2.0/24        link#1             U        vtnet0
10.0.2.15          link#1             UHS         lo0
127.0.0.1          link#2             UH          lo0

DNS サーバ

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

freebsd@generic:~ % cat /etc/resolv.conf
# Generated by resolvconf
nameserver 10.0.2.3

FreeBSD の環境設定

システムの環境設定

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