Inferno Network Operating System
Generic x86 Board Support Package
Eric Van Hensbergen
ericvh@lucent.com
Inferno Native Kernel Team
Lucent Technologies Bell-Labs Innovations
666 Mountain Ave
Murray Hill, NJ 07974
ABSTRACT
Inferno(tm) is a network operating system
which is a product of the Inferno Business Unit of
Lucent Technologies and was developed in coopera-
tion with the Computing Science Research Center of
Bell Labs.
This document describes the requirements for
the generic x86 board support package and details
instructions for building the boot loader, kernel,
and BSP distribution. It also describes how to
install the built boot loader and kernel onto a
target and details how to setup a network file
server to serve applications to the target.
1. Requirements
1.1. Supported Target Hardware
1.1.1. CPU
1.1.1.1. 386
1.1.1.2. 486
1.1.1.3. Pentium
1.1.1.4. Pentium/II
1.1.2. Physical Drives
1.1.2.1. Standard 31/4 1.44 MB Floppy Drive
1.1.2.2. ATA Hard Drive (IDE)
1.1.3. VGA
NOTE: If you do not have one of these two cards,
it is VERY likely your system will not work
and will probably reboot the system when you
try to load the kernel.
1.1.3.1. Cirrus Logic CLGD542X-based VGA
Cards
1.1.3.2. S3-based VGA Cards
1.1.4. Ethernet
1.1.4.1. 3-Com Etherlink III (3C509, 3C579,
3C592, 3C590, 3C595, 3C900, 3C905)
1.1.4.2. Intel 82557 PCI (Intel EtherExpress
PRO/100B)
1.1.4.3. Digital Semiconductor DECchip 21140
PCI (DE-500-X)
1.1.5. Audio
1.1.5.1. SoundBlaster 16 Compatible (non-
plug & play)
1.2. Supported Boot Environment
The generic x86 BSP's configured environment is network
based, that is to say that the system expects to access
the application file system from a file server using an
ethernet network. The system may also be configured to
boot it's kernel from the network. In order for this
to work correctly, you must have a network file server
running a hosted version of Inferno 2.3.
2. Building
2.1. Building the Kernel
cd <builddir>/os/pc
mk install acid
2.2. Building the Boot Loader
Note: The boot loader must be built after the kernel
cd <builddir>/os/boot/pc
mk install
2.3. Building a BSP distribution from a source distri-
bution
cd <builddir>/os/boot/pc
mk clean
cd <builddir>/os/pc
chmod u+x Dist.a
iar vu Dist.a bootp.8 compress.8 devip.8 gre.8 icmp.8 \
il.8 ip.8 ipaux.8 ipextproto.8 media.8 netlog.8 \
pktifc.8 ppp.8 tcp.8 udp.8
chmod u+w mkfile
remove $LIBNAME dependancy from mkfile
mk clean
mk <builddir>/utils
mk clean
Make a tar archive using <builddir>/os/pc/x86ddklist as
a file list.
3. Installation and Boot
3.1. Installing the Boot Loader
The Generic x86 BSP boot-loader is a DOS uttility (in
other words, you must have DOS or Windows installed on
the machine and a mechanism for copying the boot loader
(and any necessary configuration files) to the target.
You must then edit the boot-loader's configuration file
(inferno.ini) to configure any devices and/or boot
options as discussed in the boot-loader's man-page.
3.2. Setting Up a Boot Host
3.2.1. Setting Up Bootp
In order to boot the x86 target, you must create
an entry for it in the Bootp database. The
default location for this database is /ser-
vices/bootp/db. In order to create an entry, you
must first obtain the target's hardware ethernet
address, IP address, subnet mask and gateway
information. You must have also decided on a file
server, authentication server, and boot file name.
Bootp database entries are colon-separated fields,
one line per machine in the following format:
<name>:<h/w addr>:<ip
addr>:<boot-file>:<sub-net>:<gateway>:\
<file server>:<auth server>:
Example:
nativepc:ha=080020880AE2:ip=135.3.60.180:bf=ipc:sm=255.255.255.0: \
gw=135.3.60.150:fs=135.3.60.232:au=135.3.60.232:
<name> designates the symbolic name of the system
you are booting.
<h/w addr> is the hardware ethernet address which
may usually by looking at the card, by reviewing
system logs for unknown bootp requests, or by
putting the bootp application into "snoop" mode
(-s).
<ip addr> is the IP address you wish to assign to
the target.
<boot-file> is the path to the kernel (Relative to
tftpd) that you wish to boot.
<gateway> is the ip address of the target's gate-
way.
<file server> is the ip address of the target's
file server (running styxd).
<auth server> is the ip address of the target's
authentication server.
Make sure to leave a blank line at the end of the
Bootp database. If bootp can't process the
database (due to formating errors) it will print
error messages and may not start. Try using the
debug flags (-d, -D, and -v) if you are having
trouble.
You can start bootp in two ways, manually, or
using lib/srv. To start bootp manually, simply
run lib/bootp from the shell:
inferno$ lib/bootp &
You may also start bootp automatically when you
start lib/srv by adding an entry to /ser-
vices/server/config:
10 M 67 udp /dis/lib/bootp.dis
3.2.2. Setting Up Tftpd
In order to start up tftpd (which allows you to
boot kernels across the network), simply create a
directory called /services/tftpd and copy kernels
you wish to boot there. Then either start tftpd
manually from the shell:
inferno$ lib/tftpd
or add another line to /services/server/config:
10 M 69 udp /dis/lib/tftpd.dis
NOTE: Since bootp & tftpd use ports in the "reserved"
range under Unix, you may need to run emu as root
depending on how your system is configured.
3.2.3. Exporting the File System
In order to set up a simple file server for devel-
opment, simply run lib/srv from the shell:
inferno$ lib/srv
If properly configured, this will start up bootp
and tftpd for you as well. For more details on
the components and functions of lib/srv along with
a more detailed description of how to setup
authenticated file service, please reference the
Inferno user's manuals.
3.3. Booting
After building your kernel, boot-loader, and setting up
your file server boot the target into DOS, edit the
inferno.ini file as appropriate. In most cases the
only entry necessary in your inferno.ini will be a des-
ignation of your hardware's ethernet controller:
ether0=type=21140
Once your inferno.ini is configured, start l.com:
C> l
Appendix: Man-Pages for inferno.ini & l.com
-------------------------------------------
L.COM(8) System Administration L.COM(8)
NAME
l.com - PC bootstrap program
SYNOPSIS
(Under MS-DOS)
[ drive :][ path ]l [ bootfile ]
DESCRIPTION
l.com is an MS-DOS program that loads and starts a program
in Inferno boot format (-H3 option to 8l (see 2l(1))).
l.com loads the bootfile at the entry address specified by
the header, usually 0x80100020. After loading, control is
passed to the entry location.
l.com can be loaded by booting MS-DOS and typing l in the
appropriate directory.
The bootfile can be specified in one of 3 ways, in order of
precedence:
command-line argument
configuration file option
default, based on available devices
The format of the bootfile name is device!unit!file. If
!file is omitted, the default for the particular device is
used. Supported devices are
fd An MS-DOS floppy disk. The bootfile is the contents of
the MS-DOS file. The default file is ipc.
e Ethernet. File is [host:]pathname.
h Hard (IDE) disk partition. The bootfile is the con-
tents of the partition given by file. The default par-
tition is boot.
hd Hard (IDE) disk MS-DOS partition. As for fd.
When l.com starts, it relocates itself to address 0x80000 in
the standard PC memory and switches to 32-bit mode. It then
double maps the first 16Mb of physical memory to virtual
addresses 0 and 0x80000000. Physical memory between 0x80000
and 0xA0000 and from 0x200000 upwards is used as program and
data space. Next, in order to find configuration informa-
tion, l.com searches all units on devices fd, hd, and sd, in
that order, for an MS-DOS file system containing a file
called inferno.ini (see inferno.ini(8)). If one is found,
searching stops and the file is read into memory at physical
address 0x400 where it can be found later by any loaded
bootfile. Some options in inferno.ini are used by l.com:
console
baud Specifies the console device and baud rate if not a
display.
etherX
(where X is a number) Ethernet interfaces. These can be
used to load the bootfile over a network. Probing for
Ethernet interfaces is too prone to error.
bootfile=device!unit!file
Specifies the bootfile. This option is overridden by a
command-line argument.
bootfile=auto
Default.
bootfile=local
Like auto, but do not attempt to load over the network.
bootfile=manual
After determining which devices are available for load-
ing from, enter prompt mode.
When the search for inferno.ini is done, l.com proceeds to
determine which bootfile to load. If there was no command-
line argument or bootfile option, l.com chooses a default
from the following prioritized device list: fd e h hd
l.com then attempts to load the bootfile unless the boot-
file=manual option was given, in which case prompt mode is
entered immediately. If the default device is fd, l.com
will prompt the user for input before proceeding with the
default bootfile load after 5 seconds; this prompt is omit-
ted if a command-line argument or bootfile option was given.
l.com prints the list of available device!unit pairs and
enters prompt mode on encountering any error or if directed
to do so by a bootfile=manual option. In prompt mode, the
user is required to type a device!unit!file in response to
the prompt.
A control-P character typed at any time on the console
causes l.com to perform a hardware reset.
FILES
[drive:] [ path ]l.com
MS-DOS filesystem:\inferno.ini
SOURCE
os/boot/pc
SEE ALSO
inferno.ini(8)
BUGS
Much of the work done by l.com is duplicated by the loaded
kernel.
The BIOS data area at physical address 0x400 should not be
overwritten, and more use made of the information therein.
If l.com detects an installed MS-DOS Extended Memory Man-
ager, it attempts to de-install it, but the technique used
may not always work. It is safer not to install the
Extended Memory Manager before running l.com.
INFERNO.INI(8) System Administration INFERNO.INI(8)
NAME
inferno.ini - configuration file for PC's
SYNOPSIS
none
DESCRIPTION
When booting Inferno on a PC, the DOS program l.com first
reads a DOS file containing configuration information from
the boot disk. This file, inferno.ini, looks like a shell
script containing lines of the form
name=value
each of which defines a kernel or device parameter.
For devices, the generic format of value is
type=TYPE [port=N] [irq=N] [mem=N] [size=N] [dma=N]
[ea=N]
specifying the controller type, the base I/O port of the
interface, its interrupt level, the physical starting
address of any mapped memory, the length in bytes of that
memory, the DMA channel, and for Ethernets an override of
the physical network address. Not all elements are relevant
to all devices; the relevant values and their defaults are
defined below in the description of each device.
The file is used by l.com and the kernel to configure the
hardware available. The following sections describe how
variables are used.
etherX=value
This defines an Ethernet interface. X, a unique monotoni-
cally increasing number beginning at 0, identifies an Ether-
net card to be probed at system boot. Probing stops when a
card is found or there is no line for etherX+1.
Some cards are software configurable and do not require all
options. Unspecified options default to the factory
defaults.
Known types are
elnk3
3C509
As found in the 3COM Etherlink III and Fast EtherLink
adapters.
21140
The Digital Semiconductor DECchip 21140 PCI Fast Ether-
net LAN Controller as found on the Digital Fast
EtherWORKS PCI 10/100 adapter (DE-500-X)
82557
The Intel 82557 Fast Ethernet PCI Bus LAN Controller as
found on the Intel EtherExpress PRO/100B.
serialX=value
This defines add on serial ports and cards. Multiple cards
can share the same IRQ. Unfortunately, many PC's allow only
the built in UARTs on the COM1 and COM2 IRQ's (3 & 4) so
beware.
Known types are
mp008
The TTC 8 serial line card. The mem parameter is the
port number of the interrupt polling port. Size is the
number of UARTs, default 8. Port is the port number of
the first UART.
generic
Any set of 16450 compatible serial lines with consecu-
tive port addresses. Size is the number of UARTs,
default 1. Port is the port number of the first UART.
mouseport=value
This specifies where the mouse is attached. Value can be
ps2 the PS2 mouse/keyboard port. The BIOS setup procedure
should be used to configure the machine appropriately.
0 for COM1
1 for COM2
console=value
baud=value
These are used to specify the console device. The default
console value is cga. Values of 0 or 1 specify COM1 or COM2
respectively, in which case baud is used to initialize the
port.
bootfile=value
This is used to direct the actions of l.com(8).
audioX=value
This defines a sound interface.
Known types are
sb16 Sound Blaster 16.
The DMA channel may be any of 5, 6, or 7. The defaults are
port=0x220 irq=7 dma=5
EXAMPLES
A representative inferno.ini:
% cat /n/c:/ingrtno.ini
ether0=type=3C509
mouseport=ps2
modemport=1
serial0=type=generic port=0x3E8 irq=5
%
Minimum CONFIG.SYS and AUTOEXEC.BAT files to use COM2 as a
console:
% cat /n/c:/config.sys
SHELL=COMMAND.COM COM2 /P
% cat /n/c:/autoexec.bat
@ECHO OFF
PROMPT $p$g
PATH C:\DOS;C:\BIN
mode com2:96,n,8,1,p
SET TEMP=C:\TMP
%
SEE ALSO
l.com(8),
BUGS
Being able to set the console device to other than a display
is marginally useful on file servers; MS-DOS and the pro-
grams which run under it are so tightly bound to the display
that it is necessary to have a display if any setup or
reconfiguration programs need to be run. Also, the delay
before any messages appear at boot time is disconcerting, as
any error messages from the BIOS are lost.
This idea is at best an interesting experiment that needs
another iteration.