Amiga Forever, Knoppix & Asus Eee PC 701

This document details my experiments with Amiga Forever 2008 and the Asus Eee PC. My Eee PC is a 701 with 512MB RAM and 4GB SSD. I have not tested any of this on other Eee PCs, and it barely works on mine. Still, I've discovered a lot about the workings of Knoppix and a bit about the Eee PC. Although I mention Amiga Forever a lot, these instructions could probably be applied to any Knoppix system. I will be discussing the Amiga emulation startup, but not elaborating on any other part of the package.

The objective of the project was to get Cloanto's Amiga Forever 2008 (henceforth referred to as 'AF2008') working on the Eee PC without any files needing to be modified on its solid-state disk. I also wanted to be able to have any other PC on my network boot into the AF2008 environment and look like an Amiga to anyone passing.

The project consists of a server running an NFS daemon and DHCP server. The server is also running SSH, DNS, VNC and BIND, but these are not required. The contents of the AF2008 CD are exported (read-only) via NFS, or it is copied to the system hard drive and exported.

To make AF2008 boot on the Eee, I compiled the Attansic L2 (atl2) driver and had Knoppix load this when it starts. This is done in the 'linuxrc' script, which is part of the initramfs file passed to the booting client. Since I didn't have a clue about how to pass parameters to the linuxrc, this was a process of slow exploration. The kernel provided with AF2008 was 2.6.24-gentoo-r4 with AUFS ('Another Union FileSystem') patches and cloopfs module. To compile the atl2 driver, I needed to start with a vanilla Linux kernel (from kernel.org) and patch this with the AUFS patches. I compiled cloopfs and the atl2 module against this kernel. The whole thing was far from simple due to the lack of a kernel config that would suit the EeePC and the Knoppix environment together, and whenever I found a site where someone had done this before, it tended to be rather old (the Knoppix config is for a 2.4 kernel and the AF2008 system uses 2.6). I ended up merging the EeePC's standard kernel config with the Knoppix config, and tweaking it a bit. I'll make that config available for download.

The Eee PC currently boots into the PXELinux menu and item 'af2008-net' selects the network-bootable Knoppix system. The kernel and initramfs are loaded via the PXELinux loader and the initramfs initialises the EeePC's NIC. The address is manually set in the Knoppix linuxrc (bad! Got to sort this) and I have edited the linuxrc a lot to remove duplication and certain shortcomings in the script. Unfortunately this has also removed a lot of functionality, so the network part will probably not work on computers other than the Eee, until I put this right - which I will.

I am using Knoppix in its 'terminal server mode', where it mounts its cloopfs image (/knoppix/KNOPPIX) over the network, using NFS. For some reason, there is no DHCP client provided with Knoppix; I think that it expects the network adaptor to already have been set up by the kernel, but the hooks for additional network modules were left in place. Thus, I've edited it to set a manual IP address based on the 'ip=', 'nm=', 'gw=' (IP address, netmask, gateway) parameters passed on the command line. The PXELinux entry for AF2008:

# An experimental entry for nfsmount (19-Nov-08)
LABEL af-net
KERNEL Amiga_Forever_2008/linux
APPEND ramdisk_size=100000 init=/etc/init apm=power-off initrd=Amiga_Forever_2008/initrd nomce nodhcp highres=off loglevel=0 libata.atapi_enabled=1 SELINUX_INIT=NO nmi_watchdog=0 screen=800x480 vga=788 splash=silent,theme:af console=tty1 nfsdir=192.168.135.13:/home/lex/tftp/tftpboot/circadian.brooknet/Amiga_Forever_2008 ip=192.168.135.5 nm=255.255.255.0 gw=192.168.135.15 knoppix_dir=/KNOPPIX knoppix_name=KNOPPIX 2

The 'APPEND' line is all one big long unwieldy line, with no breaks. 'Amiga_Forever_2008' is a directory containing the kernel and initramfs image. When I first started all this, the initramfs was an obvious place to start because I couldn't unpack the KNOPPIX image and didn't have a clue what was going on after the system booted.

I use a separate dir called 'initramfs_edit' where I keep the currently- edited version of the initramfs system. When I want to build that into an initramfs image, I do 'sudo ../make-initramfs ../initrd' from the initramfs_edit dir. A listing of 'make-initramfs' follows.

#!/bin/bash
# Usage: make-initramfs <initramfs image to create>
# Run from the root of the initramfs tree.
find . | cpio -o -H newc | gzip > ${1}
Other scripts are 'unpack-initramfs' (unpacks a compressed initramfs into the current dir) and 'strip-mod-debug', which strips debug symbols from modules that are to be installed in the initramfs '/modules' dir (this is one of the dirs where Knoppix looks for modules to load). unpack-initramfs:
#!/bin/bash
# Usage: unpack-initramfs <initramfs image>
zcat ${1} | sudo cpio -i
strip-mod-debug:
#!/bin/bash
find . -name '*.ko' -exec strip --strip-debug {} ';'
I also have a dir to hold the currently-edited version of the Knoppix image. genisoimage (part of the 'genisoimage' package and was in cdrtools) is used to make an ISO of this, and that is compressed with the cloop 'create_compressed_fs' script, which can be found in the latest cloopfs release (from Knoppix sources).

Where 'Image' is a dir with the root of the 'KNOPPIX' image, this command generates the compressed file:

sudo genisoimage -r Image | ./create_compressed_fs - 65536 > KNOPPIX

Booting AF2008 from the EeePC

There were several issues here. My EeePC was set up with 'Boot Booster' enabled. What this means is that soon after powering it up, the computer boots from the SSD and bypasses the memory check and the check for external boot devices. To disable this, I think I pressed Esc as soon as possible after startup, and then I may have pressed F9??

To enable the network boot, go into the BIOS (F2), press the right-cursor key a few times to select the Boot menu and make sure that 'OnBoard LAN Boot ROM' is enabled. Do not enable 'Boot Booster'! Having enabled the boot ROM, go up to 'Boot Device Priority' and set a priority for the network boot, then press F10 to save and exit. While testing, I have the network boot set to top priority. If not, you'll need to press Esc to bring up the boot menu while booting, then choose the Atheros Boot Agent option, then press Esc again at the countdown. The ol' Esc key certainly got a hammering during my testing of this stuff. :)

PXE Booting

On the server (Ubuntu 8.04 LTS), I used tftp-hpa as a TFTP server, nfs-kernel-server as the NFS server and PXELINUX to boot the Linux kernel from the PXE clients.

My dhcpd.conf host entry (edited):

    host circadian {
        hardware ethernet       00:22:15:xx:xx:xx;
        fixed-address           circadian.brooknet;
        filename                "/tftpboot/circadian.brooknet/pxelinux.0";
    }
tftpd runs from xinetd. Here's the config file:
# This was created by Lex on 20-Sep-07
# Original inetd.conf line:
# tftp            dgram   udp     wait    nobody  /usr/sbin/tcpd  /usr/sbin/in.t
ftpd /srv/tftp
service tftp
{
        disable         = no
        id              = tftp
        socket_type     = dgram
        protocol        = udp
        wait            = yes
        user            = root
        server          = /usr/sbin/in.tftpd
        server_args     = -s /home/lex/tftp
#       server_args     = -s /nfs/shared/lex/projects/imac/tftp
}

Project Status/'To Do'

  1. [FIXED] The system boots and E-UAE starts, but pops up a 'Volume is write-protected' box.
  2. E-UAE doesn't like its volumes being r/w and being on an NFS mount. Quite why the CDROM version works, I don't know. I suspect that it might be an AUFS thing. The fix: edit af_boot.uaerc. Find the section starting 'Hard disk options' and change the 'rw' option to 'ro', so that the two lines look like this:
    # Hard disk options
    filesystem2=ro,DH0:System:/cdrom/Amiga Files/System/dir/System,1
    filesystem2=ro,DH1:Work:/cdrom/Amiga Files/System/dir/Work,0
    
  3. [OPEN] Dynamically-create the .uaerc to allow access to external filesystems. Enable the GTK+ GUI?
  4. [OPEN] Separate the E-UAE & GPL stuff from the Amiga Forever environment, so as not to tread on Cloanto's toes (I don't want to annoy anyone). I'd like to expand the system so that a variety of environments can be selected - e.g. MAME, SDLMAME, MESS.
  5. [OPEN] Enable splash screen to make the boot screen look more interesting. Possibly replace with a new front-end.
  6. [OPEN] The Intel 952GM?? driver resets the display brightness to maximum whenever a client exits.
  7. [PARTIALLY FIXED] The bottom of the Amiga screen disappears off the screen, due to the Eee PC's display size being 800x480, instead of 800x600. If an external monitor is connected when X starts, it is recognised and the intel display driver picks a mode for it, based on EDID.
  8. I got an xorg.conf modeline out of the standard Xandros xorg.conf:
    Modeline  "800x480"  29.58  800 816 896 992  480 481 484 497 -HSync +Vsync # 60 Hz
    
    If I could somehow get the Knoppix X startup to always use this mode, that'd sort it. There might be a way to do this on the boot line.
  9. Enable the Busybox telnetd to make debugging easier. If you add a '2' to the boot line, runlevel 2 is entered and you can start telnetd, then switch to runlevel 5 by doing 'telinit 5'.
  10. [FIXED] Fix shell PS1 to remove the bold text attribute. This is in /etc/profile.
  11. Old: PS1='\033[1;37m\w \$ '
    New: PS1='\[\033[1;37m\]\W \$\[\033[m\] '
  12. [SKIPPED - enabling DMA doesn't hurt anything..] Add 'nodma' to boot command line to stop DMA being enabled for the SSD, which is not used.
  13. [PARTIALLY FIXED] The Amiga display is not using the Picasso96 display, so it looks a lot less colourful than it should be. This might be due to SDL.
  14. The Picasso96 display can be selected in the Screenmode preferences, but it is not used by default. Currently the display mode is not changed - the window is just resized to fit the current Amiga mode. Screenmode preferences are saved in ENVARC:Sys/screenmode.prefs, which translates to /cdrom/Amiga Files/System/dir/System/Prefs/Env-Archive/Sys/screenmode.prefs in the host filesystem.
  15. [OPEN] The network setup is not quite right yet: due to the NFS stuff that happens early on in the boot sequence, by the time E-UAE runs, the NIC is up but /etc/resolv.conf isn't present - so AWeb can't browse the Net unless you manually create /etc/resolv.conf.

Unsorted Information

  1. Paths in /cdrom/Amiga/e-uae/af_boot.uaerc:
    unix.rom_path=/cdrom/Amiga Files/System/rom
    kickstart_rom_file=$(FILE_PATH)/amiga-os-3x0.rom
    kickstart_key_file=$(FILE_PATH)/rom.key
    filesystem2=rw,DH0:System:/cdrom/Amiga Files/System/dir/System,1
    filesystem2=rw,DH1:Work:/cdrom/Amiga Files/System/dir/Work,0
    
    ↑ Note, these are both R/W, but /cdrom is mounted r/o. 'Volume is write protected' requester appears unless these are set read-only.
  2. F12 + q quits the emulation. Other F12 commands don't seem to do anything, apart from F12 + d (debug mode), which causes the emulation to hang and stdout to fill with '>' symbols. This might be because E-UAE can't read from stdin.
  3. e-uae runs as root, and it's very difficult to do anything in AF2008, unless you are root. To login as root, rm /etc/securetty or add your tty of choice to it.

Links

Amiga Forever
AUFS
UnionFS or http://www.am-utils.org/project-unionfs.html
Knoppix sources/updates
My current kernel config (2.6.27.5-aufs)
My linuxrc (needs much more work)
Warning: the linuxrc contains ANSI escape sequences. My modifications start at the section marked '# How many network cards should we probe for?'
strip-mod-debug script
unpack-initramfs script
bzImage (Linux kernel)
initramfs image
PXELINUX

Comments?

If anyone would like any more information or has a suggestion, please email me via the contact page.