boot(8)
NAME
boot - from power on to the login prompt
DESCRIPTION
At power on the machine reads the first sector of the boot device into
memory and executes it. This bootstrap code loads /boot, the Minix Boot
Monitor. The monitor loads the kernel binaries from /minix, or the
newest file in /minix if it is a directory.
The Minix system is now running, the different tasks initialize
themselves and control is transferred to the last one, init.
Init is the grandparent of all Minix processes, it is responsible for
starting login processes on each terminal, but first it runs /etc/rc.
/etc/rc checks the state of the system and starts daemons. First it sets
the keyboard translation to the mapping in /etc/keymap if present, then
it reads the time zone from /etc/timeinfo followed by a call to
readclock(8) to set Minix time from the hardware clock. Next the file
systems are checked if necessary and the /usr file system is mounted.
The system is now ready for multiuser startup, /etc/rc starts the
update(8) and cron(8) daemons, and initializes the network services.
/etc/rc finally recovers crashed editor buffers and cleans out the tmp
directories.
Init reads /etc/ttytab and starts a getty(8) for each enabled terminal
line to allow a user to log in.
BOOT ENVIRONMENT
Many features of the drivers inside the kernel are controlled by settings
in the boot environment. The values of these variables are usually colon
or comma separated numbers configuring the driver. DPETH0 = 300:10 tells
the ethernet driver to use I/O address 0x300, interrupt request 10, and
the default memory address (0xD0000, values may be omitted) for the first
ethernet board. (Note that IRQ 2 is redirected to IRQ 9 on AT's and
PS/2's, so use 9 if a device is jumpered for 2.)
Variables that are special to both the monitor and the kernel are
described in monitor(8). This section lists extra variables or variable
settings:
hd = at | bios | esdi | xt
Choose the driver that is to be used for the hard disk, in order:
IBM/AT (classic AT or newer IDE), BIOS (generic driver), ESDI (some
PS/2's), or IBM/XT. By default the first of these drivers that is
enabled is used. Most drivers are present in the kernel as
distributed, but may be taken out by modifying
/usr/include/minix/config.h. (An XT should always use the BIOS
driver, not the XT driver, because BIOS calls are cheap on an XT.
The XT driver can be used on AT machines with an old XT controller.)
See hd(4).
dosd = file | fat
Choose the driver that is to be used as the "DOS virtual disk",
either the "file" or the "FAT" driver. See dosd(4).
DPETHn = on | off
Turn an ethernet board on or off. The driver is by default in
"sink" mode for all boards. The sink mode allows one to use the
driver without an ethernet board installed. The driver will play
/dev/null for that device, i.e. nothing comes in, and anything send
out is dropped on the floor. If the board is turned on then the
driver will use it to send out packets, if it is turned off then the
driver will fail for that board.
DPETHn = I/O-addr:irq:mem_addr:mem_size (WD80x3)
DPETHn = I/O-addr:irq:0 (NE2000)
DPETHn = I/O-addr:irq:flags (3c503)
Set the I/O address (hex), IRQ (decimal), memory address (hex),
memory size (hex), or flags (hex) of the n-th ethernet board and
turn it on. By default they are configured as 280:3:D0000 and
300:5:CC000 with the memory size set to 2000, 4000, or 8000
depending on the type of board found. For the Western Digital cards
the IRQ must be what the board expects, but the memory address is
programmed into the board by the driver. The SMC EtherEZ board, a
WD8013 successor, has only 8K memory. This confuses the driver, so
you need to explicitly specify the board size as being 2000. The
memory address and size have no meaning for the Novell ethernet
boards, but the address may be explicitly set to zero to indicate
that the board is a Novell ethernet board. For the 3Com 3c503 the
third parameter are flags, with the low bit indicates that the on-
board tranceiver must be used if 0 (thin ethernet), or that an
external tranceiver is used on the AUI port if set to 1. The IRQ is
software settable, and must be specified as 2 (XT), 3, 4, 5, or 9
(AT). The memory address is set on the board by jumpers. The
driver does not support I/O mode for the 3c503. (Note the little
differences between board types. For the 8003/8013 and
NE1000/NE2000 the IRQ is fixed and the memory address variable, for
the 3c503 the IRQ is variable and the memory address is fixed, but
need not be specified. Messy.)
DPETHn_EA = e0:e1:e2:e3:e4:e5
Set the ethernet address of the n-th ethernet board. The address is
normally obtained from the ethernet board, so only in exceptional
circumstances is this setting ever needed. (Use the address of the
main server if you want a career change.)
AHA0 = I/O-addr:bus-on:bus-off:tr-speed
Configure the Adaptec 154xA SCSI host adapter to use the given I/O
address (hex), Bus-on time (decimal), Bus-off time (decimal) and
transfer speed (hex). The default is 330:15:1:00. The default
transfer speed is always 5.0 Mb/s (code 00) ignoring the jumper
settings.
sdn = target,lun
Program SCSI disk sdn to have the given target and logical unit
number. The target and lun of a tape or other SCSI device may be
changed by setting the sdn variable that would be used had it been a
disk. So tape device st7 can be set to target 4, lun 1 with
sd35=4,1.
MCD = I/O-addr:irq
I/O address (hex) and IRQ (decimal) of the Mitsumi CD-ROM driver, by
default 300:10.
dosdn = file
dosdn = partition:file
Tells the DOS virtual disk driver for device dosdn (n is 0 or 5) to
use a given MS-DOS file as a disk. Depending on whether the "file"
or the "FAT" driver is being used dosdn is either set to a normal
DOS file name, or to a Minix hard disk partition name followed by a
simple DOS file name. See dosd(4).
TCP/IP CONFIGURATION
To use TCP/IP you have to compile a kernel with networking enabled, and
unless you are running standalone you have to enable the ethernet driver.
See the DPETHn boot variable above. The driver supports these ethernet
cards: Western Digital 8003, Western Digital 8013, SMC Elite Ultra 16,
Novell NE1000 and NE2000, 3Com Etherlink II (3c503). Many newer variants
of the WD8013, now under the SMC brand, are also supported.
You are likely to use TCP/IP in one of three situations:
Standalone with no connection to a network.
In a small network with no support from a "big" host.
Connected to a large network with address and name servers.
In each situation you need a different set of configuration files.
Standalone
If rarpd notices that there is no connection to the outside world then it
will configure the default network to address 10.0.0.1. You need to
create one file, /etc/hosts, that should look like this (using the name
"flotsam" as the example name of the machine):
127.0.0.1 localhost
10.0.0.1 flotsam
Small Network
In a network where the Minix machine can't obtain its IP address and name
from a different host you need specify the ethernet address to host name
translation in the /etc/ethers file for use by rarpd. Suppose your
machine is to be named "flotsam", and another machine in the network is
named "jetsam". The file /etc/ethers should at least contain an entry
for flotsam:
0:0:c0:a:77:23 flotsam
Use hostaddr -e to find out what the six octet ethernet address of a host
is. Use the address as printed: lowercase hex digits, no leading zeros.
The /etc/hosts file shows all IP addresses of the machines flotsam needs
to know about, and the netmask of the 10.*.*.* network:
127.0.0.1 localhost
10.0.0.1 flotsam
10.0.0.2 jetsam
255.0.0.0 0.0.0.10.in-addr.arpa
Warning! Do not add ethernet addresses of diskless workstations to your
ethers file. A Sun for instance has the stupid habit of booting from the
first RARP server that answers, probably your Minix machine...
Large Network
In a network with a central network administration your machine's IP
address and name are given by the RARP and name services of the special
servers on the network. For a new machine you need to apply for an IP
address and host name with your network administrator supplying the
ethernet address of your machine. You don't need any configuration files
now, the irdpd and nonamed daemons automatically find a router and a name
server.
Note that no knowledge of the IP address or hostname of the Minix machine
itself is necessary, it all comes from the RARP and name servers. A
series of Minix machines can therefore set up identically. Even if you
have no RARP or name servers you can still set them up identically if you
list all the Minix hosts in the hosts and ethers files.
Netmasks
An important parameter of a network is the netmask. A netmask is a bit
mask that you apply to IP addresses to find out if two IP addresses are
on the same network. So if a network interface has address 172.16.102.65
with netmask 255.255.255.224 then the 32 addresses 172.16.102.64 through
172.16.102.95 are all on the same network as 172.16.102.65. The rarpd
daemon figures out the netmask by repeatedly looking up the netmask
corresponding to an interfaces' network address: ip-address AND current-
netmask. Suppose for example that the address for an interface is
172.16.102.65. The initial netmask for this class B address is
255.255.0.0. So we look up the netmask associated with 172.16.0.0
(172.16.102.65 & 255.255.0.0). This lookup yields 255.255.255.0, so now
look up 172.16.102.0 to find 255.255.255.224. Lastly we look up
172.16.102.64 to find 255.255.255.224 again so we use it as the netmask.
These netmasks can be specified in /etc/hosts as follows:
255.255.255.0 0.0.16.172.in-addr.arpa
255.255.255.224 0.102.16.172.in-addr.arpa
255.255.255.224 64.102.16.172.in-addr.arpa
This should not be necessary on a large network that has name servers if
the Network Administrators have done their jobs properly. Check with
ifconfig if the netmask is as it should be. If not then try to find the
netmask manually with host commands on the appropriate *.*.*.in-addr.arpa
names. The initial netmask you start with is 255.0.0.0 for a class A
network (0.*.*.* to 127.*.*.*), 255.255.0.0 for a class B network
(128.*.*.* to 191.*.*.*) and 255.255.255.0 for class C networks
(192.*.*.* to 223.*.*.*). If you've found the mistake then you can
either try to convince your Network Administrator to fix it, or you can
add the appropriate entries to /etc/hosts to please rarpd.
Simpler configuration tools
The rarpd, irdpd and nonamed daemons are complex little programs that try
to obtain information about their surroundings automatically to tell the
machine what its place in the network is. It should come as no surprise
that there are simpler utilities to configure a machine. On a memory
starved machine it may even be wise to configure a machine statically to
get rid of the daemons. The first daemon, rarpd, can be replaced by:
ifconfig -h host-IP-address -n netmask
to set the IP address of the machine. Note that this is only necessary
if there is no external RARP service. The second daemon irdpd can be
replaced by setting a static route:
add_route -g router-IP-address
(if there is a router.) The last daemon, nonamed, can be replaced by an
entry in /etc/resolv.conf that specifies an external name daemon:
nameserver nameserver-IP-address
Edit /etc/rc just above the point where the network daemons are started
to add the calls to ifconfig and add_route. Remove the names of the
daemons that no longer needed. Note that these changes undo all the
efforts to make Minix TCP/IP autoconfigurable. Make very sure that all
the IP addresses are correct, and that the IP address of your machine is
unique. (Mistakenly using the address of a main server will make all
other machines look at your machine, and will make all the users of all
other machines look at you.)
FILES
/boot Minix Boot Monitor.
/minix Kernel image, or directory containing them.
/etc/rc First of the system initialization files.
/etc/hosts Name to IP address mapping.
/etc/ethers Name to ethernet address mapping.
/etc/resolv.conf Name resolver configuration.
SEE ALSO
monitor(8), init(8), inet(8), loadkeys(8), readclock(8), fsck(1),
update(8), cron(8), ttytab(5), getty(8), hostaddr(1), ifconfig(8),
irdpd(8), nonamed(8), rarpd(8), hosts(5), ethers(5), resolv.conf(5),
netdefault(8).
DIAGNOSTICS
Checking File Systems.
If the system has crashed then fsck is called for the root and /usr
file systems. It is wise to reboot if the root file system must be
fixed.
Finish the name of device to mount as /usr: /dev/
If the name of the /usr file system has not been set in /etc/fstab.
You can type a device name, say fd0.
hostaddr: unable to fetch IP address
TCP/IP misconfiguration. The RARP may have failed because the
ethernet address of the machine is not entered in either the remote
or the local ethers file. Either talk to your Network
Administrator, or make an ethers and a hosts file.
1.2.3.4 login:
If you see an IP address instead of a host name then the system
failed to translate the IP address. Either talk to your Network
Administrator to have the reverse address translation tables fixed,
or make a hosts file.
NOTES
The 10.*.*.* network can be used for private networks. Next to this
class A network there are 16 private class B networks, 172.16.*.* to
172.31.*.*, and 256 private class C networks, 192.168.0.* to
192.168.255.*. RFC-1597 will tell you why they are good, and RFC-1627
why they are bad.
BUGS
Indefinite hangs are possible if I/O addresses or IRQ's are wrong. A
driver may babble about addresses and IRQ's, but that does not mean that
what it says is true, it may just be configured that way. It is very
difficult to find peripherals on a PC automatically, and Minix doesn't
even try.
Rarpd should learn to also speak the BOOTP and DHCP protocols.
AUTHOR
Kees J. Bot (kjb@cs.vu.nl)