FreeBSD on the Lenovo Thinkpad X60s

MC, mc at the domain hack.org

Summary

This text describes how I installed FreeBSD 6.1, NetBSD 3.0 and Ubuntu GNU/Linux 6.06 via PXE network boot on my Lenovo Thinkpad X60s. I also describe what works and what doesn't and what I have done so far to figure out why.

Since this text was first published I have upgraded my Thinkpad to FreeBSD 6.2 and most information here is now updated to reflect that.

Please see FreeBSD 7.2 on the Lenovo Thinkpad X60s for information on FreeBSD 7.2 on the Thinkpad X60s.

In July 2010 I reinstalled FreeBSD. I'm now running 8.1RC2 on the machine. I installed it from a USB memory stick.

History

2006-06-07: First published.

2006-06-13: Added link to Kazuhiro KONDOU's X server patch.

2006-06-15: Added USB mouse experience.

2006-06-21: Added note about network latency under Windows XP.

2006-08-03: Added small note about the difference between X60 and X60s.

2006-10-02: Changed a strange typo and the confusing order of some instructions. Thanks to Philipp Timmel for noticing.

2006-10-21: Added my powerd configuration.

2007-01-17: Added a table for a really short version. Went through another PXE install on another machine and copy pasted from my configuration files to be sure to get all the paths right.

2007-02-01: Added workaround for the strange latency problem on the em NIC. Added some USB experiences. Changed link to the FreeBSD Laptop Compatibility List. Added links to Tuxmobil.

2008-02-22: Added a note about breakage when upgrading to Xorg 7 (use i810 driver instead of intel driver).

Short Version: Specs and What Works

FreeBSD 6.2:

HW Out of the box With patches
Intel Core Duo SMP Yes
Intel 82801G audio No Yes
Intel 945 graphics No*
Firewire Yes
Bluetooth -- --
Modem No No
USB Yes
SATA Yes
SD No No
Intel 3945ABG WLAN No No
Gigabit Ethernet Yes**
Suspend/resume No No
Fingerprint reader No*** No

* Graphics works in VESA mode out of the box and with the i810 driver if installed from ports.

** I had strange latency on the network, though, but a dirty workaround exists.

*** The device is found and is seen as an ugen(4), so it is reachable for experiments.

I haven't tested Bluetooth at all.

Introduction

My old laptop, a Thinkpad 570, has served me well for the past seven(!) years but is starting to feel a little tired and is more or less starting to break down. In the spring of 2006 I started looking out for a new laptop.

After a long period filled with doubt and reading up on modern hardware, I decided to buy a Lenovo Thinkpad X60s. Perhaps I'm biased by my previous experiences with a Thinkpad 570 (at home) and a Thinkpad X20 (at a previous job), but I have found the Thinkpad series very, very nice.

The X60 and X60s are marketed as ultraportables. The X60s weigh in at about 1.3 kg (the X60 slightly heavier) and have a 12.1" screen of 1024x768. Nevertheless, they sport 512 MiB RAM and an 80 GB SATA disk with an Intel Core Duo processor. There is no CD-ROM nor DVD player, but you can attach one with USB or Firewire.

As far as I understand the main difference between a Thinkpad X60 and an X60s, the latter being what I have, is that the first have the fullblown Core Duo CPU and the X60s has the low voltage version. Daniel Kulesz also informs me that the X60 has a 2.5" hard disk drive and the X60s has a 1.8" hdd. The X60 also seems to be heavier according to specs. If someone knows more about the differences, contact me and I will add them here.

I had heard rumours that the quality of the Thinkpad line of laptops were going down after Lenovo bought the IBM PC division, but I had also read articles where the sturdy production quality of the X60 (and X60s) was praised. I decided to take a chance. So far, I'm really happy with the quality, although I don't think the keyboard is as nice as it was on my old 570.

If you want to run FreeBSD on a laptop there is a jungle out there. There is very little information on running FreeBSD on modern laptops. There is, however, a FreeBSD Laptop Compatibility List.

Werner Heuser also keeps a site called Tuxmobil where he collects reports on running Linux and various *BSDs on mobile devices. This report is listed under IBM/Lenovo and Mobile BSD.

The best advice I can give about what laptop to buy is to go for business class laptops from the big names. The bigger the name, the bigger the chance that a FreeBSD developer also has one of those and, hence, more support for that hardware in FreeBSD.

Quick summary of FreeBSD on a Thinkpad X60s:

I also tested to PXE boot NetBSD and Ubuntu GNU/Linux (see Other Operating Systems later).

NetBSD 3.0 wouldn't recognize any hard disks so I couldn't install it. I guess the NetBSD release doesn't have support for the SATA controller.

The Ubuntu GNU/Linux 6.06 installation program hanged and displayed only a couple of cursors, nothing more after having created filesystems, configured networking and starting to fetch packages. I tried it only once.

Network Installation with PXE

The only removable media on this notebook is an SD Card reader. I doubted that I could boot and install the OS from that. Luckily, the Thinkpad supports booting over the network with PXE.

PXE works by using DHCP and TFTP to get a network boot program (pxeboot in FreeBSD) from a server. The pxeboot program then downloads a kernel and starts the installation if you use the mfsroot image that comes with the installation CD.

But first, to get the machine to boot over the network, you have to configure the boot order in the BIOS. Press F1 when the Thinkpad is starting and change the boot order so that the "LAN" is the first option. Save and exit from BIOS.

Then copy the necessary files from the CD, set up DHCP, TFTP and NFS before booting.

FreeBSD Install Files

I downloaded the FreeBSD ISO image and mounted it locally on my server. You can make do with the "boot only" ISO, if there is one. I mounted it like this:

  # mdconfig -a -t vnode -f image.iso -u 0
  # mount -t cd9660 /dev/md0 /mnt

I copied the boot directory with all the install stuff from the CD-ROM image:

  # mkdir -p /freebsd
  # cp -Rp /mnt/boot /freebsd

Then, to unmount the ISO image:

  # umount /mnt
  # mdconfig -d -u 0

I edited the loader configuration /freebsd/boot/loader.conf to add

  vfs.root.mountfrom="ufs:/dev/md0c"

which means that the later booting process will use a ramdisk as root instead of using NFS.

DHCP Server

I configured the DHCP server by adding this to my dhcpd.conf (/usr/local/etc/dhcpd.conf on my system, from the package isc-dhcp3-server):

  host x60 {
    hardware ethernet 00:16:d3:21:5a:5a;
    fixed-address 10.0.0.20;
    next-server 10.0.0.2;
    filename "boot/pxeboot";
    option root-path "10.0.0.2:/freebsd";
  }

Obviously, you have to change the hardware ethernet address to match your X60s. Don't use my MAC address.

My internal network, as you see above, is 10.0.0.0/24. My NFS server is 10.0.0.2. The X60s will get 10.0.0.20. Change this to match your own network.

Note that the ISC DHCP server doesn't respond to SIGHUP. You have to actually stop the process and restart it to get it to read its configuration file.

TFTP Server

I enabled TFTP by editing inetd.conf and adding:

  tftp    dgram   udp     wait    root    /usr/libexec/tftpd      tftpd -l -s /freebsd

On my system I don't even keep inetd running normally, so I manually started it as well:

  # inetd -a 10.0.0.2

NFS

I edited /etc/exports and added

  /freebsd -ro -network 10.0.0.0 -mask 255.255.255.0

Again, this is for my network, 10.0.0.0/24. Change to match yours.

If you haven't got NFS running, start it and its associated programs:

  # rpcbind -h 10.0.0.2
  # mountd
  # nfsd -h 10.0.0.2

You might want to read up on the manual pages for those, especially if you're running this on a multi-homed machine, like I did. Look for the "-h" flag. You may not want to accidentally export something to the whole world.

Note that if you for some reason have the NFS server serving only over TCP (the -t flag), this won't work with PXE.

Install

Turn on your Thinkpad. It should get an IP address and some extra data via DHCP, then download pxeboot and start booting a kernel. You will then enter the ordinary FreeBSD installation process.

Running

Ethernet

I got horrid RTT times on some pings when I pinged the Thinkpad from my server:

  64 bytes from 10.0.0.20: icmp_seq=36 ttl=64 time=837.244 ms
  64 bytes from 10.0.0.20: icmp_seq=37 ttl=64 time=0.707 ms
  64 bytes from 10.0.0.20: icmp_seq=38 ttl=64 time=817.723 ms
  64 bytes from 10.0.0.20: icmp_seq=39 ttl=64 time=0.545 ms
  64 bytes from 10.0.0.20: icmp_seq=40 ttl=64 time=797.555 ms
  64 bytes from 10.0.0.20: icmp_seq=41 ttl=64 time=0.408 ms
  64 bytes from 10.0.0.20: icmp_seq=42 ttl=64 time=777.442 ms
  64 bytes from 10.0.0.20: icmp_seq=43 ttl=64 time=48.695 ms
  ^C
  --- 10.0.0.20 ping statistics ---
  44 packets transmitted, 44 packets received, 0% packet loss
  round-trip min/avg/max/stddev = 0.324/216.542/957.203/333.775 ms

I verified that it was the Intel PRO 1000 by inserting a 3Com 3c589 PCMCIA NIC and pinged it from the server:

  tim:~ % ping 10.0.0.252
  PING 10.0.0.252 (10.0.0.252): 56 data bytes
  64 bytes from 10.0.0.252: icmp_seq=0 ttl=64 time=0.777 ms
  64 bytes from 10.0.0.252: icmp_seq=1 ttl=64 time=0.616 ms
  64 bytes from 10.0.0.252: icmp_seq=2 ttl=64 time=0.670 ms
  64 bytes from 10.0.0.252: icmp_seq=3 ttl=64 time=0.657 ms
  64 bytes from 10.0.0.252: icmp_seq=4 ttl=64 time=0.668 ms
  64 bytes from 10.0.0.252: icmp_seq=5 ttl=64 time=0.670 ms
  64 bytes from 10.0.0.252: icmp_seq=6 ttl=64 time=0.618 ms
  ^C
  --- 10.0.0.252 ping statistics ---
  7 packets transmitted, 7 packets received, 0% packet loss
  round-trip min/avg/max/stddev = 0.616/0.668/0.777/0.050 ms

Interestingly, if I ping from the Thinkpad to any other machines on the same switch, I never see any latency problems with the em0 interface!

Even more interesting is that if I flood ping (ping -f) from the Thinkpad to any machine at all, the latency from other machines decreases dramatically.

By default, the FreeBSD network stack has been running in the MPSAFE mode for a while now. Perhaps my latency problem was a symptom of a race in the em(4) driver? I added debug.mpsafenet=0 to loader.conf and rebooted to check. There was no difference.

I read up on em(4). Apparently this NIC can do "interrupt throttling" not to overload the CPU with interrupts at the expense of some latency. You can control it with some sysctls. "Ah-ha!", I thought, but then realized that the latency they speak of is nowhere near what I'm seeing. Nevertheless, I tried disabling "interrupt throttling" altogether by setting theese sysctls to 0:

  dev.em.0.rx_int_delay=0
  dev.em.0.tx_int_delay=0
  dev.em.0.rx_abs_int_delay=0
  dev.em.0.tx_abs_int_delay=0

but to no avail.

I read through several web pages reporting trouble with earlier versions of the em(4) driver. One person spoke of trouble with an interfering cardbus bridge (cbb). I did what he did and disabled "cbb" in my kernel. That didn't help, but at least em0 showed up differently in vmstat -i:

  interrupt                          total       rate
    
  irq16: em0 uhci0+                   2902          5
  irq17: fwohci0+                        1          0

Earlier, it was:

  interrupt                          total       rate
    
  irq16: cbb0 em0+++                 10476          8

I also figured it might be the SMP kernel that did something, so I tried with a UP kernel instead. Same thing.

Please note: I got exactly the same behavior when booting Linux.

Aravind Gottipati <aravind at the domain freeshell.org> wrote me on 2006-06-20 to tell me:

I recently verified that the same network problem can be reproduced with the pre-installed Windows XP that comes with the laptop.

Update 2007-02-01: Jack Vogel from Intel let us all know that this is a known problem and that there is a quick and dirty workaround. It works for me:

  From: "Jack Vogel" <jfvogel at the domain gmail.com>
  Newsgroups: gmane.os.freebsd.devel.net, gmane.os.freebsd.stable,
   gmane.os.freebsd.current
  Subject: Lenovo X60 em workaround
  Date: Wed, 17 Jan 2007 12:58:04 -0800
  
  Since this was just seen, and the patch below validated as working I wanted
  to send general email to capture this:
  
  The Lenovo X60 can have issues with long ping times, this is a KNOWN
  hardware problem, and Intel is working with IBM/Lenovo, a final 'fix' has
  not been decided on yet. Nevertheless, the patch below will work, but
  I do not want to check it in as its still temporary.
  
  Address questions to me,
  
  Jack
  
  PS This is based on 6.2, but is needed for CURRENT as well.
  
  
  --- if_em.dist.c        Wed Jan 17 17:59:46 2007
  +++ if_em.c     Wed Jan 17 18:03:13 2007
  @@ -3348,6 +3348,10 @@
                 E1000_WRITE_REG(&adapter->hw, RXCSUM, reg_rxcsum);
         }
  
  +       /* TEMPORARY WORKAROUND for X60 */
  +       if (adapter->hw.mac_type == em_82573)
  +               E1000_WRITE_REG(&adapter->hw, RDTR, 32);
  +
         /* Enable Receives */
         E1000_WRITE_REG(&adapter->hw, RCTL, reg_rctl);
         /*

USB

The X60s immediately reboots if I attach a Pentax Optio camera while running. If I attach it with power off and boot I get a kernel panic when I try to mount /dev/da0. I caught this panic with the GENERIC i386 kernel:

  fatal trap 18: integer divide fault while in kernel
  cpu id = 0 apic id = 00
  instruction pointer = 0x20:0xc0853017
  stack pointer = 0x28:0xd544a524
  frame pointer = 0x28:0xd544a5ac
  code segment = base 0x0, limit 0xfffff, type 0x1b, DPL 0, pres
  1, def32 1, gran 1      
  processor eflags = interrupts enabled, resume, IOPL = 0
  current process = 577 (mount_msdosfs)

I could, however, attach an external USB mouse and use it immediately in X.

I also tried with a USB keyboard. I can use it at the same time as the integrated keyboard in both console mode and under X.

A SanDisk ImageMate 12in1 card reader works with the SD card I tested. Finally, I can access the photos from my Pentax in a convenient way.

Sound

In FreeBSD 6.1, there is no driver for the sound hardware in Thinkpad X60s. Andrea Bittau <a.bittau at the domain cs.ucl.ac.uk> has patched Stephane E. Potvin's <sepotvin at the domain videotron.ca> hdac driver and placed it here:

http://darkircop.org/hdac.tgz

Local copy

Download it, unpack it and compile the module, then load it with

  # kldload ./hdac.ko

You may want to load this at every boot by entering this line into /boot/loader.conf:

  hdac_load="YES"

and copying hdac.ko to /boot/kernel/.

Configuration

I use my own keymap in the console, so I copied freebsd-sw.kbd to /usr/share/syscons/keymaps/.

I don't need to run Sendmail, so I turned it off.

I use Latin 1 in the keyboard map, so I need a Latin 1 font as well.

I edited rc.conf and added:

  font8x16="iso-8x16"
  keymap="freebsd-sw.kbd"
  sendmail_enable="NONE"

In a feeble attempt to squeeze out more battery life, I chose to mount my filesystems with the noatime option (don't update the file access time whenever you do something with a file, even reading). This means by /etc/fstab looks like this:

  # Device                Mountpoint      FStype  Options         Dump    Pass#
  /dev/ad4s1b             none            swap    sw              0       0
  /dev/ad4s1a             /               ufs     rw,noatime      1       1
  /dev/ad4s1e             /tmp            ufs     rw,noatime      2       2
  /dev/ad4s1f             /usr            ufs     rw,noatime      2       2
  /dev/ad4s1d             /var            ufs     rw,noatime      2       2

Battery

I get approximately 1.5 hour out of the battery when running FreeBSD. Note that this was mainly me surfing the web, reading and writing in Emacs under X, no heavy compiles or a lot of disk activity.

dmesg

Here's a dmesg from a GENERIC kernel without the hdac.ko module:

  Copyright (c) 1992-2006 The FreeBSD Project.
  Copyright (c) 1979, 1980, 1983, 1986, 1988, 1989, 1991, 1992, 1993, 1994
  	The Regents of the University of California. All rights reserved.
  FreeBSD 6.1-RELEASE #0: Sun May  7 04:42:56 UTC 2006
      root@opus.cse.buffalo.edu:/usr/obj/usr/src/sys/SMP
  Timecounter "i8254" frequency 1193182 Hz quality 0
  CPU: Genuine Intel(R) CPU           L2400  @ 1.66GHz (1662.51-MHz 686-class CPU)
    Origin = "GenuineIntel"  Id = 0x6e8  Stepping = 8
    Features=0xbfe9fbff<FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,MCA,CMOV,PAT,CLFLUSH,DTS,ACPI,MMX,FXSR,SSE,SSE2,SS,HTT,TM,PBE>
    Features2=0xc1a9<SSE3,MON,VMX,EST,TM2,<b14>,<b15>>
    AMD Features=0x100000<NX>
    Cores per package: 2
  real memory  = 527302656 (502 MB)
  avail memory = 506441728 (482 MB)
  ACPI APIC Table: <LENOVO TP-7B   >
  FreeBSD/SMP: Multiprocessor System Detected: 2 CPUs
   cpu0 (BSP): APIC ID:  0
   cpu1 (AP): APIC ID:  1
  ioapic0: Changing APIC ID to 1
  ioapic0 <Version 2.0> irqs 0-23 on motherboard
  kbd1 at kbdmux0
  acpi0: <LENOVO TP-7B> on motherboard
  acpi_ec0: <Embedded Controller: GPE 0x1c, ECDT> port 0x62,0x66 on acpi0
  acpi_bus_number: can't get _ADR
  acpi_bus_number: can't get _ADR
  acpi_bus_number: can't get _ADR
  acpi_bus_number: can't get _ADR
  acpi_bus_number: can't get _ADR
  acpi_bus_number: can't get _ADR
  acpi0: Power Button (fixed)
  Timecounter "ACPI-fast" frequency 3579545 Hz quality 1000
  acpi_timer0: <24-bit timer at 3.579545MHz> port 0x1008-0x100b on acpi0
  cpu0: <ACPI CPU> on acpi0
  acpi_throttle0: <ACPI CPU Throttling> on cpu0
  cpu1: <ACPI CPU> on acpi0
  acpi_throttle1: <ACPI CPU Throttling> on cpu1
  acpi_throttle1: failed to attach P_CNT
  device_attach: acpi_throttle1 attach returned 6
  acpi_lid0: <Control Method Lid Switch> on acpi0
  acpi_button0: <Sleep Button> on acpi0
  pcib0: <ACPI Host-PCI bridge> port 0xcf8-0xcff on acpi0
  pci0: <ACPI PCI bus> on pcib0
  pci0: <display, VGA> at device 2.0 (no driver attached)
  pci0: <display> at device 2.1 (no driver attached)
  pcm0: <Intel 82801G High Definition Audio Controller> mem 0xee240000-0xee243fff irq 17 at device 27.0 on pci0
  init 0xc33a5100
  pcm0: Output Streams: 4, Input Streams: 4, Bidirectional Streams: 0
  pcm0: CORB Size: 256, RIRB Size: 256
  pcib1: <ACPI PCI-PCI bridge> irq 20 at device 28.0 on pci0
  pci2: <ACPI PCI bus> on pcib1
  em0: <Intel(R) PRO/1000 Network Connection Version - 3.2.18> port 0x2000-0x201f mem 0xee000000-0xee01ffff irq 16 at device 0.0 on pci2
  em0: Ethernet address: 00:16:d3:21:5a:5a
  pcib2: <ACPI PCI-PCI bridge> irq 21 at device 28.1 on pci0
  pci3: <ACPI PCI bus> on pcib2
  pci3: <network> at device 0.0 (no driver attached)
  pcib3: <ACPI PCI-PCI bridge> irq 22 at device 28.2 on pci0
  pci4: <ACPI PCI bus> on pcib3
  pcib4: <ACPI PCI-PCI bridge> irq 23 at device 28.3 on pci0
  pci12: <ACPI PCI bus> on pcib4
  uhci0: <UHCI (generic) USB controller> port 0x1820-0x183f irq 16 at device 29.0 on pci0
  uhci0: [GIANT-LOCKED]
  usb0: <UHCI (generic) USB controller> on uhci0
  usb0: USB revision 1.0
  uhub0: Intel UHCI root hub, class 9/0, rev 1.00/1.00, addr 1
  uhub0: 2 ports with 2 removable, self powered
  uhci1: <UHCI (generic) USB controller> port 0x1840-0x185f irq 17 at device 29.1 on pci0
  uhci1: [GIANT-LOCKED]
  usb1: <UHCI (generic) USB controller> on uhci1
  usb1: USB revision 1.0
  uhub1: Intel UHCI root hub, class 9/0, rev 1.00/1.00, addr 1
  uhub1: 2 ports with 2 removable, self powered
  uhci2: <UHCI (generic) USB controller> port 0x1860-0x187f irq 18 at device 29.2 on pci0
  uhci2: [GIANT-LOCKED]
  usb2: <UHCI (generic) USB controller> on uhci2
  usb2: USB revision 1.0
  uhub2: Intel UHCI root hub, class 9/0, rev 1.00/1.00, addr 1
  uhub2: 2 ports with 2 removable, self powered
  uhci3: <UHCI (generic) USB controller> port 0x1880-0x189f irq 19 at device 29.3 on pci0
  uhci3: [GIANT-LOCKED]
  usb3: <UHCI (generic) USB controller> on uhci3
  usb3: USB revision 1.0
  uhub3: Intel UHCI root hub, class 9/0, rev 1.00/1.00, addr 1
  uhub3: 2 ports with 2 removable, self powered
  ehci0: <Intel 82801GB/R (ICH7) USB 2.0 controller> mem 0xee444000-0xee4443ff irq 19 at device 29.7 on pci0
  ehci0: [GIANT-LOCKED]
  usb4: EHCI version 1.0
  usb4: companion controllers, 2 ports each: usb0 usb1 usb2 usb3
  usb4: <Intel 82801GB/R (ICH7) USB 2.0 controller> on ehci0
  usb4: USB revision 2.0
  uhub4: Intel EHCI root hub, class 9/0, rev 2.00/1.00, addr 1
  uhub4: 8 ports with 8 removable, self powered
  pcib5: <ACPI PCI-PCI bridge> at device 30.0 on pci0
  pci21: <ACPI PCI bus> on pcib5
  cbb0: <RF5C476 PCI-CardBus Bridge> mem 0xe4300000-0xe4300fff irq 16 at device 0.0 on pci21
  cardbus0: <CardBus bus> on cbb0
  pccard0: <16-bit PCCard bus> on cbb0
  fwohci0: <Ricoh R5C552> mem 0xe4301000-0xe43017ff irq 17 at device 0.1 on pci21
  fwohci0: OHCI version 1.0 (ROM=0)
  fwohci0: No. of Isochronous channels is 4.
  fwohci0: EUI64 00:0a:e4:06:00:16:20:1b
  fwohci0: Phy 1394a available S400, 2 ports.
  fwohci0: Link S400, max_rec 2048 bytes.
  firewire0: <IEEE1394(FireWire) bus> on fwohci0
  fwe0: <Ethernet over FireWire> on firewire0
  if_fwe0: Fake Ethernet address: 02:0a:e4:16:20:1b
  fwe0: Ethernet address: 02:0a:e4:16:20:1b
  fwe0: if_start running deferred for Giant
  sbp0: <SBP-2/SCSI over FireWire> on firewire0
  fwohci0: Initiate bus reset
  fwohci0: node_id=0xc800ffc0, gen=1, CYCLEMASTER mode
  firewire0: 1 nodes, maxhop <= 0, cable IRM = 0 (me)
  firewire0: bus manager 0 (me)
  pci21: <base peripheral> at device 0.2 (no driver attached)
  isab0: <PCI-ISA bridge> at device 31.0 on pci0
  isa0: <ISA bus> on isab0
  atapci0: <Intel ICH7 UDMA100 controller> port 0x1f0-0x1f7,0x3f6,0x170-0x177,0x376,0x1810-0x181f at device 31.1 on pci0
  ata0: <ATA channel 0> on atapci0
  ata1: <ATA channel 1> on atapci0
  atapci1: <Intel ICH7 SATA300 controller> port 0x18d0-0x18d7,0x18c4-0x18c7,0x18c8-0x18cf,0x18c0-0x18c3,0x18b0-0x18bf mem 0xee444400-0xee4447ff irq 16 at device 31.2 on pci0
  ata2: <ATA channel 0> on atapci1
  ata3: <ATA channel 1> on atapci1
  ata4: <ATA channel 2> on atapci1
  ata5: <ATA channel 3> on atapci1
  pci0: <serial bus, SMBus> at device 31.3 (no driver attached)
  acpi_tz0: <Thermal Zone> on acpi0
  acpi_tz1: <Thermal Zone> on acpi0
  atkbdc0: <Keyboard controller (i8042)> port 0x60,0x64 irq 1 on acpi0
  atkbd0: <AT Keyboard> irq 1 on atkbdc0
  kbd0 at atkbd0
  atkbd0: [GIANT-LOCKED]
  psm0: <PS/2 Mouse> irq 12 on atkbdc0
  psm0: [GIANT-LOCKED]
  psm0: model Generic PS/2 mouse, device ID 0
  sio0: configured irq 3 not in bitmap of probed irqs 0
  sio0: port may not be enabled
  battery0: <ACPI Control Method Battery> on acpi0
  acpi_acad0: <AC Adapter> on acpi0
  sio0: configured irq 3 not in bitmap of probed irqs 0
  sio0: port may not be enabled
  pmtimer0 on isa0
  orm0: <ISA Option ROMs> at iomem 0xce800-0xcf7ff,0xcf800-0xd07ff,0xdc000-0xdffff on isa0
  sc0: <System console> at flags 0x100 on isa0
  sc0: VGA <16 virtual consoles, flags=0x300>
  sio0: configured irq 4 not in bitmap of probed irqs 0
  sio0: port may not be enabled
  sio0 at port 0x3f8-0x3ff irq 4 flags 0x10 on isa0
  sio0: type 8250 or not responding
  sio1: configured irq 3 not in bitmap of probed irqs 0
  sio1: port may not be enabled
  vga0: <Generic ISA VGA> at port 0x3c0-0x3df iomem 0xa0000-0xbffff on isa0
  ugen0: STMicroelectronics Biometric Coprocessor, rev 1.00/0.01, addr 2
  Timecounters tick every 1.000 msec
  ad4: 76319MB <FUJITSU MHV2080BH 00840028> at ata2-master SATA150
  pcm0: <audio> at device 0:1 (no driver attached)
  pcm0: <modem> at device 1:2 (no driver attached)
  pcm0: Cap 441 sf e007f st 1
  pcm0: Set 0:3 10
  SMP: AP CPU #1 Launched!
  Trying to mount root from ufs:/dev/ad4s1a

Other Operating Systems

NetBSD Install

The setup to PXE boot NetBSD is almost identical, but with different installation files, of course. You need a netbsd-INSTALL kernel (I used netbsd-INSTALL-LAPTOP) and pxeboot_ia32.bin from /usr/mdec/pxeboot_ia32.bin.

You can find these (pxeboot_ia32.bin in base.tgz) on a NetBSD FTP mirror.

From base.tgz I copied usr/mdec/pxeboot_ia32.bin to /tftpboot-netbsd. I also gunzipped netbsd-INSTALL-LAPTOP in /tftpboot-netbsd.

I re-edited inetd.conf:

    tftp    dgram   udp     wait    root    /usr/libexec/tftpd      tftpd -s /tftpboot-netbsd

and restarted it.

I added this to dhcpd.conf:

  host x60-netbsd {
    hardware ethernet 00:16:d3:21:5a:5a;
    fixed-address 10.0.0.21;
    option root-path "/tftpboot-netbsd";
    filename "pxeboot_ia32.bin";
    next-server 10.0.0.2;
  }

and commented out the other entries mentioning the X60.

Then I started the X60 and the NetBSD installation started. However, when NetBSD probed the hardware, it couldn't find the hard disk and I came no further. Perhaps I should have used the ordinary netbsd-INSTALL kernel?

Ubuntu GNU/Linux Install

I followed the instructions in http://wiki.koeln.ccc.de/index.php/Ubuntu_PXE_Install shortly reproduced here.

I fetched the netboot files here:

http://archive.ubuntu.com/ubuntu/dists/dapper/main/installer-i386/current/images/netboot/

and copied them to /tftpboot-linux, then:

  cd /tftpboot-linux
  tar zxf pxeboot.tar.gz

I patched the /tftpboot-linux/pxelinux.cfg/default file with this:

  --- default.org	2004-10-31 15:32:32.000000000 +0100
  +++ default	2004-10-31 00:14:52.000000000 +0200
  @@ -13,17 +13,11 @@
   F0 debian-installer/boot-screens/f10.txt
   
   label linux
  -	kernel debian-installer/linux
  -	append vga=normal initrd=debian-installer/initrd.gz ramdisk_size=11057 root=/dev/rd/0 devfs=mount,dall rw --
  +	kernel vmlinuz
  +	append vga=normal initrd=initrd.gz ramdisk_size=11057 root=/dev/rd/0 devfs=mount,dall rw --
   label expert
  -	kernel debian-installer/linux
  -	append DEBCONF_PRIORITY=low vga=normal initrd=debian-installer/initrd.gz ramdisk_size=11057 root=/dev/rd/0 devfs=mount,dall rw --
  -label custom
  -	kernel debian-installer/linux
  -	append ubuntu/install-type=custom vga=normal initrd=debian-installer/initrd.gz ramdisk_size=11057 root=/dev/rd/0 devfs=mount,dall rw --
  -label custom-expert
  -	kernel debian-installer/linux
  -	append ubuntu/install-type=custom DEBCONF_PRIORITY=low vga=normal initrd=debian-installer/initrd.gz ramdisk_size=11057 root=/dev/rd/0 devfs=mount,dall rw --
  +	kernel vmlinuz
  +	append DEBCONF_PRIORITY=low vga=normal initrd=initrd.gz ramdisk_size=11057 root=/dev/rd/0 devfs=mount,dall rw --
   
   prompt 1
   timeout 0

Save that in a file called, for instance, file.patch, then:

  # cd /tftpboot-linux/pxelinux.cfg
  # patch default <file.patch 

Then I made a link from the IP of the X60 in hex to the default file:

  # ln -s default 0A000014

and added this entry to dhcpd.conf:

  host pxeinstall {
    hardware ethernet 00:16:d3:21:5a:5a;
    fixed-address 10.0.0.20;
    filename "pxelinux.0";
  }

and commented out the other entries about the X60 and restarted the dhcpd.

I also changed the inetd.conf so the tftpd looked in /tftpboot-linux instead and restarted inetd.

Then start the X60. It should come up with the Ubuntu boot loader.

The installtion proceeded fine and started installing packages when it suddenly stopped, with only two cursors visible. I have no idea what happened. I only tried once.