# MAN8 MAN8 (8) Section 8 of the Manual contains information on system installation and maintenance. The sections of the manual are: Section 1: User commands Section 2: System calls Section 3: C library Section 4: File formats Section 5: Miscellaneous Section 6: Games Section 7: Special files (devices) -->Section 8: Maintenance procedures # alive ALIVE (8M) MAINTENANCE COMMANDS ALIVE (8M) NAME alive - keep connection alive SYNOPSIS alive [ -v ] hostname [ interval ] AVAILABILITY This command is available with the TemariNET software package. DESCRIPTION The alive command sends a UDP packet to the UDP discard port of the hostname specified every interval seconds. If the interval is not given the default is 30 seconds. The purpose is to prevent the connection from timing out due to inactivity. OPTIONS -v Verbose mode. This is useful for debugging purposes only. EXAMPLE alive oasis2 300 NOTES The source for this command will show an example of how to write a program to use the UDP protocol. AUTHOR Michael Temari - temari@temari.ae.ge.com # daytimed DAYTIMED (8M) MAINTENANCE COMMANDS DAYTIMED (8M) NAME daytimed - report the current date and time SYNOPSIS daytimed [ -d ] AVAILABILITY This command is available with the TemariNET software package. DESCRIPTION daytimed is a daemon server which implements the DAYTIME protocol. It reports the system's current date and time. OPTIONS -d Debug mode. This is useful for debugging purposes only. SEE ALSO netdate(8m), timed(8m) AUTHOR Michael Temari - temari@temari.ae.ge.com Fred N. van Kempen - waltje@uwalt.nl.mugnet.org # netdate NETDATE (8M) MAINTENANCE COMMANDS NETDATE (8M) NAME netdate - fetch the current date and time off of a network server SYNOPSIS netdate [ -adtv ] [ hostname ] [ -s ] [ server ] AVAILABILITY This command is available with the TemariNET software package. DESCRIPTION The netdate command implements the TIMEP protocol (see RFC 868) for fetching the current date and time off a network server. If no server name is given, the program will use the localhost as the TIMEP server. OPTIONS -a Display the time in ARPANET standard format. -d Debug mode. This is useful for debugging purposes only. -t Use time(2) and do as date(1). -v Verbose mode. This is the same as -d. -s Set the time of the system RTC clock. EXAMPLE netdate -s nyx.cs.du.edu SEE ALSO timed(8m) AUTHOR Michael Temari - temari@temari.ae.ge.com Fred N. van Kempen - waltje@uwalt.nl.mugnet.org # nslookup NSLOOKUP (8) June 24, 1990 NSLOOKUP (8) NAME nslookup - query Internet name servers interactively SYNOPSIS nslookup [ -option ] [ host-to-find | - [ server ]] DESCRIPTION Nslookup is a program to query Internet domain name servers. Nslookup has two modes: interactive and non-interactive. Interactive mode allows the user to query name servers for information about various hosts and domains or to print a list of hosts in a domain. Non-interactive mode is used to print just the name and requested information for a host or domain. ARGUMENTS Interactive mode is entered in the following cases: a) when no arguments are given (the default name server will be used), b) when the first argument is a hyphen (-) and the second argument is the host name or Internet address of a name server. Non-interactive mode is used when the name or Internet address of the host to be looked up is given as the first argument. The optional second argument specifies the host name or address of a name server. The options listed under the ``set'' command below can be specified in the .nslookuprc file in the user's home directory if they are listed one per line. Options can also be specified on the command line if they precede the arguments and are prefixed with a hyphen. For example, to change the default query type to host information, and the initial timeout to 10 seconds, type: nslookup -query=hinfo -timeout=10 INTERACTIVE COMMANDS Commands may be interrupted at any time by typing a control-C. To exit, type a control-D (EOF) or type exit. The command line length must be less than 256 characters. To treat a built-in command as a host name, precede it with an escape character (\). N.B. an unrecognized command will be interpreted as a host name. host [server] Look up information for host using the current default server or using server if specified. If host is an Internet address and the querey type is A or PTR, the name of the host is returned. If host is a name and does not have a trailing period, the default domain name is appended to the name. (This behavior depends on the state of the set options domain, srchlist, defname, and search). To look up a host not in the current domain, append a period to the name. server domain lserver domain Change the default server to domain. Lserver uses the initial server to look up information about domain while server uses the current default server. If an authoritative answer can't be found, the names of servers that might have the answer are returned. root Changes the default server to the server for the root of the domain name space. Currently, the host ns.nic.ddn.mil is used. (This command is a synonym for lserver ns.nic.ddn.mil.) The name of the root server can be changed with the set root command. finger [name] [> filename] finger [name] [>> filename] Connects with the finger server on the current host. The current host is defined when a previous lookup for a host was successful and returned address information (see the set querytype=A command). Name is optional. > and >> can be used to redirect output in the usual manner. ls [option] domain [> filename] ls [option] domain [>> filename] List the information available for domain, optionally creating or appending to filename. The default output contains host names and their Internet addresses. Option can be one of the following: -t querytype lists all records of the specified type (see querytype below). -a lists aliases of hosts in the domain. synonym for -t CNAME. -d lists all records for the domain. synonym for -t ANY. -h lists CPU and operating system information for the domain. synonym for -t HINFO. -s lists well-known services of hosts in the domain. synonym for -t WKS. When output is directed to a file, hash marks are printed for every 50 records received from the server. view filename Sorts and lists the output of previous ls command(s) with more(1). help ? Prints a brief summary of commands. exit Exits the program. set keyword[=value] This command is used to change state information that affects the lookups. Valid keywords are: all Prints the current values of the frequently-used options to set. Information about the current default server and host is also printed. class=value Change the query class to one of: IN the Internet class. CHAOS the Chaos class. HESIOD the MIT Athena Hesiod class. ANY wildcard (any of the above). The class specifies the protocol group of the information. (Default = IN, abbreviation = cl) [no]debug Turn debugging mode on. A lot more information is printed about the packet sent to the server and the resulting answer. (Default = nodebug, abbreviation = [no]deb) [no]d2 Turn exhaustive debugging mode on. Essentially all fields of every packet are printed. (Default = nod2) domain=name Change the default domain name to name. The default domain name is appended to a lookup request depending on the state of the defname and search options. The domain search list contains the parents of the default domain if it has at least two components in its name. For example, if the default domain is CC.Berkeley.EDU, the search list is CC.Berkeley.EDU and Berkeley.EDU. Use the set srchlist command to specify a different list. Use the set all command to display the list. (Default = value from hostname, /etc/resolv.conf or LOCALDOMAIN, abbreviation = do) srchlist=name1/name2/... Change the default domain name to name1 and the domain search list to name1, name2, etc. A maximum of 6 names separated by slashes (/) can be specified. For example, set srchlist=lcs.MIT.EDU/ai.MIT.EDU/MIT.EDU sets the domain to lcs.MIT.EDU and the search list to the three names. This command overrides the default domain name and search list of the set domain command. Use the set all command to display the list. (Default = value based on hostname, /etc/resolv.conf or LOCALDOMAIN, abbreviation = srchl) [no]defname If set, append the default domain name to a single-component lookup request (i.e., one that does not contain a period). (Default = defname, abbreviation = [no]def) [no]search If the lookup request contains at least one period but doesn't end with a trailing period, append the domain names in the domain search list to the request until an answer is received. (Default = search, abbreviation = [no]sea) port=value Change the default TCP/UDP name server port to value. (Default = 53, abbreviation = po) querytype=value type=value Change the type of information query to one of: A the host's Internet address. CNAME the canonical name for an alias. HINFO the host CPU and operating system type. MINFO the mailbox or mail list information. MX the mail exchanger. NS the name server for the named zone. PTR the host name if the query is an Internet address, otherwise the pointer to other information. SOA the domain's ``start-of-authority'' information. TXT the text information. UINFO the user information. WKS the supported well-known services. Other types (ANY, AXFR, MB, MD, MF, NULL) are described in the RFC-1035 document. (Default = A, abbreviations = q, ty) [no]recurse Tell the name server to query other servers if it does not have the information. (Default = recurse, abbreviation = [no]rec) retry=number Set the number of retries to number. When a reply to a request is not received within a certain amount of time (changed with set timeout), the timeout period is doubled and the request is resent. The retry value controls how many times a request is resent before giving up. (Default = 4, abbreviation = ret) root=host Change the name of the root server to host. This affects the root command. (Default = ns.nic.ddn.mil., abbreviation = ro) timeout=number Change the initial timeout interval for waiting for a reply to number seconds. Each retry doubles the timeout period. (Default = 5 seconds, abbreviation = ti) [no]vc Always use a virtual circuit when sending requests to the server. (Default = novc, abbreviation = [no]v) [no]ignoretc Ignore packet truncation errors. (Default = noignoretc, abbreviation = [no]ig) DIAGNOSTICS If the lookup request was not successful, an error message is printed. Possible errors are: Timed out 5 The server did not respond to a request after a certain amount of time (changed with set timeout=value) and a certain number of retries (changed with set retry=value). No response from server 5 No name server is running on the server machine. No records 5 The server does not have resource records of the current query type for the host, although the host name is valid. The query type is specified with the set querytype command. Non-existent domain 5 The host or domain name does not exist. Connection refused 5 Network is unreachable 5 The connection to the name or finger server could not be made at the current time. This error commonly occurs with ls and finger requests. Server failure 5 The name server found an internal inconsistency in its database and could not return a valid answer. Refused 5 The name server refused to service the request. Format error 5 The name server found that the request packet was not in the proper format. It may indicate an error in nslookup. FILES /etc/resolv.conf initial domain name and name server addresses. $HOME/.nslookuprc user's initial options. /usr/share/misc/nslookup.help summary of commands. ENVIRONMENT HOSTALIASES file containing host aliases. LOCALDOMAIN overrides default domain. SEE ALSO resolver(3), resolver(5), named(8), RFC-1034 ``Domain Names - Concepts and Facilities'' RFC-1035 ``Domain Names - Implementation and Specification'' AUTHOR Andrew Cherenson # timed TIMED (8M) MAINTENANCE COMMANDS TIMED (8M) NAME timed - report the current time and date to a client SYNOPSIS timed [ -dv ] AVAILABILITY This command is available with the TemariNET software package. DESCRIPTION timed is a daemon server which implements the TIMEP protocol, as described in RFC 868. This protocol can be used to ask servers like this one for their current time-and-day. -d Debug mode. This is useful for debugging purposes only. -v Verbose mode. This is the same as -d. EXAMPLE timed & SEE ALSO daytimed(8m), netdate(8m) AUTHOR Michael Temari - temari@temari.ae.ge.com Fred N. van Kempen - waltje@uwalt.nl.mugnet.org TemariNET Software April 29, 1993 1 # demolish DEMOLISH(8) Minix Programmer's Manual DEMOLISH(8) NAME demolish - take an image to pieces SYNOPSIS demolish image demolish image kernel mm fs ... init DESCRIPTION Demolish does the opposite of installboot -image or build: It takes a Minix kernel image apart to its components. Extracting an image made by installboot is straightforward, as it is much like an ar(1) or tar(1) archive. A build made image has lost a lot of information about the original programs, so you need to specify their names. The following restrictions/assumptions/comments are made about a build image: It must be a 1.5 or newer image with no special tricks. The kernel must either be separate I&D, or it's stack must be 512 bytes exactly with no change to the beginning of the text and data segment. The click size is 256. There is a minute chance that the data segment of a common I&D fs is not properly located. This doesn't matter for the other programs. The assumption is that this program is used to take a Minix distribution boot floppy apart, so that the programs may be reassembled by installboot for my boot monitor (see monitor(8)). SEE ALSO build(8), installboot(8), monitor(8). BUGS Recompile the kernel. Feels much better. AUTHOR Kees J. Bot, (kjb@cs.vu.nl) # installboot INSTALLBOOT(8) Minix Programmer's Manual INSTALLBOOT(8) NAME installboot - make a device bootable SYNOPSIS installboot -i(mage) image [label:]kernel mm fs ... init installboot -d(evice) device bootblock boot installboot -b(oot) device bootblock boot [label:]image ... installboot -m(aster) [fix] device masterboot DESCRIPTION Installboot may be used to make a device bootable by constructing a kernel image and installing bootstrap code into the boot block of a Minix filesystem. To understand how this can be done one first has to know what happens when a PC is booted. When the power is turned on the typical PC will try to read the first sector from the first floppy disk or from the first hard disk into memory and execute it. The code obtained from the hard disk (from the so-called master boot sector) will immediately replace itself by the code found in the first sector of the active partition. Thus the PC is now executing the bootstrap code found in the first sector of /dev/fd0, /dev/hd1, /dev/hd2, /dev/hd3, or /dev/hd4. The bootstrap will locate the operating system on the device it itself was loaded from, load it, and execute it, usually in a two phase process. To make a Minix filesystem /dev/fd0 mounted on /mnt bootable, enter the following: cp boot /mnt/boot installboot -image /mnt/minix kernel mm fs init installboot -device /dev/fd0 bootblock boot The "boot" program in the example is named the "boot monitor". It is loaded by the bootblock code placed in the boot sector of /dev/fd0 and it will take care of loading the kernel image "minix" from the root directory of the filesystem. See monitor(8) for a description of the boot monitor. The most important aspect of this now bootable device is that it is not bound to type of media it is on, as the bootblock is the same for double and high density 3.5 and 5.25 inch floppy disks and the hard disk. You can copy it raw to /dev/hd3 for instance, put an active flag on partition 3 (see fdisk(8)) and boot it. I routinely make raw copies of my hard disk root file system to floppies and these floppies are again bootable without change. Combined with a stripped /usr file system on floppy, I can always get my system back to life in case of disaster. OPTIONS -image The -image option (or any prefix down to -i) combines the executable files needed to run Minix in one file. Only the names and a few zero bytes are inserted into the image. The name is for identification and the zeros are used to pad separate pieces to (1) INSTALLBOOT(8) Minix Programmer's Manual INSTALLBOOT(8) sector boundaries for fast loading. Each executable is normally stripped of its symbol table, unless a -s flag is placed before it. An executable may be prefixed with a label. The monitor may be instructed to not load processes with the wrong label. So more than one kernel process may be included in the image, each with a different winchester driver for instance. -device Installs bootblock in the boot sector of device together with the disk addresses to boot. These disk addresses are needed to load boot from the file system at boot time. If the boot parameters sector (the second half of the boot block) is found to contain garbage, it is cleared to null commands. Again see monitor(8). The device need not be mounted when installboot is run, nor does it matter if it is. Installboot needs to be run again if boot is rewritten, because it will then occupy a new place on the disk. -boot This option fills a blank floppy in device with boot code and kernel images. This "boot disk" does not have a root file system, only the boot monitor and Minix kernels. The boot parameters sector is filled with code that enables menu options for selecting an image. After loading an image, the monitor will ask you to insert a root file system diskette before starting Minix. The labels used on the images should ideally match those on the executables used inside the image. You can put a comma separated list of labels on an image for each label used within the image. If a label-list is omitted on an image, then that image will be selected by default. -demo This is a special feature for creating a demo disk. It works just like the -boot option, except that the device must contain a file system. Use it to dress up a small root file system with boot code and a kernel to make a single floppy Minix demo. The file system must be small enough to allow for the monitor and images be placed *after* it. -master This option installs the masterboot program into the boot sector of the given device. If another device is given instead of masterboot then its bootstrap code is copied to device. The master bootstrap on a hard disk boots the active partition on that disk at boot time. The MS-DOS fdisk command normally puts a master bootstrap on the hard disk, but the masterboot program in this package has a lot more features: If the ALT key is held down while booting then '/dev/hd?' appears and you are expected to type a number key (0 - 9) to select the device to boot. (2) INSTALLBOOT(8) Minix Programmer's Manual INSTALLBOOT(8) If a fix key is given (0 - 9) then the bootstrap is locked into booting the given /dev/hd device. This is needed if 'boot *hdN' is used from the monitor to boot an O.S. that needs the active flag set. If installed on a floppy then it will try to boot the next floppy or the first hard disk. Ideal for floppies with just data on it, they will no longer obstruct the boot process if left in the drive. Also a very useful trick to boot from floppy drive 1. If installed on a hard disk then the active partition is selected and booted as usual, unless none of the partitions is marked active, then it will boot the next disk. The latter is useful if you want to boot an operating system from the second disk by default. A backup copy of the current master bootstrap can be made with: dd if=device of=backup-file bs=446 count=1 A simple 'cat backup-file > device' will put it back. SEE ALSO fdisk(8), monitor(8). DIAGNOSTICS Lot's of numbers describing executables being read, addresses patched. Errors about missing files, nonexecutable files, etc. A very useful warning if a segment of an i8086 executable is larger than 64K. A warning and a ten second countdown if -boot is about to scribble over a file system. BUGS It has four more options than the SunOS installboot program it is modeled after. The symbol table support is a misfeature, only a debugger can use it. Time spent fiddling with debuggers is better used finding bugs. The bootblock code has been crunched to such ugliness that you can use it scare little kids out of your garden. AUTHOR Kees J. Bot (kjb@cs.vu.nl) (3) # monitor MONITOR(8) Minix Programmer's Manual MONITOR(8) NAME monitor, edparams - load and start Minix, modify boot parameters SYNOPSIS edparams device [command ...] DESCRIPTION This text describes the boot monitor, a boot time interactive program designed not only to load and start Minix, its most important task, but to also provide an easy to use interface to configure Minix and to boot other operating systems. The monitor is controlled with an environment that is modeled after the Bourne shell. This environment is filled at startup with default values that depend on the machine the monitor is running on and the environment settings saved into the boot parameters sector (the second sector on a device). When the environment is loaded, the monitor executes the function named main, which by default starts a simple menu. The environment can be manipulated at boot time from the monitor prompt, but may also be edited using edparams on a given device. Edparams simulates the monitor as much as it can, echoing commands it can't execute between brackets. It may be used in Makefiles or scripts too by giving it commands as arguments. COMMANDS The monitor is best described by the commands you can type to the '>' prompt. This is known as the monitor mode. You can enter this mode by hitting the Escape key. A list of commands is shown if you type something illegal, like 'help'. These are the commands: name = [device] value Set environment variable. Changes the value of name to value. Adding the word device (or any word starting with a 'd') marks name as being subject to device translation. (See the section on devices.) These (name, value) pairs are passed to the kernel who usually ignores them, unless they are one of these special variables: rootdev This is the device used as your root device. It is by default set to ram, which means that the device specified by ramimagedev will be loaded into the RAM disk and used as root. If you change this variable, then a physical device will be used as root, and the RAM disk will be uninitialized and have the size specified by ramsize. ramimagedev Describes the device to use to initialize the RAM disk if rootdev is set to ram. It's by default set to bootdev, a special name for the device the monitor booted from. (1) MONITOR(8) Minix Programmer's Manual MONITOR(8) ramsize The size of the RAM disk when it is not used as the root device, by default 0. keyboard This is by default set to standard, but may be changed to olivetti, us or dutch. The keyboard choice is translated to a number (if not a number already) and passed to the kernel assigned to the reserved scancode variable. processor Set by default to 86, 186, 286, 386 or 486, depending on the hardware you have. You can set it to a smaller value to test your kernel in a more limited environment. memsize Kilobytes of conventional memory. emssize Kilobytes of extended memory. chrome Either color or mono. video Describes capabilities of the VDU: mda, cga, ega, or vga. Two variables are only used by the monitor, even though they are passed to the kernel too: image The name of the file containing the kernel image, by default minix. If it refers to a directory however, the newest file inside that directory is chosen to be the kernel image. The names inside that directory are best set to the Minix version you are using, which looks good when the monitor prints the copyright message. To add feature to feature, if you add something like 'r29' to the version number, it will nicely tell you that you are running your 29-th revision of the original Minix. To sum up the rules used for pretty printing image names: A '/' or '_' is changed to a space. The first letter is changed from lowercase to uppercase. An 'r' if followed by a digit changes to ' revision '. If no digits have been printed, '1.6' is added as the default version. (2) MONITOR(8) Minix Programmer's Manual MONITOR(8) label If set then only processes marked with this label or without a label are loaded from the image. Use it to select a kernel process with a proper winchester driver for instance. Installboot -boot will create functions to select images and labels. These functions will set label and image and echo what you selected. The two numbers separated by a colon used as an image name tell the starting sector and sector count of the image on disk. name() { ... } Define function. Functions may be used to bundle a set of commands, so that you can easily boot Minix with a different set of parameters then normal. E.g. ram() { rootdev=ram; boot } will allow you to run Minix with the root device on RAM for a change, if you normally use a real device as root. The only pre-set function is main with default value menu, which is the default command executed by the monitor. You can use newlines after the ')' token, the monitor will then use a '+' prompt and ask for the rest. name(key) { ... } Define kernel selecting function. The menu command uses functions like these to add menu entries to select a different kernel from a boot disk. Installboot -boot produces these functions when the images are labeled. The label AT would give: AT(a) {label=AT;image=42:626;echo AT kernel selected;menu} With the menu option: a Select AT kernel Typing a will then execute the AT function above. name(key,text) { ... } User defined menu option. This variant may be used to make any menu entry you like: dos(d,Boot MS-DOS) { boot hd1 } Text may be anything, even matching parentheses. name Call function. If name is a user defined function then its value is expanded and executed in place of name. Try a recursive one like 'rec() (3) MONITOR(8) Minix Programmer's Manual MONITOR(8) {rec;xx}' one day. You can see the monitor run out of space with nice messages about using chmem(1) to increase it's heap. boot [device] Boot Minix or another O.S. Without an argument, boot will load and execute the Minix image named by the image variable. With an argument, boot loads the boot sector of device into memory and jumps to it, starting another operating system. You would normally use partitions on the first hard disk for this command (hd[1-4]), using hd0 may also work (choosing the active partition). Devices on the second hard disk (hd[5-9]) can only be booted if the bootstrap writer did not hardwire the disk number to disk 0. The name of device is used, not its Minix device number, making it independent from the Minix device name to device number mapping. Some operating systems can only be booted from the active partition, if you use a '*', e.g. boot *hd3, then partition 3 is first made active. You'll then need to use installboot -master with a fix key to forcefully boot the Minix partition at startup. delay [msec] Delay (500 msec default). The first time my program worked on the hard disk I was a bit disappointed, 10 days of work went by in less then a second. Later I was pleased with that, because speed was one of the objectives. But if you need some time (to hit Escape, or stare at the numbers) you can use delay to make the monitor pause for a specified amount of time. To specify a delay just before Minix is started, you can set the variable delay to a number of milliseconds. Example: main() {delay 250; delay=500; boot} Look at this carefully, 'delay 250' means: "wait 1/4 sec now!", while 'delay=500' means: "wait 1/2 sec after loading Minix". If you use the word swap instead of a number, then the monitor will wait until you have inserted a root diskette and typed RETURN. echo word ... Print these words. Used to tell you that you just selected image X. ls [directory] List contents of directory. Shows the names of the files in a directory. It's only use is to list the names of the available kernels in the minix directory. menu Menu driven startup. This command allows you to execute functions defined with a key. If no menu functions have been defined then menu will use this one (4) MONITOR(8) Minix Programmer's Manual MONITOR(8) hidden built-in function: *(=,Start Minix) { boot } Kernel selecting functions only add new options to this set, but if you define a two argument function yourself then the above one is no longer shown, allowing you to customize the menu completely. Your first function definition should therefore be one that starts Minix. save Save environment. This will save all the environment variables and functions with nondefault values to the parameter sector (the second sector on the boot device), so they are automatically set the next time you boot the monitor. set Show environment. Like the shell command of the same name, set will show you the current values of the environment variables and functions. Default values are shown between parentheses to distinguish them from values that were explicitly set. trap msec command Schedule command. Schedules a command to be executed after msec milliseconds. Only the monitor mode cannot be interrupted, a scheduled trap is killed when the prompt is printed. Example: main() {trap 10000 boot; menu} This gives you 10 seconds to choose a menu option before Minix is booted. unset name ... Unset environment variables. Removes the named variables and functions from the environment, and sets special variables back to their default values. This is also the only way to remove the "device name translation" property from a variable. DEVICES The Minix kernel can't do anything with device names, so they have to be translated to device numbers before they are passed to the kernel. This number is found under the st_rdev field (see stat(2)) of the file on the boot file system. The monitor will look for the device file with the working directory set to '/dev'. If it can't find the device name then it will translate names like 'ram', 'fd1', 'hd0', 'hd6', and 'hd2a' to what it itself thinks the numbers should be. (5) MONITOR(8) Minix Programmer's Manual MONITOR(8) The special name bootdev is translated to the name of the device booted from, like 'fd0', or 'hd3', and then searched for in /dev. EXTENSIONS A few extensions have been made to this program for kernel hackers. They may be triggered by setting bits in the (normally 0) word used for the kernel DS value in kernel/mpx.x. The flag bits are: 0x0001 Call kernel in 386 mode. The monitor will make the switch to 386 protected mode before it calls the kernel. This requires changes to the early startup phase of the kernel. The advantages are that variables used at startup need not be within the first 64K, no need for a 8086 cross compiler to compile the few files that need to be in 16 bit mode, nor a loader that can combine 8086 and 80386 code. 0x0002 Do not make space for bss. The 386 virtual memory kernel can claim the bss pages for each process other than itself, the monitor need not do that. This allows for a much larger bss area then the monitor can make in that puny 640Kb. The size of the bss area in clicks is added to the two word table of process sizes in the kernel data segment to make it a three word table. 0x0004 Use the stack size set by chmem(1). This flag tells the monitor that it needs to make space for a stack as set by the chmem(1) command, because the processes are not using fixed sized arrays for the stack. If the 0x0002 bit is set, then the size of the stack in clicks is simply provided in a fourth word in the kernel data segment. 0x0008 Obsolete. This flag used to ask for the size of the symbol table, but the monitor no longer supports the misfeature of loading symbol tables into memory. 0x0010 No need to patch anything. The monitor places an array of the 32 byte a.out headers of the processes at address 0x00600. Setting this flag means that the kernel is using them instead of the sizes array, so the monitor need not patch anything. Do not think that all of this means that this package is geared towards 386 Minix. All these extensions are just a few simple extra features. (Having first used Minix on an XT with just two 360kb floppy drives makes one not forget the low end.) (6) MONITOR(8) Minix Programmer's Manual MONITOR(8) SEE ALSO chmem(1), stat(2), installboot(8). DIAGNOSTICS Many self-explanatory messages about files not being found, bad images, disk read errors, lack of memory, etc. ACKNOWLEDGMENTS Guy Helmer, for the floppy sensing code that somehow disappeared into the boot block. Earl Chew, for the inspiration his shoelace package provided, unless he wants to file a 'look and feel' suit against me, then I will say I modeled it after the SunOS ROM boot monitor, which is also true. BUGS The delay command will hang forever on the original IBM PC (not the XT!). Not that it matters, as everything takes forever on that box. Reading the first sector to boot a floppy (e.g. boot fd1), is done using whatever floppy parameters boot currently has available. This will probably always work. The two forms of delay are a crock. The word emssize comes from EMS, that has to do with expanded memory, not extended memory. I didn't know the difference. AUTHOR Kees J. Bot (kjb@cs.vu.nl) (7)