Skip to content

Instantly share code, notes, and snippets.

@ao-kenji
Last active April 25, 2021 11:46
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save ao-kenji/2df4952d1653df86c14072c93bfb7ceb to your computer and use it in GitHub Desktop.
Save ao-kenji/2df4952d1653df86c14072c93bfb7ceb to your computer and use it in GitHub Desktop.
OpenBSD/luna88kをGXemul上で動かすためのガイドです。

OpenBSD/luna88k on GXemul クイックガイド

Anders Gavare さん作のエミュレータ GXemul で OpenBSD/luna88k が動作し始めたので、とりあえず試してみたい方向けのガイドを記載します。

GXemulとは?

LUNA-88Kを含む様々なマシンのエミュレーションができるソフトです。

詳しくは本家Webページ http://gavare.se/gxemul/ を参照してください。

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
    aoyama@aurora.in.nk-home.net:/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 root@nono88k.my.domain ***
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)

GXemul

TIPS

キャラクタコンソールで 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)を用いたネットワーク設定を追加

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment