Mach4 UK02p21 Release Notes

November 3, 1995


Tested Configurations
FTP information


UK02p21 is a public release of the so-called ``Mach4'' kernel for the Intel x86 processor family. Mach4 is one component of the Flux project at the University of Utah Computer Science Department. The focus of the x86 branch has been to make Mach more usable on PCs, with particular emphasis on ease of building, compatibility with a number of OS environments and additional hardware support. This release reflects the latest development in those areas.

New in UK02p21, since p13:

Tested Configurations

All configurations were built using i386-mach cross-build tools, which can be found at:

The kernel was tested with Lites-1.1.u2 running on the following base systems:

FreeBSD 2.0.5
FreeBSD 2.1.0-950726-SNAP
The system was also booted on a system running UX42 on a CMU Mach base.

Ftp Information

Mach4 and Mach4-i386

Intel x86: BSD bootable Binaries
Intel x86: Linux bootable Binaries


Linux Device Drivers:

Shantanu Goel ( has modified Mach to accept mostly unchanged Linux network device drivers. He has work in progress to support SCSI host adapters and all block devices, which should be available "soon." All this work is described in the paper ``Linux Device Driver Emulation in Mach'' by Shantanu Goel and Dan Duchamp of the Columbia Mobile Computing Laboratory. The paper will be presented at 1996 USENIX Annual Technical Conference. The paper will be available by November 16, 1995, at which time we'll add a link to it here.

To enable the Linux device driver support, use ``--enable-linuxdev'' when configuring Mach4. You cannot mix native network drivers with the Linux network drivers.

Be aware that since the drivers are from Linux, they are all covered by the GPL.

Testing status

The drivers that have been tested at Columbia are:
Western Digital 8003 and clones
SMC Ultra
NE2000 and clones
AMD LANCE based boards
3Com 3c503 (Etherlink II)
We have tested the linuxdev code with HP PCLAN Plus and NE2000 clones, and while they work, we have had problems on fast machines and suggest that you use the native Mach ethernet drivers if you can. Please report your experiences with other hardware.

No PCI boards work yet, since there is currently no support for PCI in Mach. (That will also be provided "soon" via more linuxdev work.)

Complete list of Linux network drivers in the source tree:
de4x5.c: A DIGITAL DE425/DE434/DE435/DE500 ethernet driver for Linux.
depca.c: A DIGITAL DEPCA & EtherWORKS ethernet driver for linux.
ewrk3.c: A DIGITAL EtherWORKS 3 ethernet driver for linux.
3c501.c: A 3Com 3c501 ethernet driver for linux.
3c503.c: A shared-memory NS8390 ethernet driver for linux.
3c507.c: An EtherLink16 device driver for Linux.
3c509.c: A 3c509 EtherLink3 ethernet driver for linux.
8390.c: A general NS8390 ethernet driver core for linux.
ac3200.c: A driver for the Ansel Communications EISA ethernet adaptor.
apricot.c: An Apricot 82596 ethernet driver for linux.
at1700.c: A network device driver for the Allied Telesis AT1700.
atp.c: Attached (pocket) ethernet adapter driver for linux.
e2100.c: A Cabletron E2100 series ethernet driver for linux.
eepro.c: Intel EtherExpress Pro/10 device driver for Linux.
eexpress.c: Intel EtherExpress device driver for Linux.
hp-plus.c: A HP PCLAN/plus ethernet driver for linux.
hp.c: A HP LAN ethernet driver for linux.
lance.c: An AMD LANCE ethernet driver for linux.
ne.c: A general non-shared-memory NS8390 ethernet driver for linux.
seeq8005.c: A network driver for linux.
smc-ultra.c: A SMC Ultra ethernet driver for linux.
tulip.c: A DEC 21040 ethernet driver for linux.
wd.c: A WD80x3 ethernet driver for linux.
znet.c: An Zenith Z-Note ethernet driver for linux.
Linux ethernet device driver for the 3Com Etherlink Plus (3C505)
Linux driver for the D-Link DE-600 Ethernet pocket adapter.
Linux driver for the D-Link DE-620 Ethernet pocket adapter.
hp100.c: Hewlett Packard HP10/100VG ANY LAN ethernet driver for Linux.
net-3-driver for the NI5210 card (i82586 Ethernet chip)
ni6510 (am7990 'lance' chip) driver for Linux-net-3 by MH
Schneider & Koch G16 Ethernet Device Driver for
AT&T GIS (nee NCR) WaveLAN card.


BSD and Mach

Booting from Mach, NetBSD and FreeBSD bootblocks should now work as you'd expect. The kernel uses the bootdev and boothowto fields that are passed from the bootblocks, so now you can boot from an alternate root/partition without hardcoding it in setroot.c. Any command line arguments are likewise passed along to the kernel and server.

The old Mach bootblocks don't support loading NMAGIC kernels, which is a problem since that's usually what the Mach boot image is. So, if you're going to be booting from the original Mach bootblocks, you can either build ZMAGIC or OMAGIC kernels, or you'll can make a small change to the Mach bootblocks to recognize NMAGIC binaries:

*** boot.c      Wed Sep  1 17:14:33 1993
--- newboot.c       Fri Nov  3 03:34:52 1995
*** 137,143 ****
        read(&head, sizeof(head));
!       if (head.a_magic == 0407)
                poff = 32;
        else if (head.a_magic == 0413 ) {
                poff = 0;
                head.a_text += sizeof(struct exec);
        } else {
--- 137,143 ----
        read(&head, sizeof(head));
!       if (head.a_magic == 0407 || head.a_magic == 410)
                poff = 32;
        else if (head.a_magic == 0413) {
                poff = 0;
                head.a_text += sizeof(struct exec);
        } else {

Kernel Debugger:

The kernel debugger is once again useful, supporting symbols and backtraces. The problem was that the symbol table for the kernel wasn't getting loaded, which broke a number of things (now at least the kernel and server symbol tables are being loaded, but the bootstrap and emulator's aren't). However, symbols are only loaded if the kernel is a.out. If you feel you have to build your kernel as ELF, then you don't get symbols.

Remote console support:

Remote console support is working again. This is NOT the same as a serial console; basically it just spews out kernel messages to your favorite serial port. This can be very useful for logging the output of the system and using the kernel debugger over the serial line.

To enable the remote console support, you must change a #define in mach4-i386/kernel/bogus/rc.h. RCLINE is the number of the serial device that you want to use, and RCBAUD is the speed. The options for RCLINE are shown below, as taken from autoconf.c, for the ``com'' device.

options for RCLINE:

RCLINE		info
------		---------------------------
0  		(port 0x3f8/irq 4 DOS COM1)
1	    	(port 0x2f8/irq 3 DOS COM2)
2		(port 0x3e8/irq 5 DOS COM3)
3	    	(port 0x2e8/irq 9 DOS COM4)

NE2000 device driver:

This is a device driver for the ne2000 series of ethernet cards. It was ported from 386BSD by Shang-te Hsu of the Computer System Lab, Dep. of Computer & Information Science National Chiao Tung University in Hsinchu, Taiwan. The driver was sent to us by Terrence Mitchem ( We've only tested the driver with an ne2000 clone card, but the original README said that it supported the ``NE1000, NE2000, DE-100, DE-200, DE-220'' cards.

The driver is configured to look for cards set up as:

(ne0) port 0x280, memory addr 0xd0000, irq 5
(ne1) port 0x300, memory addr 0xd0000, irq 10

If you need to change this, go into mach4-i386/kernel/i386at/autoconf.c and you'll find a section that looks like this:

#if NNE > 0
 {&nedriver, "ne", 0, neintr, 0x280,0x4000,0xd0000,
      '?',    0,   -1,    -1,    0,   0,        0,   SPL_SIX, 5},
 {&nedriver, "ne", 1, neintr, 0x300,0x4000,0xd0000,
      '?',    0,   -1,    -1,    0,   0,        0,   SPL_SIX, 10},
#endif NNE > 0

Change the 4th, 6th and/or the last (port, mem, irq) to match your card and recompile the kernel. If you want to disable the driver or want to add more than one card, look in mach4-i386/kernel/bogus/ne.h and change the #define to either be 0, or greater than one. The number after the ``ne'' is the number that it will be configured for if found. So, a card at port 0x280 irq 5 will be configured as ne0.

Other Changes, in no particular order:

Stephen Clawson <>
November 3, 1995