これは、NetBSD Advent Calendar 2020の13日目の記事です。
はじめに
NetBSD/alpha on qemu-system-alphaというport-alphaメーリングリスト
への投稿を見て以来、qemuでNetBSD/alphaを動かしてみたいと思っていました。
Jason Thorpeさんありがとうございます。
furandon_pigさんの10日目の記事にもAnitaでもqemuで動くalphaの表示がされていました。
Anitaを使えば簡単なのだと思うのですが、手作業でqemu-system-alphaでNetBSD/alpha-currentをセットアップしてみました。
qemuは、pkgsrc/emulators/qemu-5.1.0nb10を使います。
インストール方法
インストール用のメモリーディスクを内蔵したカーネルを起動することで、sysinst(8)でインストールすることにします。
以下のように実行することで、インストール可能です。
base.tgzなどは、http経由でnycdn.NetBSD.orgからフェッチして利用することにします。
$ qemu-img create -f qcow2 netbsd-10.qcow2 3G # 3GBのqcow2ディスクイメージを作成します。
$ ftp http://nycdn.netbsd.org/pub/NetBSD-daily/HEAD/202012121510Z/alpha/installation/instkernel/netbsd.gz # インストール用カーネルを取得します。
$ unzip netbsd.gz
$ qemu-system-alpha -kernel netbsd -hda netbsd-10.qcow2
これにより、qemuのuser networkが利用されます。ネットワークインターフェイスはwm0になります。
後は、普通にsysinst(8)でwd0に割り当てられたハードディスクイメージにインストールします。
私が引っ掛かったのは以下の2点でした。
-
dhcpcd(8)でにIPアドレスをwm(4)に割り当てるのが自動的にはされませんでした。シェルに移行して、
dhcpcd wm0
を
事前に実行しておく必要がありました。
-
そもそもインストール用カーネルがあるのに気付きていませんでした(上の手順には反映済みです)。
インストール後の起動方法
インストール後にqemuを起動させる際に、ルートファイルシステムを指定しておく必要がありました。
以下のように起動するのが良いでしょう。
$ ftp http://nycdn.netbsd.org/pub/NetBSD-daily/HEAD/202012121510Z/alpha/binary/kernel/netbsd-GENERIC.gz
$ gunzip netbsd-GENERIC.gz
$ qemu-system-alpha -kernel netbsd-GENERIC -hda netbsd-10.qcow2 -append 'root=wd0a'
最後にdmesgを掲載しておきます。
consinit: not using prom console
Copyright (c) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005,
2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017,
2018, 2019, 2020 The NetBSD Foundation, Inc. All rights reserved.
Copyright (c) 1982, 1986, 1989, 1991, 1993
The Regents of the University of California. All rights reserved.
NetBSD 9.99.77 (GENERIC) #0: Sat Dec 12 15:06:11 UTC 2020
mkrepro@mkrepro.NetBSD.org:/usr/src/sys/arch/alpha/compile/GENERIC
6600 family, unknown model variation 0x1400, 250MHz, s/n QEMU
8192 byte page size, 1 processor.
total memory = 128 MB
(120 KB reserved for PROM, 127 MB used by NetBSD)
avail memory = 113 MB
entropy: no seed from bootloader
timecounter: Timecounters tick every 0.976 msec
Kernelized RAIDframe activated
mainbus0 (root)
cpu0 at mainbus0: ID 0 (primary), 21264A-0 (EV67)
cpu0: Architecture extensions: 0x1307<PMI,PAT,MVI,CIX,FIX,BWX>
qemu0 at mainbus0: Qemu virtual machine services
timecounter: Timecounter "Qemu" frequency 1000000000 Hz quality 3000
tsc0 at mainbus0: 21272 Core Logic Chipset, Cchip rev 0
tsc0: 2 Dchips, 1 memory bus of 16 bytes
tsc0: arrays present: 0MB, 0MB, 0MB, 0MB, Dchip 0 rev 0
tsp0 at tsc0
tsp0: window 0: 0/base 0/mask 0 reinitialized
tsp0: window 1: 0/base 0/mask 0 reinitialized
pci0 at tsp0 bus 0
pci0: i/o space, memory space enabled, rd/line, rd/mult, wr/inv ok
vga0 at pci0 dev 1 function 0: Cirrus Logic CL-GD5446 (rev. 0x00)
wsdisplay0 at vga0 kbdmux 1: console (80x25, vt100 emulation)
wsmux1: connecting to wsdisplay0
drm at vga0 not configured
wm0 at pci0 dev 2 function 0: Intel i82540EM 1000BASE-T Ethernet (rev. 0x03)
wm0: interrupting at dec 6600 irq 12
wm0: 32-bit 33MHz PCI bus
wm0: 64 words (6 address bits) MicroWire EEPROM
wm0: Ethernet address 52:54:00:12:34:56
wm0: 0x200402<LOCK_EECD,IOH_VALID,WOL>
makphy0 at wm0 phy 1: Marvell 88E1011 Gigabit PHY, rev. 0
makphy0: Failed to access EADR. Are you an emulator?
makphy0: 10baseT, 10baseT-FDX, 100baseTX, 100baseTX-FDX, auto
cmdide0 at pci0 dev 3 function 0: CMD Technology PCI0646 (rev. 0x07)
cmdide0: bus-master DMA support present
cmdide0: primary channel configured to native-PCI mode, channel non-independant
cmdide0: using dec 6600 irq 16 for native-PCI interrupt
atabus0 at cmdide0 channel 0
cmdide0: secondary channel configured to native-PCI mode, channel non-independant
cmdide0: secondary channel ignored (disabled)
sio0 at pci0 dev 7 function 0: Intel 82378ZB System I/O (rev. 0x03)
isa0 at sio0
com0 at isa0 port 0x3f8-0x3ff irq 4: ns16550a, 1-byte FIFO
com1 at isa0 port 0x2f8-0x2ff irq 3: ns16550a, 1-byte FIFO
pckbc0 at isa0 port 0x60-0x64
pckbd0 at pckbc0 (kbd slot)
pckbc0: using irq 1 for kbd slot
wskbd0 at pckbd0: console keyboard, using wsdisplay0
pms0 at pckbc0 (aux slot)
pckbc0: using irq 12 for aux slot
wsmouse0 at pms0 mux 0
attimer0 at isa0 port 0x40-0x43
fdc0 at isa0 port 0x3f0-0x3f7 irq 6 drq 2
mcclock0 at isa0 port 0x70-0x71: mc146818 compatible time-of-day clock
tsciic0 at tsc0
iic0 at tsciic0: I2C bus
entropy: WARNING: extracting entropy too early
Using the Qemu CPU alarm for 50 Hz hardclock.
timecounter: Timecounter "clockinterrupt" frequency 50 Hz quality 0
aes: BearSSL aes_ct
chacha: Portable C ChaCha
adiantum: self-test passed
aes_ccm: self-test passed
blake2s: self-test passed
fd0 at fdc0 drive 0: 1.44MB, 80 cyl, 2 head, 18 sec
fd1 at fdc0 drive 1: 1.44MB, 80 cyl, 2 head, 18 sec
wd0 at atabus0 drive 0
wd0: <QEMU HARDDISK>
wd0: drive supports 16-sector PIO transfers, LBA48 addressing
wd0: 3072 MB, 6241 cyl, 16 head, 63 sec, 512 bytes/sect x 6291456 sectors
wd0: 32-bit data port
wd0: drive supports PIO mode 4, DMA mode 2, Ultra-DMA mode 5 (Ultra/100)
wd0(cmdide0:0:0): using PIO mode 4, Ultra-DMA mode 2 (Ultra/33) (using DMA)
cgd: self-test aes-xts-256
cgd: self-test aes-xts-512
cgd: self-test aes-cbc-128
cgd: self-test aes-cbc-256
cgd: self-test 3des-cbc-192
cgd: self-test blowfish-cbc-448
cgd: self-test aes-cbc-128 (encblkno8)
cgd: self-tests passed
root on wd0a dumps on wd0b
root file system type: ffs
kern.module.path=/stand/alpha/9.99.77/modules
entropy: WARNING: consolidating less than full entropy