Installing NetBSD 1.2 on the SIMH MicroVAX II

From Computer History Wiki
Jump to: navigation, search

Installation of NetBSD 1.2 on the MicroVAX II is a little shaky... Also I found that the miniroot from 1.3 is far more stable, and doesn't page on itself...!!

To keep things simple I'm going to stick with the examples...

ini file

set cpu 32M
set cpu idle
set idle OLDVMS
att tq0 netbsd12.tap
set tq1 dis
set tq2 dis
set tq3 dis
set rq0 rd54
att rq0 rd54.rq0
set rq1 rd54
att rq1 rd54.rq1
set rq2 dis
set rq3 dis
set cr dis
set ry dis
att ts dis
set rl dis
set lpt dis
set xq dis
set dz lines=8
set tti 7b
set tto 7b
boot cpu

building the tape

Honestly, it's just easier to download this stuff from sourceforge...

Or for those inclined, here is how I built the 1.2 install tape... Note that this doesn't included the 'usable' 1.2 kernel....

#!/usr/local/bin/perl -w
use strict;

# Based on mkdisttap.pl
# ftp://ftp.mrynet.com/pub/os/PUPS/PDP-11/Boot_Images/2.11_on_Simh/211bsd/mkdist
tap.pl

#
# $Id: mkdisttap.pl,v 1.1 2006/09/16 23:33:46 kirk Exp kirk $
#

# Based on the example in the HOWTO using dd.  Does not work!
# add_file("cat mtboot mtboot boot |", 512);

# Based on the maketape.c program and the maketape.data data file.
add_file("tk50-file1-12", 512);
end_file();
add_file("tk50-file2-13A", 512);
end_file();
add_file("base.tar", 10240);
end_file();
add_file("etc.tar", 10240);
end_file();
add_file("man.tar", 10240);
end_file();
add_file("games.tar", 10240);
end_file();
add_file("comp.tar", 10240);
end_file();
add_file("misc.tar", 10240);
end_file();
add_file("text.tar", 10240);
end_file();
end_file();

sub end_file {
  print "\x00\x00\x00\x00";
}

sub add_file {
  my($filename, $blocksize) = @_;
  my($block, $bytes_read, $length);

  open(FILE, $filename) || die("Can't open $filename: $!");
  while($bytes_read = read(FILE, $block, $blocksize)) {
    if($bytes_read < $blocksize) {
      $block .= "\x00" x ($blocksize - $bytes_read);
      $bytes_read = $blocksize;
    }
    $length = pack("V", $bytes_read);
    print $length, $block, $length;
  }
  close(FILE);
}

Preparing the hard disk

the instructions need us to know the geometry of a disk, and all of it's parameters.. So for me it's a tad daunting, but they do give an RD54 as an example. Here is the disktab entry:

rd54|RD54|DEC RD54 on Microvax:\
        :ty=winchester:ns#17:nt#15:nc#1225:\
        :dt=MSCP:\
        :pa#15884:oa#0:ba#8192:fa#1024:\
        :pb#33440:ob#15884:bb#8192:fb#1024:tb=swap:\
        :pc#311200:oc#0:bc#8192:fc#1024:\
        :pd#15884:od#49324:bd#4096:fd#512:\
        :pe#55936:oe#65208:be#8192:fe#1024:\
        :pf#190485:of#121144:bf#8192:ff#1024:\
        :pg#261876:og#49324:bg#8192:fg#1024:\
        :b0=rdboot:

With this knowledge we can start the disk label.

running edisklabel

VAX simulator V3.8-1
Loading boot code from ka655x.bin

←[c
KA655-B V5.3, VMB 2.7
Performing normal system tests.
40..39..38..37..36..35..34..33..32..31..30..29..28..27..26..25..
24..23..22..21..20..19..18..17..16..15..14..13..12..11..10..09..
08..07..06..05..04..03..
Tests completed.
>>>b/3 mua0
(BOOT/R5:3 MUA0



  2..
-MUA0
  1..0..


howto 0x3, bdev 0x12, booting...
10556+552+33996 start 0x0

Nboot
: edlabel
12524+676+42280 start 0x0
With this program you can modify everything in the on-disk
disklabel. To do something useful you must know the exact
geometry of your disk, and have ideas about how you want
your partitions to be placed on disk. Some hints:
The a partition should be at least ~20000 blocks, the
b (swap) is depending on your use of the machine but it
should almost never be less than ~32000 blocks.

Disk geometry for most DEC disks can be found in the disktab
file, and disknames is listed in the installation notes.

Remember that disk names is given as disk(adapt, ctrl, disk, part)
when using the installation tools.

Label which disk? ra(0,0,0,0)
getdisklabel: no disk label
ra(0,0,0,0): no disk label
(E)dit, (S)how, (D)efaults, (W)rite, (Q)uit) : e

First set disk type. Valid types are:
0  unknown
1  SMD
2  MSCP
3  old DEC
4  SCSI
5  ESDI
6  ST506
7  HP-IB
8  HP-FL
9  type 9
10  floppy
11  ccd
12  vnd

Numeric disk type? [0] 2
Disk name? [] rd54
badsectoring? [n]
ecc? [n]
removable? [n]
Interleave? [0] 1
rpm? [0] 3600
trackskew? [0]
cylinderskew? [0]
headswitch? [0]
track-to-track? [0]
drivedata 0? [0]
drivedata 1? [0]
drivedata 2? [0]
drivedata 3? [0]
drivedata 4? [0]

bytes/sector? [0] 512
sectors/track? [0] 17
tracks/cylinder? [0] 15
sectors/cylinder? [0] 255
cylinders? [0] 1221
a partition: offset? [0]
             size? [0] 20000
b partition: offset? [0] 20000
             size? [0] 20000
c partition: offset? [0]
             size? [0] 311200
d partition: offset? [0]
             size? [0]
e partition: offset? [0] 40000
             size? [0] 271200
f partition: offset? [0]
             size? [0]
g partition: offset? [0]
             size? [0]
h partition: offset? [0]
             size? [0]
(E)dit, (S)how, (D)efaults, (W)rite, (Q)uit) : s


disk type 2 (MSCP),  rd54:
interleave 1, rpm 3600, trackskew 0, cylinderskew 0
headswitch 0, track-to-track 0, drivedata: 0 0 0 0 0

bytes/sector: 512
sectors/track: 17
tracks/cylinder: 15
sectors/cylinder: 255
cylinders: 1221

8 partitions:
     size   offset
a:   20000,    0
b:   20000,    20000
c:   311200,    0
d:   0,    0
e:   271200,    40000
f:   0,    0
g:   0,    0
h:   0,    0

(E)dit, (S)how, (D)efaults, (W)rite, (Q)uit) : w

This program does not (yet) write bootblocks, only disklabel.
Remember to write the bootblocks from the miniroot later with the
command "disklabel -B <diskname>".

(E)dit, (S)how, (D)efaults, (W)rite, (Q)uit) : q
Label which disk? q
q: no disk label
(E)dit, (S)how, (D)efaults, (W)rite, (Q)uit) : q
Label which disk?
Simulation stopped, PC: 00103083 (BEQL 10307C)
sim> q
Goodbye

Now you either label ra1 the same way, or just exit SIMH (CTRL+E) and copy rd54.rq0 to rd54.rq1

Running copy

Now because these kernels seem to want to page in the worst way possible, we copy the miniroot to the SECOND disk, so when we boot up, it'll page on the first disk, leaving our miniroot intact, and allowing us to install.

Loading boot code from ka655x.bin

←[c
KA655-B V5.3, VMB 2.7
Performing normal system tests.
40..39..38..37..36..35..34..33..32..31..30..29..28..27..26..25..
24..23..22..21..20..19..18..17..16..15..14..13..12..11..10..09..
08..07..06..05..04..03..
Tests completed.
>>>b/3 mua0
(BOOT/R5:3 MUA0



  2..
-MUA0
  1..0..


howto 0x3, bdev 0x12, booting...
10556+552+33996 start 0x0

Nboot
: copy
11248+564+33948 start 0x0

copy:
This program will read miniroot from tape/floppy/disk
and install this miniroot onto disk.


Specify the device to read from as xx(N,?), where
xx is the device-name, ? is file/partition number
and N is the unit-number, e.g.
"tms(0,1)" for the first TMSCP-tape (TK50),
"ra(2,0)" for the third MSCP-disk/floppy (RX33/RX50)

device to read from ? tms(0,1)

Specify number of blocks to transfer. Usually this is
sizeof(miniroot) / 512.
It's safe to transfer more blocks than just the miniroot.

number of blocks ? 4096

If your miniroot is split into volumes, then you must
specify the number of blocks per volume.
(e.g. 800 blocks per RX50, 2400 blocks per RX33)

number of blocks per volume ? [4096]

Make sure unit tms(0,1) is online and holds the proper volume.
Then type 'g' to Go or 'a' to Abort.

OK to go on ? [g/a] g
Reading ... Reading of miniroot done. (4096 blocks read)


Now specify the device to write miniroot to as xx(N,1)
where xx is the drive type and N is the drive number.
For example: ra(0,1) refers to MSCP drive #0, b partition

Root disk ? : ra(1,1)
Initializing partition ... done.
(4096 blocks written.)

Halt the machine and reboot from distribution media,
giving second partition as part to mount as root. Ex:
: ra(0,1) for ra disk 0, hp(2,1) for massbuss disk 2

Halt/Reboot the machine NOW.

Infinite loop, PC: 00100613 (BRB 100613)
sim> q
Goodbye

booting the miniroot

KA655X-B V5.3, VMB 2.7
Performing normal system tests.
40..39..38..37..36..35..34..33..32..31..30..29..28..27..26..25..
24..23..22..21..20..19..18..17..16..15..14..13..12..11..10..09..
08..07..06..05..04..03..
Tests completed.
>>>b/3 mua0
(BOOT/R5:3 MUA0



  2..
-MUA0
  1..0..


howto 0x3, bdev 0x12, booting...
10556+552+33996 start 0x0

Nboot
: ra(1,1)netbsd
700416+38912+75784 start 0x9c078
Copyright (c) 1996, 1997 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 1.3 (GENERIC) #1: Fri Jan 16 16:09:22 CET 1998
    ragge@multivac:/usr/hej/src/sys/arch/vax/compile/GENERIC

realmem = 134184960
avail mem = 114998272
Using 6552 buffers containing 6709248 bytes of memory.
backplane0 (root)
cpu0 at backplane0: MicroVAX 3800/3900
cpu0: CVAX microcode rev 6 Firmware rev 83
uba0 at backplane0: Q22
mtc0 at uba0 csr 174500 vec 774 ipl 15
mscpbus0 at mtc0: version 5 model 3
mscpbus0: DMA burst size set to 4
mt0 at mscpbus0 drive 0: TK50
uda0 at uba0 csr 172150 vec 770 ipl 15
mscpbus1 at uda0: version 3 model 3
mscpbus1: DMA burst size set to 4
ra0 at mscpbus1 drive 0: RD54
ra1 at mscpbus1 drive 1: RD54
qe0 at uba0 csr 174440 vec 764 ipl 15
qe0: delqa, hardware address 08:00:2b:aa:bb:cc
dz0 at uba0 csr 160100 vec 304 ipl 15
boot device: <unknown>
root device: ra1b
dump device (default ra1b): ra0b
file system (default generic):
root on ra1b dumps on ra0b
ra0: size 0 sectors
ra1: size 0 sectors
Clock has gained 305 days - CHECK AND RESET THE DATE.
root file system type: ffs
Enter pathname of shell or RETURN for sh:
erase ^?, werase ^H, kill ^U, intr ^C

Now when NetBSD is booted you're on your own.
Remember to write bootblocks and to make devices
in dev in your new root filesystem before booting.
Also remember to copy /gennetbsd and /boot to the
new root; it's not there by default.

Good luck!

#

Notice the root/swap combo... And we are using the NetBSD 1.3 kernel for this as the 1.2 shipping kernel is.. an ALPHA that crashes hard for me :(

single user mode steps

disklabel -B /dev/ra0
newfs /dev/ra0a
newfs /dev/ra0e
mount /dev/ra0a /mnt
sync
mkdir /mnt/usr
mount /dev/ra0e /mnt/usr
sync
cd /mnt
sync
mt -f /dev/nrmt0 rew
mt -f /dev/nrmt0 fsf 2
tar -xvmf /dev/nrmt0
sync
mt -f /dev/nrmt0 fsf
tar -xvmf /dev/nrmt0
sync
cd /mnt/dev
./MAKEDEV ra0
sync
./MAKEDEV std
sync
cat > /mnt/etc/fstab
/dev/ra0a       /               ffs     rw 1 1
/dev/ra0e       /usr            ffs     rw 1 2
/dev/ra0b       none            swap    sw 0 0



And now we should switch tapes to the kernel tape, and extract a GENERIC 1.2 kernel that I've built from source... I don't know why, but the kernel that is supplied with the NetBSD 1.2 distribution didn't work for me on the disk, not to mention it doesn't prompt for the root/swap combination so on install it overwrites itself.... Grrr.

So we just hit control+e and change tapes..

Simulation stopped, PC: 800A4DC0 (BEQL 800A4DB9)
sim> show tq0
TQ0, attached to netbsd12.tap, write enabled, SIMH format
sim> att tq0 kernel.tap
sim> c
cd /mnt
# mt -f /dev/nrmt0 rew
# tar -xvmf /dev/nrmt0
netbsd

Full boot #1

VAX simulator V3.8-1
Loading boot code from ka655x.bin

←[c
KA655-B V5.3, VMB 2.7
Performing normal system tests.
40..39..38..37..36..35..34..33..32..31..30..29..28..27..26..25..
24..23..22..21..20..19..18..17..16..15..14..13..12..11..10..09..
08..07..06..05..04..03..
Tests completed.
>>>b/3 dua0
(BOOT/R5:3 DUA0



  2..
-DUA0
  1..0..


howto 0x3, bdev 0x11, booting...done. (11108+33996)

Nboot
: ra(0,0)netbsd
621568+32768+85720 start 0x8b454
[ netbsd symbol table not valid ]
Copyright (c) 1982, 1986, 1989, 1991, 1993
        The Regents of the University of California.  All rights reserved.

NetBSD 1.2 (GENERIC) #1: Tue Nov 17 15:05:43 PST 1998
    root@myname.my.domain:/usr/src/sys/arch/vax/compile/GENERIC

realmem = 33521664
avail mem = 27902976
Using 1636 buffers containing 1675264 bytes of memory.
backplane0 (root)
cpu0 at backplane0sbi0 at backplane0: Q22
uba0 at sbi0 tr0
uda0 at uba0 csr 172150 vec 774, ipl 15
uda0: version 3 model 3
uda0: DMA burst size set to 4
ra0 at uda0 slave 0: rd54, size = 311200 sectors
ra1 at uda0 slave 1: rd54, size = 311200 sectors
zs0: timeout waiting for TS_SSR
zs0: timeout waiting for TS_SSR
zs0: timeout waiting for TS_SSR
zs0: timeout waiting for TS_SSR
zs0: timeout waiting for TS_SSR
zs0: timeout waiting for TS_SSR
tmscp0 at uba0 csr 174500 vec 760, ipl 15
tms0 at tmscp0 slave 0
dz0 at uba0 csr 160100 vec 304 ipl 15
root device? ra0a
♦WARNING: Clock has gained 24 days - CHECK AND RESET THE DATE.
Enter pathname of shell or RETURN for sh:
# setting tty flags
starting network
add host myname.my.domain: gateway localhost
starting rpc daemons: portmap.
starting system logger, time daemontimed: no network usable
.
checking for core dump...
savecore: no core dump
checking quotas: done.
building databases...
chmod: /dev/tty[pqrs]*: No such file or directory
clearing /tmp
standard daemons: update cron.
starting network daemons: routed printer inetd.
creating runtime link editor directory cache.
starting local daemons:.
Thu Dec 24 01:52:52 PST 1998
Dec 24 01:52:52 myname init: kernel security level changed from 0 to 1

NetBSD/vax (myname.my.domain) (console)

login:

It works...

post boot steps

I like to fix up the tape drive, and add the pty devices...

myname# cd /dev
myname# ./MAKEDEV tms0
myname# ./MAKEDEV pty0
myname#
myname# mt rew
mt: /dev/rst0: No such file or directory
myname# ln -s /dev/nrmt0 rst0
myname# mt rew
myname# rm rmt0
myname# ln -s /dev/nrmt0 rmt0

configure the network for slirp versions...

amnesiac# cat /etc/hostname.qe0
inet 10.0.2.15 255.255.255.0 10.0.2.255
amnesiac# cat /etc/mygate
10.0.2.2
amnesiac# cat /etc/resolv.conf
nameserver 4.2.2.4
amnesiac#

why not use that ra1 for extra storage?

/dev/ra0a       /               ffs     rw 1 1
/dev/ra0e       /usr            ffs     rw 1 2
/dev/ra1e	/usr/local	ffs	rw 1 3
/dev/ra0b       none            swap    sw 0 0


fix the /etc/ttys so that we can logon remotely..

#       $NetBSD: ttys,v 1.1 1995/08/25 21:25:14 ragge Exp $
#
#       @(#)ttys        5.2 (Berkeley) 6/10/93
#
# name  getty                           type    status          comments
#
# If the console is marked insecure, single-user requires
# the root password.
console "/usr/libexec/getty std.9600"   unknown on secure

# Hardwired lines are marked off, by default, so getty(8)
# is quiet when they don't exist.
tty00   "/usr/libexec/getty std.9600"   unknown off secure
tty01   "/usr/libexec/getty std.9600"   unknown off secure
tty02   "/usr/libexec/getty std.9600"   unknown off secure
tty03   "/usr/libexec/getty std.9600"   unknown off secure
tty04   "/usr/libexec/getty std.9600"   unknown off secure
tty05   "/usr/libexec/getty std.9600"   unknown off secure
tty06   "/usr/libexec/getty std.9600"   unknown off secure
tty07   "/usr/libexec/getty std.9600"   unknown off secure

ttyp0   none                    network secure
ttyp1   none                    network secure
ttyp2   none                    network secure
ttyp3   none                    network secure
ttyp4   none                    network secure
ttyp5   none                    network secure
ttyp6   none                    network secure
ttyp7   none                    network secure
ttyp8   none                    network secure
ttyp9   none                    network secure
ttypa   none                    network secure
ttypb   none                    network secure
ttypc   none                    network secure
ttypd   none                    network secure
ttype   none                    network secure
ttypf   none                    network secure
ttyq0   none                    network secure
ttyq1   none                    network secure
ttyq2   none                    network secure
ttyq3   none                    network secure
ttyq4   none                    network secure
ttyq5   none                    network secure
ttyq6   none                    network secure
ttyq7   none                    network secure
ttyq8   none                    network secure
ttyq9   none                    network secure
ttyqa   none                    network secure
ttyqb   none                    network secure
ttyqc   none                    network secure
ttyqd   none                    network secure
ttyqe   none                    network secure
ttyqf   none                    network secure