dnl	$OpenBSD: prep,v 1.9 2007/06/18 14:50:34 ian Exp $
To be able to boot the OpenBSD/MACHINE installation program, you will
need to acquire some limited knowledge of RedBoot, the low-level
process that controls the microprocessor after hardware initialization.
dnl
dnl XXX bootable partitions
The enabled features between IOData HDL-G and Thecus N2100 vary so
different methods will be needed on both machines.

The Thecus N2100 needs a serial cable. There is either a 10-pin
header (with one pin removed) on the back of the disk circuit board,
or 9 holes for you to solder in your own header.  The ribbon cable
that connects from there to your serial cable or the serial port on
your computer is of the same type as used on older i386 PCs, but
be aware that there are two different types of 10-pin IDC to DB-9M
ribbon cable in use, which look identical (the differences are hidden
inside the DB-9 connector). The cable you need is wired using the 
"AT-Everex" or "Asus" pinout, as described here:
http://www.pccables.com/07120.htm
and not the more straightforward to solder "crossed" type:
http://www.pccables.com/07121.htm.
If you wish to check a cable, or make your own, the pinouts are:
DB9           IDC10
===           =====
1 2 3 4 5     1 3 5 7 9
 6 7 8 9      2 4 6 8 10

Wire pin 1 to 1, 2 to 2 etc, with 10 not connected.

On the Thecus N2100, it is necessary to move jumper J3 to J4 to properly
route the serial port interrupt to allow serial to work under OpenBSD.
This jumper is under the disk drives, so you may wish to ensure its 
correct setting while you are installing the disk(s).  For instructions 
on assembling/disassembling your N2100, see the N2100 Manual at
http://www.thecus.com/download/manual/N2100%20UM%20EN.pdf

Thecus cannot load a file from disk, but can load an image
from flash or network.
IOData can load an image from disk (ext2fs), however the commands
to load from flash are not available and network booting does not appear
to work.

Booting Thecus N2100 

When you have connected your computer, a command like "tip -115200 tty00"
(assuming you're using the first serial port on your machine) should 
connect you to the Thecus console.

Thecus RedBoot provides the 'fconfig' (not ifconfig) command to
change the boot configuration of the device. Also 'fis' is provided
to perform flash operations.

Due to a change made by Thecus to the firmware, fconfig does not
work with Thecus firmware version 1.93 (Feb 2007) and later, and
*it is thus not possible to make the Thecus auto-boot into OpenBSD*
(worse, it will let you enter the "script" commands below, but
ignore them on boot).

After some device probe information, you should see this prompt:

== Executing boot script in 3.000 seconds - enter ^C to abort

To enter interactive RedBoot, it is necessary to press ^C within a
second or so of the prompt, it will typically accept the ^C if typed 
during the diagnostics that precede this prompt.

The recommended way to install Thecus is to configure networking and
load bsd.rd from a tftp server or http server. First networking must be
configured using the fconfig or ip_address commands.

Update the IP address, netmask and server address with the commands
listed below to allow booting from the network. TFTP and HTTP are
supported. (BOOTP configuration _may_ not work)

Using ip_address only allows you to set the local IP address and
the IP address of the server where bsd.rd is located.  This command
also ensures that the new values will be used immediately.

eg:
---
RedBoot> ip_address -l 10.0.0.21 -h 10.0.0.7
IP: 10.0.0.21/255.255.255.0, Gateway: 0.0.0.0
Default server: 10.0.0.7, DNS server IP: 0.0.0.0

---

If you want to make permanent changes or you have to use 
a more complicated network setup where you have to use a
gateway or a nameserver, you have to use fconfig.

eg:
---
RedBoot> fconfig
Run script at boot: true
Boot script: 
.. fis load ramdisk
.. fis load kernel
.. exec
Enter script, terminate with empty line
>>
Boot script timeout (1000ms resolution): 1
Use BOOTP for network configuration: false
Gateway IP address: 10.0.0.1
Local IP address: 10.0.0.21
Local IP address mask: 255.255.255.0
Default server IP address: 10.0.0.7
Console baud rate: 115200
DNS server IP address: 10.0.0.1
GDB connection port: 9000
HW Status: 0
Force console for special debug messages: false
MAC address: [DO_NOT_MODIFY_MAC]
MAC address 2: [DO_NOT_MODIFY_MAC]
Network debug at boot time: false
Reset default: Normal
Serial number: N2100 V1.0.3
Update RedBoot non-volatile configuration - continue (y/n)? y
... Unlock from 0xf0fc0000-0xf0fc1000: .
... Erase from 0xf0fc0000-0xf0fc1000: .
... Program from 0x0ffd2000-0x0ffd3000 at 0xf0fc0000: .
... Lock from 0xf0fc0000-0xf0fc1000: .
---

Now that you have modified the configuration in the FLASH
memory, you have to reset the box so the new configuration
is going to be used upon boot.
We have also removed the boot script by not re-entering
it so you will be dropped to the RedBoot shell by default.

Recheck the new values and use the 'reset' command.

---

Now that you have your network configured it is possible to boot
either from http
RedBoot> load -m http /bsd.rd
or tftp (to a configured tftp server, and Default server configured)
RedBoot> load bsd.rd

after the ramdisk image is loaded, the 'go' command will start the kernel
eg:
---
RedBoot> load bsd.rd
Using default protocol (TFTP)
Entry point: 0x00200000, address range: 0x00200000-0x00652180
RedBoot> go

OpenBSD/armish booting ...
initarm: Configuring system ...
physmemory: 32768 pages at 0xa0000000 -> 0xa7ffffff
kernelsize text 1c7910 total 488728 end c0688728esym c0688728
physical_freestart a0689000 end a8000000
[ 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-2006 OpenBSD. All rights reserved.  http://www.OpenBSD.org

OpenBSD 4.0 (RAMDISK) #34: Thu Aug 31 00:30:56 GMT 2006
    deraadt@armish.openbsd.org:/usr/src/sys/arch/armish/compile/RAMDISK
...
---

It is then possible to use bsd.rd to format and install the HD on the Thecus.

In addition to installation, it is useful to configure the Thecus to autoboot.
This can be done either by overwriting part of the thecus distribution rom
or by loading the bootloader from the network.

To overwrite the thecus rom and boot from the load device, it is necessary
to delete a 'rom file' and load the openbsd bootloader image there.  With
networking configured (as above) remove a region and load the 'boot' program.

Initially the machine will contain much like the following
---
RedBoot> fis list
Name              FLASH addr  Mem addr    Length      Entry point
RedBoot           0xF0000000  0xF0000000  0x00040000  0x00000000
RedBoot config    0xF0FC0000  0xF0FC0000  0x00001000  0x00000000
FIS directory     0xF0FE0000  0xF0FE0000  0x00020000  0x00000000
ramdisk           0xF0040000  0x00800000  0x00D00000  0x00800000
kernel            0xF0D40000  0x00200000  0x00160000  0x00200000
user              0xF0EA0000  0xF0EA0000  0x00120000  0x00200000
---

There is no free space in the rom for the 'boot' program, so something must
be removed. WARNING, this will likely make the machine unbootable into
the original thecus server mode and it may not be recoverable.
EXTREME WARNING, do not touch the RedBoot, RedBoot config, or FIS directory
regions, doing so may brick the device.

Remove (with confirmation) a region to make space, eg user
---
RedBoot> fis delete user
Delete image 'user' - continue (y/n)? y
... Erase from 0xf0ea0000-0xf0fc0000: .........
... Unlock from 0xf0fe0000-0xf1000000: .
... Erase from 0xf0fe0000-0xf1000000: .
... Program from 0x07fdf000-0x07fff000 at 0xf0fe0000: .
... Lock from 0xf0fe0000-0xf1000000: .
---

Load the armish openbsd bootloader 'boot' via tftp or http

---
RedBoot> load -m http /boot
Entry point: 0x00100000, address range: 0x00100000-0x001067e0
---

save that loaded file to flash

---
RedBoot> fis create boot
... Erase from 0xf0ea0000-0xf0ec0000: .
... Program from 0x00100000-0x001067e0 at 0xf0ea0000: .
... Unlock from 0xf0fe0000-0xf1000000: .
... Erase from 0xf0fe0000-0xf1000000: .
... Program from 0x07fdf000-0x07fff000 at 0xf0fe0000: .
... Lock from 0xf0fe0000-0xf1000000: .
---

confirm its addition

---
RedBoot> fis list
Name              FLASH addr  Mem addr    Length      Entry point
RedBoot           0xF0000000  0xF0000000  0x00040000  0x00000000
RedBoot config    0xF0FC0000  0xF0FC0000  0x00001000  0x00000000
FIS directory     0xF0FE0000  0xF0FE0000  0x00020000  0x00000000
ramdisk           0xF0040000  0x00800000  0x00D00000  0x00800000
kernel            0xF0D40000  0x00200000  0x00160000  0x00200000
boot              0xF0EA0000  0x00100000  0x00020000  0x00100000
---

Now that the bootloader is in place, update fconfig to autoboot OpenBSD
----
RedBoot> fconfig
Run script at boot: true
Boot script:
.. fis load ramdisk
.. fis load kernel
.. exec
Enter script, terminate with empty line
>> fis load boot
>> go
>>
Boot script timeout (1000ms resolution): 1
...
Update RedBoot non-volatile configuration - continue (y/n)? y
... Unlock from 0xf0fc0000-0xf0fc1000: .
... Erase from 0xf0fc0000-0xf0fc1000: .
... Program from 0x0ffd2000-0x0ffd3000 at 0xf0fc0000: .
... Lock from 0xf0fc0000-0xf0fc1000: .
----

The important part is that 'Run script' is true and that the commands are
"fis load boot' and 'go' (note that 'boot' is the same as the 'fis create boot'
confirm the update and 'reset' to auto boot. The bootloader is
command driven with timeout like many other OpenBSD architectures.


How to boot/install IOData HDL-G:

The hda1 partition is the boot partition for linux, it contains
zImage and initrd. Since RedBoot only can boot from the ext2fs partition
it is very important that this partition be present and not be reformatted.
If this partition is destroyed, it will be necessary to remove the HD and
recreate the partition on another machine. Note: RedBoot should be able
to boot from the network, however that has been unsuccessful on IODATA HDL-G
so far.

To install OpenBSD, boot linux, and copy 'boot' and 'bsd.rd' into the
partition mounted on /dev/hda1, after that has been done, it is possible
to reboot into OpenBSD and install the device. Installation can proceede
as on other machines, however care must be take to not remove wd0i/hda1
partition (fdisk partition 0). DO NOT chose the 'full disk installation'
option.

Unfortunately, since IODATA did not provide the 'fconfig' command it
is not possible to change the boot commands run when redboot launches,
So it not possible to autoboot. Eventually 'boot' may be built such
that it can be loaded as 'zImage', but not now. To disable autobooting
into linux, zImage and initrd can be renamed or removed. The presence of 
bsd.rd will allow manipulation of that parition.

To load the ramdisk kernel to install use the commands

---
RedBoot> load -m disk hda1:/bsd.rd
RedBoot> go
---

to boot normally, load the bootloader which will give options to boot other
kernels.

---
RedBoot> load -m disk hda1:/boot
RedBoot> go
---
