Anders Gavare さん作のエミュレータ GXemul で OpenBSD/luna88k が動作し始めたので、とりあえず試してみたい方向けのガイドを記載します。
LUNA-88Kを含む様々なマシンのエミュレーションができるソフトです。
詳しくは本家Webページ http://gavare.se/gxemul/ を参照してください。
GXemul-0.7.0以降でLUNA-88Kのエミュレーションに対応しています。
ダウンロードページ http://gavare.se/gxemul/download.html から最新版をダウンロードして展開し、 gxemul-X.Y.Zフォルダに移動して、./configure を実行し Makefile を生成します。
make して実行バイナリ gxemul ができていることを確認します。
% tar zxf gxemul-0.7.0.tar.gz
% cd gxemul-0.7.0
% ./configure
:
% make
:
% ls -l ./gxemul
-rwxr-xr-x 1 aoyama staff 7209528 Apr 23 21:00 ./gxemul
%
各種エミュレータで試しやすいように、OpenBSD/luna88k が動作している実機の HDD から抜き出したイメージを用意しました。
http://www.nk-home.net/~aoyama/liveimage/ から liveimage-luna88k-raw-YYYYMMDD.img.gz をダウンロードし、gzip -d で展開して liveimage-luna88k-raw-YYYYMMDD.img を用意します。
GXemul では最初に起動するバイナリを指定します。OpenBSD/luna88k実機ではROMモニタからブートローダを起動しますが、ここでは手っ取り早くカーネルを直接起動することにします。(ブートローダ経由で起動することもできます)
先ほどの http://www.nk-home.net/~aoyama/liveimage/ から bsd (および必要により bsd.mp, bsd.rd) をダウンロードしてください。
なお、bsd は通常(単一プロセッサ設定)カーネル、bsd.mp はマルチプロセッサ対応カーネル、bsd.rd は RAM disk が一緒になっているインストール/レスキュー用カーネルです。
ディスクイメージファイルやカーネルファイルを引数で指定して実行します。
(キャラクタコンソールで実行)
gxemul -e luna-88k -d [ディスクイメージファイル] [カーネル]
(グラフィックコンソールで実行)
gxemul -Xe luna-88k -d [ディスクイメージファイル] [カーネル]
キャラクタコンソールの実行例
% gxemul -e luna-88k -d liveimage-luna88k-raw-20210416.img bsd
GXemul 0.7.0 Copyright (C) 2003-2021 Anders Gavare
Read the source code and/or documentation for other Copyright messages.
net:
simulated network:
10.0.0.0/8 (max outgoing: TCP=100, UDP=100)
gateway+nameserver: 10.0.0.254 (60:50:40:30:20:10)
nameserver uses real nameserver 192.168.7.2
machine:
model: LUNA 88K
cpu: 88100 (Big-endian)
memory: 64 MB
diskimage: ./liveimage-luna88k-raw-20210416.img
SCSI DISK id 6, read/write, 2064 MB (4227552 512-byte blocks)
file: loading ./bsd
cpu0: starting at 0x00081004 <__start>
-------------------------------------------------------------------------------
[ memory READ: from non-existant paddr=0xfff05000 len=4 pc=0x002bc20c <m8820x_setup_board_config+0x7c> ]
CPU0 is associated to 2 MC88200 CMMUs
[ no symbol table formats found ]
Copyright (c) 1982, 1986, 1989, 1991, 1993
The Regents of the University of California. All rights reserved.
Copyright (c) 1995-2021 OpenBSD. All rights reserved. https://www.OpenBSD.org
OpenBSD 6.9 (GENERIC) #2: Sat Apr 10 03:34:42 JST 2021
[email protected]:/usr/src/sys/arch/luna88k/compile/GENERIC
real mem = 67108864 (64MB)
avail mem = 61509632 (58MB)
warning: no entropy supplied by boot loader
random: boothowto does not indicate good seed
mainbus0 at root: OMRON LUNA-88K, 25MHz
cpu0: M88100 rev 0x3, 2 CMMU
cpu0: M88200 (16K) rev 0x9, full Icache
cpu0: M88200 (16K) rev 0x9, full Dcache
clock0 at mainbus0: MK48T02
lcd0 at mainbus0
le0 at mainbus0: address 00:00:0a:10:20:30
le0: 32 receive buffers, 8 transmit buffers
sio0 at mainbus0: 7201a
siotty0 at sio0 channel 0 (console)
ws0 at sio0 channel 1
wskbd0 at ws0 mux 1
wsmouse0 at ws0 mux 0
xp0 at mainbus0: HD647180X I/O processor
fb at mainbus0 not configured
spc0 at mainbus0
scsibus0 at spc0: 8 targets, initiator 7
probe(spc0:0:0): Check Condition (error 0) on opcode 0x0
probe(spc0:1:0): Check Condition (error 0) on opcode 0x0
probe(spc0:2:0): Check Condition (error 0) on opcode 0x0
probe(spc0:3:0): Check Condition (error 0) on opcode 0x0
probe(spc0:4:0): Check Condition (error 0) on opcode 0x0
probe(spc0:5:0): Check Condition (error 0) on opcode 0x0
[ disk scsi: WARNING: INQUIRY with cmd[1]=0x01 not yet implemented ]
sd0 at scsibus0 targ 6 lun 0: <GXemul, liveimage-luna8, 0>
sd0: 2064MB, 512 bytes/sector, 4227552 sectors
[ disk scsi: MODE_SENSE for page 8 is not yet implemented! ]
[ disk scsi: WARNING: INQUIRY with cmd[1]=0x01 not yet implemented ]
/dev/ksyms: Symbol table not valid.
vscsi0 at root
scsibus1 at vscsi0: 256 targets
softraid0 at root
scsibus2 at softraid0: 256 targets
boot device: sd0
root on sd0a (b6c665cb08e00437.a) swap on sd0b dump on sd0b
Automatic boot in progress: starting file system checks.
/dev/sd0a (b6c665cb08e00437.a): file system is clean; not checking
pf enabled
starting network
starting early daemons: syslogd pflogd ntpd[ le tx: buflen = 4096 ]
.
starting RPC daemons:.
kvm_mkdb: can't open /dev/ksyms
savecore: no core dump
checking quotas: done.
clearing /tmp
kern.securelevel: 0 -> 1
creating runtime link editor directory cache.
preserving editor files.
starting network daemons: smtpd.
starting local daemons: cron.
Fri Apr 23 21:33:12 JST 2021
OpenBSD/luna88k (nono88k.my.domain) (console)
login: root
Last login: Fri Apr 23 21:18:02 on console
OpenBSD 6.9 (GENERIC) #2: Sat Apr 10 03:34:42 JST 2021
Welcome to OpenBSD: The proactively secure Unix-like operating system.
Please use the sendbug(1) utility to report bugs in the system.
Before reporting a bug, please try to reproduce it with the latest
version of the code. With bug reports, please try to ensure that
enough information to reproduce the problem is enclosed, and if a
known fix for it exists, include that as well.
You have new mail.
nono88k# uname -a
OpenBSD nono88k.my.domain 6.9 GENERIC#2 luna88k
nono88k# file /bin/ls
/bin/ls: ELF 32-bit MSB executable, Motorola 88000, version 1
nono88k# ps auxww
USER PID %CPU %MEM VSZ RSS TT STAT STARTED TIME COMMAND
_pflogd 26568 1.0 1.0 996 664 ?? Sp 9:32PM 0:00.95 pflogd: [running] -s 160 -i pflog0 -f /var/log/pflog (pflogd)
root 1 0.0 0.8 652 548 ?? I 9:32PM 0:01.10 /sbin/init
root 15781 0.0 0.9 984 620 ?? Ip 9:32PM 0:00.11 /sbin/slaacd
_slaacd 56030 0.0 1.2 1000 800 ?? Ip 9:32PM 0:00.04 slaacd: frontend (slaacd)
_slaacd 49487 0.0 1.2 984 792 ?? Ip 9:32PM 0:00.16 slaacd: engine (slaacd)
root 33336 0.0 2.9 732 1904 ?? IpU 9:32PM 0:00.26 syslogd: [priv] (syslogd)
_syslogd 50013 0.0 1.9 1084 1272 ?? Ip 9:32PM 0:00.13 /usr/sbin/syslogd
root 66865 0.0 1.0 960 656 ?? IU 9:32PM 0:00.04 pflogd: [priv] (pflogd)
_ntp 8584 0.0 3.4 1100 2212 ?? I<p 9:32PM 0:00.26 ntpd: ntp engine (ntpd)
_ntp 4938 0.0 3.3 1044 2152 ?? Ip 9:32PM 0:00.74 ntpd: dns engine (ntpd)
root 71294 0.0 0.7 972 452 ?? I<pU 9:32PM 0:00.03 /usr/sbin/ntpd
root 4676 0.0 2.9 1700 1892 ?? Ip 9:33PM 0:00.44 /usr/sbin/smtpd
_smtpd 11794 0.0 4.6 1472 3000 ?? Ip 9:33PM 0:00.37 smtpd: crypto (smtpd)
_smtpd 97016 0.0 4.9 1676 3204 ?? Ip 9:33PM 0:00.39 smtpd: control (smtpd)
_smtpd 42537 0.0 4.7 1536 3084 ?? Ip 9:33PM 0:00.35 smtpd: lookup (smtpd)
_smtpd 48656 0.0 5.4 1936 3532 ?? Ip 9:33PM 0:00.51 smtpd: dispatcher (smtpd)
_smtpq 13148 0.0 4.9 1640 3180 ?? Ip 9:33PM 0:00.41 smtpd: queue (smtpd)
_smtpd 53380 0.0 4.6 1472 3036 ?? Ip 9:33PM 0:00.36 smtpd: scheduler (smtpd)
root 15663 0.0 2.0 864 1296 ?? Sp 9:33PM 0:00.07 /usr/sbin/cron
root 33089 0.0 1.2 880 772 a Sp 9:33PM 0:00.53 -ksh (ksh)
root 32715 0.0 0.8 660 532 a R+pU 9:34PM 0:00.10 ps -auxww
nono88k# ls -l /
total 33030
-rw-r--r-- 1 root wheel 578 Apr 9 20:41 .cshrc
-rw-r--r-- 1 root wheel 468 Apr 9 20:41 .profile
drwxr-xr-x 2 root wheel 512 Apr 9 20:40 altroot
drwxr-xr-x 2 root wheel 1024 Apr 9 21:34 bin
-rw-r--r-- 1 root wheel 58348 Apr 16 01:36 boot
-rw------- 2 root wheel 3748510 Apr 15 21:53 bsd
-rw------- 2 root wheel 3748510 Apr 15 21:53 bsd.booted
-rw------- 1 root wheel 4281709 Apr 16 21:30 bsd.mp
-rw------- 1 root wheel 3995630 Apr 15 21:54 bsd.rd
drwxr-xr-x 3 root wheel 10752 Apr 23 21:32 dev
drwxr-xr-x 23 root wheel 1536 Apr 23 21:32 etc
drwxr-xr-x 2 root wheel 512 Apr 9 20:40 home
drwxr-xr-x 2 root wheel 512 Apr 9 20:40 mnt
drwx------ 3 root wheel 512 Apr 18 09:56 root
drwxr-xr-x 2 root wheel 1536 Apr 9 21:47 sbin
lrwxrwx--- 1 root wheel 11 Apr 9 20:44 sys -> usr/src/sys
drwxrwxrwt 5 root wheel 512 Apr 23 21:33 tmp
drwxr-xr-x 16 root wheel 512 Apr 16 01:36 usr
drwxr-xr-x 23 root wheel 512 Apr 12 19:41 var
nono88k# objdump -d /bin/ls | head
/bin/ls: file format elf32-m88k
Disassembly of section .init:
00001174 <.init>:
1174: 67 ff 00 10 subu r31,r31,0x10
1178: 24 3f 00 00 st r1,r31,0
117c: c8 00 00 95 bsr 0x13d0
1180: 14 3f 00 00 ld r1,r31,0
nono88k# shutdown -h now
Shutdown NOW!
shutdown: [pid 7773]
*** FINAL System shutdown message from [email protected] ***
System going down IMMEDIATELY
nono88k#
System shutdown time has arrived
syncing disks... done
halted
<-- ここで Ctrl-C するとGXemulのデバッガに落ちる
GXemul> quit <-- quit [RET] で終了する
%
グラフィックコンソールの実行例(マルチプロセッサカーネル)
% gxemul -e luna-88k -X -n 4 -d liveimage-luna88k-raw-20210416.img bsd.mp <-- -Xでグラフィック使用、-n でCPU数指定(1~4)
キャラクタコンソールで Ctrl-C
すると GXemul のデバッガに落ちます。
ゲストOSに Ctrl-C
を送る場合は、代わりに Ctrl-B
とします。
意図せずデバッガに落ちてしまった場合は、c [RET]
(デバッガのcontinueコマンドの省略)で戻ってください。
NetBSD、OpenBSDなどtap(4)に対応しているホストOSでは、ゲストOSとなるOpenBSD/luna88kからホストOS経由で外部ネットワークに接続することができます。 以下、OpenBSD/amd64をホストOSとしたときの例で説明します。
ホストOS側でbridge(4)を作成し、ホストの物理ネットワークインタフェースとtap(4)インタフェースを追加します。
host# ifconfig bridge0 create
host# ifconfig bridge0 add bge0 <-- bge0はホストOSの物理ネットワークインタフェース
host# ifconfig bridge0 add tap0
host# ifconfig bridge0 up
次に gxemul を起動するときにコマンドラインオプション -L
でtapデバイスを指定します。
gxemul -e luna-88k -L /dev/tap0 -d [ディスクイメージファイル] [カーネル]
OpenBSD/luna88kが起動したら、le(4)に対してホストOSと同一サブネットのIPアドレスを設定すれば、ホストOSのbridge(4)を経由して外部と通信できます。
nono88k# ifconfig le0 inet 192.168.7.88 netmask 255.255.255.0
nono88k# add route default 192.168.7.1 <-- ホストOSのゲートウェイ設定と同じ
nono88k# vi /etc/resolv.conf <-- ホストOSと同じDNS設定をする
nono88k# ping www.yahoo.co.jp
PING edge12.g.yimg.jp (182.22.28.252): 56 data bytes
64 bytes from 182.22.28.252: icmp_seq=0 ttl=2 time=0.000 ms
64 bytes from 182.22.28.252: icmp_seq=1 ttl=2 time=0.000 ms
64 bytes from 182.22.28.252: icmp_seq=2 ttl=2 time=0.000 ms
^C
--- edge12.g.yimg.jp ping statistics ---
3 packets transmitted, 3 packets received, 0.0% packet loss
round-trip min/avg/max/std-dev = 0.000/0.000/0.000/0.000 ms
nono88k#
Kenji Aoyama / 青山 健治 / Twitter: @ao_kenji
ABSOLUTELY NO WARRANTY
2021/04/17 GXemul-trunkで初版作成
2021/04/23 GXemul-0.7.0に更新
2021/04/25 tap(4)を用いたネットワーク設定を追加