Oberon Community Platform

Edit Page
Printable View


Install A2

Approximate Storage Requirements

SystemInstallation ArchiveInstallation Archive MiBInstalled System MiBDefault Residence
A2 (Native AOS)ISO CD7780Storage volume
A2 (Native AOS)Mini ISO CD780Storage volume
WinAOSZipped hierarchy40178(*)??
UnixAOSGzipped tar file44110/usr/aos
ETH OberonDiskette image1.538Storage volume

(*) including Vojager and Ants

For other hardware requirements refer to HardwareCompatibility. The requirement for SSE2 is mentioned under Processors. An installer for a pre-SSE2 system can be built by adapting instructions on the Builds page.

Download A2

The simplest way to install A2 is to download the ISO CD-ROM image, burn a CD-ROM and boot your machine from this CD-ROM.

The most recent version of A2 can be downloaded at http://www.bluebottle.ethz.ch/download.html. If you need an older version, download it at ftp://www.bluebottle.ethz.ch (User: ocp, Pwd: download).

Note: When using a browser, use the link ftp://ocp:download@www.bluebottle.ethz.ch

You can also find A2 ISO images (serial trace enabled to COM1 with 112 KBaud), which are created sporadically from the Subversion repository, in the file download area of a project at sourceforge with the name A2-Oberon: https://sourceforge.net/projects/a2oberon/files

Installation using the Graphical Installer

Starting with the release of 23.01.2008, a graphical installer is available. Just open it using the command WMInstaller.Open ~. The rest should be self-explaining.

Installation using AosInst.Tool script

Open the Oberon application and there open the file AosInst.Tool. Follow the steps described there.

Install UnixAos

See http://www.informatik.uni-bremen.de/~fld/UnixAos/Readme.txt. In short:

      chmod +x install.UnixAos
      install.UnixAos  {Solaris,Linux,Darwin}Aos.tgz
  • Create a directory in which you want to work with UnixAos (at an arbitrary place _outside_ the Aos installation directory).
    Execute as normal user:
      mkdir workdir
      cd workdir
  • Change into that directory and start UnixAos

Hardware & Device Drivers

In A2, device drivers are implemented as modules and can be dynamically loaded/unloaded. There are several options how device drivers can be installed:

  • Add a configuration string that loads the driver
  • Place an entry in the Autostart section of Configuration.XML that loads the driver
  • Load the driver when A2 is running

Legacy devices are distinguished from plug&play devices.

Legacy Devices

  • PS/2 mouse: MousePS2.Install
  • PS/2 keyboard: Keyboard.Install
  • Serial port mouse: MouseSerial.Install

Plug&Play Devices

Plug&Play devices provide an unique identification. It is therefore very simple to implement an function-to-driver mapping (what driver needs to be loaded for which device function). There is a driver database (DriverDatabase.XML) that specifies the command to load the corresponding device driver for a given device identification.

The simplest way you can install device drivers for your plug&play hardware is to call PCITools.DetectHardware ~. This will enumerate all PCI busses in your system and automatically load the device driver modules that are available. It also enables the driver database lookup service that is used by the USB system to automatically load the correct device drivers when you attach a USB device. To see that drivers have been loaded, just have a look at the Kernel Log.

If you want to see what PCI devices are present in your system, call PCITools.Scan ~. This command displays a human-readable list of all PCI devices in your system.

Note: If the driver database lookup service is enabled (call DriverDatabase.Enable ~ to enable it), this list also indicates for each device whether there is a A2 device driver available and - if there is - what commands you need to execute to make the device working.

A2 Start-up Sequencing


PhasePre-conditionControlling dataUser controlOn display
Cold start (power on) or warm start (reboot)
BIOS locates a
bootable volume,
loads the MBR
BIOS set up earlierCMOS data1 Press hot key to halt phase

2 Select volume (1)

BIOS boot menu (5)
Boot manager locates
a partition to start,
loads the PBR
Boot Manager installed earlier
Optional (4)
Volume and partition
number stored in
the boot manager
1 Force to halt phase (2a)

2 Select volume and partition (3)

Boot manager menu (5)
Boot loader
locates and loads
the boot image
a Boot loader OBL.Bin
placed at installation time

b Configuration data placed
at installation time
or user trimmed

c Boot image placed
at installation time:
IDE.Bin or USB.Bin
Configuration data

Boot image loaded

Config string:
Init= set video mode
and resolution
1 Force to halt phase (2b)

2 Edit configuration data:
> h<Enter> : help
> key=value<Enter> : set value
> key=<Enter> : delete
> w<Enter> : write trimmed data

3 c<Enter> : continue

O: PBR now active
B: PBR relocated
E: remaining blocks read
R: boot loader valid
ON: config table is not empty
loading: loading boot image

Boot loader menu (5)
Boot image/Kernel takes over control
Bottom layer:
Active object
run-time system
Present in all
system configurations
Middle layer:
Shared system services
file sub-systems,
boot console

Config strings:
1 BootVol1= to
.. BootVol9=
2 Boot=,
.. Boot1= to
.. Boot9=
3 BootSystem=,
.. BootSystem1= to
.. BootSystem9=

Top layer:
A2 applications
Configuration.XML as delivered in
the release or user trimmed
Configuration.XML Desktop
User takes over control

(1) The IPL devices appear in the order they will be selected for booting. A Boot First device is selected from the menu by using the up/down arrow keys to move the highlight bar to the desired device, and then pressing <Enter>. The key defined as <Hot-Key> is dependent upon the particular BIOS. In many cases it is the <Esc> key, sometimes <PF8> or none at all. The BIOS boot menu is indeed an option - see http://www.phoenix.com/NR/rdonlyres/56E38DE2-3E6F-4743-835F-B4A53726ABED/0/specsbbs101.pdf.

(2a) Press ScrollLock or hold down Ctrl, Alt or Shift key, either at the left or at the right of the keyboard, shortly after a cold or warm start before the MBR is executed. Applies only in the case of an installed Bluebottle boot manager.

(2b) Press ScrollLock or hold down Ctrl, Alt or Shift key, either at the left or at the right of the keyboard before the PBR is executed.

(3) The user may request to store the volume and partition number or forbid it. In the latter case, a halt is forced the next start-up, by lack of goal. Needed under VMWare.

(4) Any other boot manager can be used such as that of Windows, GRUB, LILO, etc. Also a simple MBR would do. The behaviour will of course be different. Refer to the documentation of these programs.

(5) Each of these menus appears only under the condition that the corresponding phase is halted by the operator. When a straightforward, uninterrupted start-up is allowed only a few BIOS messages will appear, followed by a swift appearance of "OBERON loading" and finally the desktop.

Detailed Description

In this section, we have a look at the startup procedure of A2. We assume that A2 is installed in a partition.


When turning on the PC, the Basic Input Output System (BIOS) still found in modern x86 PCs (except Macintosh) does some hardware initialization, configuration and tests and then tries to locate, load and execute a valid boot sector. For that purpose, the BIOS keeps a boot preferences list which essentially defines the order in which the BIOS scans devices for the presence of a valid boot sector (e.g. 1. CD-ROM, 2. H.D.D, 3. F.D.D ...). The boot sector is always the first sector of a device. It is considered valid if the last two bytes are 55AAH.

On partitioned disks, this boot sector is the so-called Master Boot Sector (MBR). Since A2 is typically installed on partitioned disks, we only consider this case here.

The following graphics illustrates the way this works.


  • The boot preference list can be altered using the BIOS setup software
  • Most BIOS implementations also offer a boot menu that is displayed when the user interrupts the startup process by pressing a designated key (typically ESC, F8, ...). The user can then select the device from which the machine should boot
  • What devices a machine can boot from is dependent on both the available hardware AND the BIOS implementation, i.e. having a machine that supports USB does not necessarily mean that the machine can boot from USB
  • A2 does not configure PCI devices itself but instead relies on the BIOS to do this job. In most BIOS setup implementations, there is a setting "Plug'n'Play OS". This should be set to "No". If set to "Yes", the BIOS will only initialize and configure devices that are required to boot. Other device will not work under A2 in this case.
No bootable disk in preference list"DISK BOOT FAILURE, INSERT SYSTEM DISK AND PRESS ENTER" error message on screena) Adapt boot preference list to include the device that should be booted from
b) Make sure that the device has a valid MBR
Machine does not boot from intended diskAnother operating system bootsAdapt boot preference so that intended disk appears before other bootable disks

Master Boot Record (MBR)

If we reach here, the BIOS passed control to the MBR.

The MBR contains two important things:

1. Code that is executed
2. Partition table
The code in the MBR will scan the partition table for the bootable partition (there can be at most one partition marked as active). If the active (=bootable) partition is found, the first sector of that partition is loaded (this is the so-called Partition Boot Record PBR). This sector must also have the boot sector signature (last two bytes 55AAH). If it has this signature, control is passed to the PBR.


  • The standard MBR code can only boot operating systems that reside in primary partitions
  • The standard MBR code is not operating system specific, i.e. you can use the Microsoft Windows MBR for starting an Oberon system or the Oberon MBR to start a Microsoft Windows system
  • Instead of the classical MBR described above, the boot sector may also contain a boot manager, i.e. an application that lets the user interactively choose which partition should be booted. Boot manager are typically able to boot operating systems directly from extended partitions.
No bootable partition"Missing Operating System" or similar error message on screena) Make the bootable partition active
No start code in boot sector or MBR"Operating System not found" or similar error message on screenA disk can have code in the boot sector (even in MBR) that only says that the disk or partition is not bootable. In this case, install the Oberon MBR or boot manager
No valid boot sector but 55AAH signatureUndefined system behaviour, maybe even resetInstall Oberon MBR or boot manager

Related Files:

  • OBEMBR4.Asm is the source code of the Oberon MBR
  • OBEMBR.Bin is the corresponding binary
  • BootManager.Asm is the source code of the Bluebottle Boot Manager
  • BootManager.Bin is the corresponding binary
  • BootManagerMBR.Bin is the part of the binary that is written to the first sector, BootManagerTail.Bin is the rest of the binary that will be written the following sectors

Related Commands:

  • Partitions.WriteMBR writes a MBR to a disk (leaving the partition table intact)
  • Partitions.WriteMBR does the same but under the Oberon application
  • WMPartitions.Open ~, then Bluebottle->WriteMBR does the same with a graphical user interface
  • BootManager.Split is the command to split BootManager.Bin into BootManagerMBR.Bin and BootManagerTail.Bin

Related Documentation:

Boot loader

The Oberon Boot Loader (OBL) is typically the PBR, i.e. the first sector in a partition. It's purpose is to do some minimal system initialization, load the boot image, switch to protected mode and then execute the boot image.

When the Oberon boot loader (OBL) starts, the letters of "OBERON loading ..." appear progressively to denote that some specific action has taken place. If OBL fails at some point, the machine halts and the letters or message displayed so far can be used to locate the problem, as is described here:

<nothing>No part of OBL has been loaded. OBL is not installed
OThe partition boot record is loaded and its execution started
OBThe partition boot record is relocated in memory
OBEThe rest of bootstrap loader (from sector with LBA 1 to 3) is loaded
OBERThe signature (AA55H as first two bytes in the second sector) was valid, the boot loader was authentified
OBERONConfig tableis not empty
OBERON loading...The boot table, containing configuration strings, was read correctly. Execution of machine code located in the second sector began. The kernel is being read. All is well, the desktop should appear soon

Beyond this point, A2 has good chances to start successfully, provided the installation was carried out correctly. Failure to start the system is reported by one of these error messages appears:


  • The boot loader is written to a partition when formatting it (Partitions.Format or WMPartitions.Open)
No boot image or wrong config string"OBER" message on screenMake sure you have installed a boot image (e.g. IDE.Bin) and set the config string correctly
Kernel was not loaded properly. The checksum accumulated in field sum is incorrect"Bad OBL.Bin" error message on screenReinstall OBL
Disk I/O operation error"I/O error!" error message on screenA very unlikely situation hinting at a hardware problem. Check your hardware!

Related Files:

  • OBL.Asm is the source code of the Oberon Boot Loader
  • OBL.Bin is the corresponding binary
  • OBL.Text is the Oberon Boot Loaer documentation

Related Commands:

  • Partitions.UpdateBootLoader updates the boot loader on an AosFS formatted partition
  • Partitions.UpdateBootLoader does the same under Oberon
  • WMPartitions.Open and then Bluebottle->UpdateBootLoader does the same with a graphical user interface

For more information about the Oberon boot loader, refer to BootLoader.Text (contained in release).

IMPORTANT: Up to this point, the A2 kernel is not in action. If you encounter problems, its not the A2 kernel causing them. Also, there are no A2 device driver loaded yet. All device accesses are performed using the BIOS.

Kernel Initialization

The boot image is basically a heap image containing all modules required to run Active Oberon programs (i.e. the Active Oberon runtime system), the modules required for disk access (since these modules cannot be loaded without having disk access) and the boot console, which will execute commands after the kernel is running (i.e. start the actual applications).

The module bodies of all modules contained in the boot image will be executed by the boot processor in the order they are linked into the boot image.

Example: IDE.Bin

    10AA28H Trace
    10DC08H Machine
    117F98H Heaps
    11B718H Modules
    11F398H Objects
    109B98H Kernel
    1299C8H KernelLog
    12ABF8H Streams
    124568H Traps
    139758H Plugins
    13AD38H Disks
    13CBF8H PCI
    1310B8H ATADisks
    141CF8H Caches
    148208H Commands
    143298H Files
    1401A8H DiskVolumes
    152028H Clock
    14B158H DiskFS
    157668H Loader
    1546B8H BootConsole
1Trace.ModNoThis is just the low-level debug interface
2Machine.ModYesThis is the machine interface. It is the first module that gets control after the boot loader has been loaded. It will...
a. Load the config string table into a data structure
b. Initialize the low-level trace output
c. Detect the amount of available system memory
d. Search MP tables
e. Allocate some memory for ISA DMA
f. Initialize the boot processor
g. Setup up the memory system (flat memory segments, create page table, enable MMU)
3Heaps.ModYesInitializes the heap
4Modules.ModNoInstalls some kernel procedures
5Objects.ModYesThis module contains the scheduler. It will...
a. Initialize and enable interrupts
b. Create a Init process the will execute the remaining module bodies
c. Start the scheduler, i.e. enable preemptive multitasking
6Kernel.ModYesThis module will start the other processors. At this point, the Active Oberon Runtime System is fully operational
7KernelLog.ModNoThis is the application interface for low-level trace output on kernel log
8Streams.ModNoThis is the application interface for byte streams
9Traps.ModNoThis module installs a trap handler and provides symbolic debugging.It also contains the PageFault handler (is actually part of the runtime system...)
10Plugins.ModNoThis module provides plugin object management. Most often, device drivers implement a subclass of Plugins.Plugin
11Disks.ModNoThis is the abstract block device interface
12PCI.ModNoThis is the PCI bus interface. In its body, its...
a. Detects the BIOS 32 Service Directory
b. Detects the PCI BIOS 32 Service
13ATADisks.ModYesThis is the ATA/ATAPI disk driver. It will scan the PCI bus for mass storage controllers. Here, a lot can go wrong...
14Caches.ModNoGeneric volume cache. Use by DiskVolumes.Mod
15Commands.ModNoApplication interface to start commands executed by an own active object
16Files.ModNoAbstract file / file system interface
17DiskVolumes.ModNoAosFS volume driver
18Clock.ModYesReal-time clock (RTC) driver. Started when module is loaded. No problems known here
19DiskFS.ModNoAosFS file system driver (together with Caches and DiskVolumes)
20Loader.ModNoModule loader. Needed to dynamically load modules. Cannot access modules that are not part of the boot image before this module is loaded
21BootConsole.ModNoThis is the boot console. It is always the last module linked into the boot image. Its body will mount the boot volume(s) and execute startup commands as described in the next section

Boot Console

The last module contained in the boot image that will be executed is the boot console. Its purpose is to

1. Mount the boot volume(s)
2. Execute startup commands

The boot console uses the config string mechanism to fullfil its tasks.

Mount the Boot Volumes

As a first step, the volumes are mounted. The config strings BootVol#1, BootVol#2, ... BootVol#9 are lookup up in this order.


 BootVol#1=AOS AosFS IDE0#1

 "AOS" is the prefix of the volume (aka drive name)
 "AosFS" is the file system identifier
 "IDE0#1" means partition 1 on device IDE0

For the file system identifier, the boot console needs a config string that defines how the file system is mounted. This config string must have the same key as the file system identifier name.


 AosFS="DiskVolumes.New DiskFS.NewFS"

For this example, the boot console would first create the volume by executing DiskVolumes.New (with IDE0#1 as parameter) and then execute DiskFS.NewFS with the just created volume object as parameter.

Execute startup commands

The boot command will first execute the commands defined by the keys Boot, Boot1, Boot2, ..., Boot9 in this order. The command execution is blocking (unless specified to be unblocking).



This would execute the commands Demo.Start1, Demo.Start2 and Demo.Start3 in this order.

After that, the boot console will execute the commands defined by the keys BootSystem, BootSystem1, ..., BootSystem9 in this order. The command execution is non-blocking.

Typical Boot Console Startup Commands

DisplayLinear.InstallDisplay driver
MousePS2.InstallPS/2 mouse driver
Keyboard.InstallPS/2 keyboard driver
PCITools.DetectHardwareLoad device drivers for PCI and USB devices
WindowManager.InstallStart window manager
Autostart.RunExecute autostart commands defined in Autostart section of Configuration.XML

Related Documentation:

Autostart Section in Configuration.XML

Typically, the last command executed by the boot console is Autostart.Run. This will execute all command entries in the Autostart section of Configuration.XML.

Typical commands are:

StartMenu.OpenShow the start menu
WMRestorable.Load Auto.dskRestore the windows and its positions stored using SaveDesktop
SkinEngine.Load skinname.skinLoad the specified skin
HotKeys.OpenInstall keyboard hotkeys defined in HotKeys.XML
PCITools.DetectHardwareLoad device drivers for all PCI and USB devices
WMTrapWriter.InstallInstall window trap writer so that a window is popup-ed in case of a trap

Related Documentation:


A2 does not boot, what now?

If the boot process stops before the string "OBERON loading" is displayed on the screen, there is a problem with the Oberon Boot Loader (OBL). In this case, read the detailed description of the A2 startup sequence.

Note: At this point, the A2 kernel has not yet been loaded.

If the string "OBERON loading" appeared, this means that the boot loader (OBL.Bin) could locate, load and relocate the boot image (e.g. IDE.Bin). In this case, just continue read this text downwards.

Note: It may be a good idea to have a look at the Hardware Compatibility List to see whether there are some known issues for your hardware.

Check Configuration Strings

If "OBERON loading" appeas on the screen, it is a good idea to check the configuration strings before starting to debug the startup sequence. To do so, enable SCROLLLOCK (or hold down SHIFT) to get into the OBL menu.

The minimum configuration you should have set is:

 BootVol1 = AOS AosFS BootDevice%Partition
 AosFS = DiskVolumes.New DiskFS.NewFS
 Boot = DisplayLinear.Install
 Boot1 = WindowManager.Install
 Boot2 = Startmenu.Open
 Init = 117

IMPORTANT: Both keys and values are case-sensitive!

Enable Low-Level Tracing

The A2 kernel provides some low level tracing options. To get trace output on your screen, set the config strings


Note: This will cause a trap in DisplayLinear (display driver) since it expects a reasonable value for the config string Init

To get trace output on your serial port, set the config strings

TracePort=<Number of serial port for trace output, e.g. 1>
TraceBPS=<Bits per second for serial port, e.g. 115200>

Note: This is more powerful than tracing to the screen. If your system resets during the startup, you would still see the trace outputs, but unfortunately, you need a second machine to receive the trace output. The second machine must have some terminal emulation program running, e.g. Kermit or PuTTY or any other you are comfortable with.

After you have set the configuration strings, enter the character 'c' and press RETURN to continue the boot process.

Trace Kernel Initialization

This section refers to step numbers as defined in the table found in the section Kernel Initialization above.

Multicore machine:

 [1-2a]Machine: Aos 25.06.2008 (Revision 1321)
 [2b]Machine: Detecting memory...[2c]256MB
 Machine: 2 cores per physical package, 1 threads per core.
 [2d-2f]Machine: Enabling MMU...[2g]Ok
 Heaps: Initializing heap...[3]Ok
 [4-5]Machine: Intel MP Spec 1.4
    Processor 0, APIC011, ver 6.7.8, features  0FEBFBFF, ID 0
    Processor 1, APIC011, ver 6.7.8, features  0FEBFBFF, ID 1
 Machine: Booting processors... 
    P0 starting P1
    P1 running
    P0 recognized P1
    P1 scheduling
 [6]Kernel: Initialized and started.

Singlecore machine:

 [1-2a]Machine: Aos 25.06.2008 (Revision 1321)
 [2b]Machine: Detecting memory... ...[2c]256MB
 Machine: 1 cores per physical package, 1 threads per core.
 [2d-2f]Machine: Enabling MMU... red%[2g]Ok
 Heaps: Initializing heap... [3]Ok
 [4-5]Machine: Intel MP Spec 1.4
    Processor 0, APIC011, ver 6.7.8, features  0FEBFBFF, ID 0
 [6]Kernel: Initialized and started.

Single-processor mode forced or no APIC:

 [1-2a]Machine: Aos 25.06.2008 (Revision 1321)
 [2b]Machine: Detecting memory... ...[2c]256MB
 Machine: 2 cores per physical package, 1 threads per core.
 [2d-2f]Machine: Enabling MMU... [2g]Ok
 Heaps: Initializing heap... [3]Ok
 [4-5]Machine: Single-processor
 [6]Kernel: Initialized and started.

Possible solutions:

Memory Detection On some machines, the automatic memory detection fails. Try to override it by explicitly setting the amount of system memory your machine has. This can be done using the configuration string ExtMemSize. For testing, use a value that is about 50 MBytes less than the amount of memory your machine has.

Example: ExtMemSize=128 sets the amount of system memory to 128 MBytes

Number of Processors With the MaxProcs config string you can manually set the number of processors your system has (should be <= number of available processors). If you set this to -1, you enforce single processor mode. For testing, use the value -1.

Example: MaxProcs=-1 enforces single processor mode

Disable Hyperthreading The trace output line

 Machine: 1 cores per physical package, 1 threads per core.

indicates how many cores per physical package and how many threads per core the processors have (all processors must be the same). If threads per core > 1, this means that the processor cores support hyperthreading. You can disable hyperthreading by setting the configuration string DisableHyperthreading=1.

Trace ATA Disk Driver (IDE.Bin)

 [11]{P cpuid= 0, pid= -1 PCI: 3 bus(ses) found, PCI version: 02.10}
 ATADisks: Force PIO mode for ATAPI devices This string appears when the config string "ATAPIForcePIO=1" is set
 ATADisks: Scanning PCI bus for IDE & SATA class devices ...
 ATADisks: Found PCI device on bus 0, device 7, function 1
 ATADisks: Adding controller 01F0, 03F0, 1050, IRQ: 14: IDE0..1, Bus-master enabled
 ATADisks: Adding controller 0170, 0370, 1058, IRQ: 15: IDE2..3, Bus-master enabled
 ATADisks: Could not select device

 IDE0: 204MB, LBA, ATA/ATAPI-4, Ultra DMA 2, VMware Virtual IDE Hard Drive, ver 4.23
 IDE2: ATAPI cd-rom device, removable, no DMA, VMware Virtual IDE CDROM Drive, ver 4.23

The important points here are that a) at least one controller should be detected and b) the boot device should be detected

ATA Disk Driver On some machine, it is necessary to set the ATA controller detection to legacy. This can be done using the ATADetect= config string. Note that this is also necessary if your system does not have a PCI bus.

Example: ATADetect=legacy

Note: If no controller is detect, please verify in the BIOS setup that the IDE controller is set to "legacy", "compatible" or "enhanced". The ATA/ATAPI driver cannot handle AHCI host controllers.

Trace USB driver (USB.Bin)

 1  {P cpuid=0, pid=-1 Usb: USB driver loaded.}
 2  Usb: Driver UsbHub (USB Hub Driver) has been added.
 3  {P cpuid=0, pid=-1 PCI: 3 bus(ses) found, PCI version: 02.10}
 4  {P cpuid-0, pid=-1 UsbEhci: Initialised USB Enhanced Host Controller at base 0EFFFC000, Irq: 11}
 5  UsbHubDriver: Root Hub USBHC0 (USB Enhanced Host Controller): 4 ports detected.
 6  Typically, there will be more than one host controller detected here...
 7  UsbStorageBoot: Boot device serial number: 00034}
 8  Usb: Driver UsbStorageBoot (USB Mass Storage Boot Driver) has been added.
 9  {P cpuid=0, pid=-1 UsbStorageBoot: Booting from USB. Awaiting device USB0...}
 10 UsbHubDriver: Sony Storage Media attached to USBHC0 port 1.
 11 UsbStorage: Storage device USB0 (Sony Storage Media) is now accessible.
 12 {P cpuid=0, pid=9 UsbStorageBoot: Boot device USB0 connected.}
  • Lines 1-3: Must appear on the log
  • Lines 4-6: At least one host controller must be detected and the hub driver must detect ports for it
  • Line 7: Only appears if the config string "SerialNumber" is set, see explanation below
  • Line 8: Must appear on the log
  • Line 9: Now, the boot process will be blocked until the disk device USB0 is available. Not that the USB mass storage boot driver will only be bound to exactly one device. If no serial number is specified, this will be the first USB mass storage device detected by the hub driver (which is NOT necessarily the one you want to boot from!). In this case, use the config string "SerialNumber". If set, the USB storage boot driver will only be bound to a USB mass storage device that has this serial number. To find out the serial number, boot from CD (hopefully you can...) and start Menu -> Inspect -> UsbViewer. There, press on the button "Details" and look for the device descriptor of your USB device (must be attached). The serial number of the device is the string in brackets.
  • Line 10: The hub driver will show USB devices it has found. This does not mean that a USB device driver is bound to the device
  • Line 11: This means that the USB mass storage driver is bound to the device and it can now be accessed by the system
  • Line 12: If you reach this point, the boot process will continue. IMPORTANT: Make sure that USB0 is the USB device you want to boot from and not just another USB mass storage device attached to the computer (see description of Line 9)

Trace the Rest of the Startup Process

From here on, the boot console should mount the boot volumes and start the boot commands. The config strings that cause a certain action to be done by the boot console are written in blue color.

[BootVol1=RAM RamFS 8000 4096]
[RamFS=RAMVolumes.New DiskFS.NewFS]
If you boot from CD-ROM, the boot console will create and mount a RAM disk which looks like:

 DiskFS: Index not found on RAM0
 DiskFS: Scanning RAM0... marking     0 files
 DiskFS: 31992K of 32000K available on RAM0

Note that "Index not found on RAM0" (or another disk) is not an error. Also, the RAM disk is not required to start up the system.

[BootVol2=AOS AosFS IDE0#1]
[AosFS=DiskVolumes.New DiskFS.NewFS]
Now - this in a very important point - the filesystem where the A2 operating system is installed should be mounted.
On success, this looks like:

 DiskVolumes: IDE0#1 AosDiskFS: 116536 of 208484K available on IDE0#1

If you see the some of someK available... message, the files should be accessible.

Wrong boot disk/partition specifiedCannot mount boot diskSet right disk/partition in BootVol config string

The display driver will enable write combining for the frame buffer in system memory, create and then register a display object at Displays.registry.

 {P cpuid=0, pid=7 DisplayLinear: GlobalSetCacheProperties = 2304}
Init config string not setThe module DisplayLinear traps at startupSet Init config string

After the window manager is started, you should see a light blue empty screen

 Default font installedOptenType 0.45 BBPort /3.12.2004 eos,pl
 WindowManager: Display resolution: 1024x768x16

The command Autostart.Run will parse the Autostart section in Configuration.XML and sequentially execute the commands listed there.

 Autostart: executing StartMenu.Open will open the start menu
 Autostart: executing WMRestorable.Load Auto.dsk restores the windows and their positions stored using SaveDesktop

Common Error Scenarios

What goes wrong?ErrorSolution
There are a lot of messages like DisplayLinear.Obx not found1. Could not mount boot disk/partition
2. Object files (*.Obx) don't exist on boot disk/partition
1. Adapt BootVol config string
2. Copy files to volume
Messages list Something incompatible with somethingMost likely, there is a version confict between the modules statically linked into the boot image and the object files on the boot diskInstall correct version of boot image (IDE.Bin, USB.Bin, ...)

BIOS setup settings

Depending on the machine equipment some adjustment of the BIOS may be required. Please consult the Hardware Compatibility information to find out if any special set-up is recommended.

Operation Mode of IDE Controller

Most modern IDE controller implement the Advanced Host Controller Interface (AHCI). This mode of operation IS NOT supported by A2. Fortunately, the controllers can operate in legacy mode.

In most BIOS setup implementations, the option is named something similar to "SATA mode". Set this to "legacy", "compatible", "IDE" or similar.

On Fujitsu-Siemens Esprimo (upgraded to Dual-Core, but I don't think this is relevant) with a PhoenixBIOS Version 5.0 it was necessary to set the S-ATA mode to "Native". The "Compatible" mode resulted in a black screen and an error 2831 from DiskVolumes.New in the serial trace output.

AHCI host controllers are not supported

Plug'n'Play OS

This should be set to "No". If set to "Yes", the BIOS will only initialize and configure devices that are required to boot the system. Since A2 relies on the BIOS for device configuration, this can cause devices not to work with the device drivers provided by A2.

Install WinAos

After cloning the repository no further Installation is necessary. Start A2.exe from the subdirectory WinAOS below the path where you cloned the repository to.

Install ETH PC Native Oberon

Originally, ETH PC Native Oberon was installed from an Oberon0 diskette. In many contemporary systems, the Oberon0 installer can run under a hypervisor. The hypervisor is installed once and can be used for any number of installations. With this method, no time is spent recording and booting from a diskette and the unreliability of diskettes and diskette drives is avoided. Also, the installer runs faster under the hypervisor than it does from a diskette. The method has proven successful in installing Native Oberon to a Micron Trek 2, AGP laptop. Installation methods using optical media and using TFTP are conceivable but have not been explored.

"Installation host" is the machine where installation is performed using the hypervisor.
"Target machine" is the machine where the Oberon system is to be used after installation is completed.
"Target device" is the device where Oberon is to be installed. It is a disk drive or Compact Flash card connected by PATA or a USB flash store connected by OHCI. SATA, UHCI, EHCI and XHCI are not supported.
"Target volume" is a volume of a partitioned target device.

To make a specific example, the following instructions refer to QEMU running on Linux with installer /home/me/OberonCF0.Dsk. In the installation host, the name of the target device, /dev/KingstonCF, is a SYMLINK created with a udev rule.
KERNEL=="sd?", ATTR{size}=="1018080", SYMLINK+="KingstonCF", \

 OWNER="me", GROUP="mygroup" 

In the Oberon installer the target device is IDE0 and target volume is IDE0#07.

CAUTION: a small typographical error in the device identifier can allow catastrophic damage to the file system of the installation host. Identify devices carefully. Type carefully.

(0) If the target machine is not the installation host, move the target device to the installation host. The connection should be the same as in the target machine. In most cases the target device will connect via a 40 or 44 conductor ribbon cable. A 44 pin laptop drive can be connected to a desktop machine using an adapter. Native Oberon has limited support for USB. In many cases the installation will not succeed for a USB target device. That includes a disk drive or CF card connected by a USB adapter.

(1) In this installation method, Native Oberon requires a dedicated target volume of the target device. In Linux, a volume can be created with fdisk, parted or gparted. In other systems, other disk manipulators are available. For the complete stock Native Oberon system, at least 50 MiB should be allocated.

(2) Install QEMU on the host where the installation process is to be performed. Complete system emulation is used. In Debian jessie install the qemu-system-x86 package.

(3) By direct inspection or by using software, determine the video capabilities of the target machine. In Linux, lspci identifies most video hardware. In addition to the video chipset, knowledge of the VESA BIOS Extensions capability can be helpful.

(4) Retrieve an Oberon0 image such as OberonCF0.Dsk. The latest genuine ETHZ image is the alpha release from 2003. Image OberonCF0.Dsk with support for Compact Flash is available in the SourceForge.

(5) Start the installer.
CAUTION: "/dev/KingstonCF" here is an example. Adjust according to your specific requirement.
Oberon0 in QEMU provides the command Partitions.Show ~. The partition table it displays should confirm that the target volume is correct. Risk of damage to a file system in the installation host is mitigated by the condition that QEMU allows access only to devices specified in the qemu command.

For image file OberonCF0.Dsk.
sudo qemu-system-i386 \
  -drive file=/home/me/OberonCF0.Dsk,index=0,if=floppy,format=raw \
  -drive file=/dev/KingstonCF,index=1,media=disk,format=raw \
  -vga std -boot order=a

For a real diskette, write-protected.
sudo qemu-system-i386 \
  -drive file=/dev/fd0,index=0,if=floppy,format=raw,readonly \
  -drive file=/dev/KingstonCF,index=1,media=disk,format=raw \
  -vga std -boot order=a

Refer to the manual page in the installation host or to the QEMU manual. Access to a host drive is also discussed in
https://www.suse.com/documentation/sles11/book_kvm/data/cha_qemu_running_devices.html. If "format=raw" is omitted, QEMU will produce an error message.

(6) Oberon0 will present a sequence of commands, each of which can be executed with a click of the middle mouse button. Text is selected by dragging with the right mouse button. Consult the installation instructions for details. In InstallFiles.Tool type the option "detail" and execute Partitions.Show detail ~. In the present example the target volume is IDE0#07; not IDE0#00. Sensible type codes should appear in the fifth column. The type code for the whole target device and for each unallocated area will be "---". Any other volume should have a numerical type code. If "---" appears where a type code should be in the fifth column, the installer failed to read the partition table of the target device properly and successful installation will be impossible.

(7) In the System.Configure viewer, choose a video mode according to information established in step (3) above. If no chipset-specific driver is suitable, set a VESA mode. In case the chosen mode fails, another mode is easily tested.

(8) Record system configuration in the target volume by executing Config.BootPartition menu ~.

(9) Depending upon video configuration, the newly installed system might be tested under the hypervisor without rebooting.
sudo qemu-system-i386 \
  -drive file=/dev/KingstonCF,index=1,media=disk,format=raw \
  -vga std -boot order=c

Otherwise test in the target machine.

If installation was successful and configuration was correct, Native Oberon will appear momentarily. Otherwise, refer to troubleshooting instructions. The discussion under Partition management with Oberon, subheading "Troubleshooting a boot problem with this command" is also relevant. To revise the video configuration, run QEMU again, mount the target volume, in this example "FileSystem.Mount DST AosFS IDE0#07 ~", execute "Edit.Open Configure.Tool", try another "Config.Display ..." and execute "Config.BootPartition menu ~". If using VESA video, test again under the hypervisor. The BIOS might allow booting from a device other than the primary master. Where the drive is installed in the machine as IDE1 and is recognized in the installer as IDE0 the value for the BootVol config string can be edited when the machine boots.

To troubleshoot a more difficult problem, record a trace in a file.
sudo qemu-system-i386 \
  -hda file=/dev/KingstonCF,index=1,media=disk,format=raw \
  -serial file:QemuOberonTrace \
  -vga std -boot order=c,menu=on

After grabbing the QEMU screen, set <Scroll Lock> and set Trace config strings. The boot option "menu=on" allows this interaction.
For additional details, refer to Tracing.

If the installation host is not the target machine, replace the target device in the target machine and test. In this case the best troubleshooting method is with the terminal emulator connected by serial crossover cable.

(10) If the target machine has more than one operating system, a boot manager will be needed. The Bluebottle/AOS BootManager is recommended.

(11) System configuration is in the file Oberon.Text. In the freshly installed base system this file is specifically SYS:Oberon.Text. Two subtleties can confuse the inexperienced user.

  • Syntax in Oberon.Text is critical. If a closing bracket "}" is absent, the information following the error is ineffective. Take care in editing Oberon.Text.
  • A storage volume additional to SYS can contain an Oberon.Text. Nevertheless the inner core is "hardwired" to refer to SYS:Oberon.Text. Consider a system installed and configured with HOME prioritized before SYS. The first execution of ET.Open Oberon.Text will open SYS:Oberon.Text. Assuming the volume name HOME is not added to the menu frame, ET.Store after editing will create HOME:Oberon.Text. After reboot, SYS:Oberon.Text will remain in effect. HOME:Oberon.Text will differ but not affect the inner core. To avoid confusion, the storage volume can be specified as in ET.Open SYS:Oberon.Text. Assuming the title remains SYS:Oberon.Text, ET.Store won't create the second copy, HOME:Oberon.Text.

(12) With the base system working, configure a network connection. Preferably using Ethernet and TCP/IP. Otherwise using a RS-232 crossover cable (null modem) and PPP. Configuration is in Oberon.Text.

(13) In Oberon, a command in any text can be executed by a click of the middle mouse button. This includes a command in a Web page. To open this page for example, mouse-middle click on
Desktops.OpenDoc "http://www.ocp.inf.ethz.ch/wiki/Documentation/Installation#toc23" ~
Then mouse-middle click on each of these commands to retrieve the package archives. After each file is retrieved "Transfer complete." should appear in the System.Log. If the system freezes during a transfer, strike <Ctrl>+<Break> twice, execute System.Reboot and try again to retrieve the failed zip file. In some cases more than one failure can occur before a file is retrieved successfully. Build.zip, SourceB.zip and System.zip are required only to rebuild the system or installer.

FileSystem.SetDefault SYS ~ to retrieve into the SYS volume of storage.
FTP.Open ftp.ethoberon.ethz.ch ~
FTP.ChangeDir "ETHOberon/Native/Update/Alpha/" ~
FTP.Dir ~
FTP.GetFiles Apps1.zip ~
FTP.GetFiles Apps2.zip ~
FTP.GetFiles Docu.zip ~
FTP.GetFiles Gadgets.zip ~
FTP.GetFiles Pr3Fonts.zip ~
FTP.GetFiles Pr6Fonts.zip ~
FTP.GetFiles Source1.zip ~
FTP.GetFiles Source2.zip ~
FTP.GetFiles Source3.zip ~
FTP.GetFiles readme.txt ~

FTP.ChangeDir "Build" ~
FTP.Dir ~
FTP.GetFiles Build.zip ~
FTP.GetFiles SourceB.zip ~
FTP.GetFiles System.zip ~

FTP.Close ~
ET.OpenAscii readme.txt ~     <== Please read.

Mouse-middle click on
ZipTool.ExtractAll Apps1.zip Apps2.zip Docu.zip Gadgets.zip Pr3Fonts.zip Pr6Fonts.zip Source1.zip Source2.zip Source3.zip ~
to unpack the archives. For the system building files.
ZipTool.ExtractAll Build.zip SourceB.zip System.zip ~

FileSystem.SetDefault YourWorkingPartition ~ to revert to your working volume.

You now have the complete ETH Oberon system.

Copyright © 2007 ETH Zürich
Page last modified on February 09, 2019, at 03:08 PM