Getting Flux OSKit to run on VMware

Here are the things I had to do to get the networking portion of Flux OSKit to run on VMware:
  1. Start with a fresh, uncompiled/configured version of Flux OSKit. I've been working with the Valentine's Day snapshot (20010214). Note that doing "make clean" isn't enough, because detritus related to Ethernet drivers will remain behind.

  2. Edit oskit/dev/linux_ethernet.h. Delete all references to drivers besides the "LANCE"/"AMD" driver. This means that the file's contents (ignoring comments) should look like:
           #ifdef OSKIT_ARM32_SHARK
           driver(cs89x0, "Crystal Semiconductor CS89[02]0", NULL, "Russell Nelson", "cs89x0", cs89x0_probe)
           #else
           driver(lance, "LANCE", "AMD", "Donald Becker", "lance", lance_probe)
           #endif
           
    Why is this necessary? I believe it is because the ethernet driver initialization code causes each driver to probe for its card, and probing for non-LANCE cards seems to hurt VMware.

  3. Comment out the line inittodr(0); in the clock_init() function, in both freebsd/3.x/shared/clock_init.c and freebsd/shared/clock_init.c. This means that the clock_init() function should look like:
           void clock_init()
           {
           #ifndef KNIT
                osenv_timer_init();
           #endif
                timeout_init();
                init_timecounter(&dummy_timecounter);
                // inittodr(0);
                osenv_timer_register(clockintr, hz);
           }
           
    Why is this necessary? Something about how the RTC PIO's work in the flux OSKit is causing VMware grief. The specific line of code that crashes VMware is line 221 of dev/x86/rtclock.c, i.e.,
               rtcout(RTC_MONTH, bin2bcd(m + 1));
           
    Also, for kicks, look at the definition of the iodelay macro in oskit/x86/pio.h...

  4. Compile the oskit (./configure, then make).