18th February 2010

FreeBSD on the Lenovo ThinkPad X200

In this document, I will try to give a comprehensive report on installing FreeBSD on a Lenovo ThinkPad X200 – what I got to work, and how, and what still does not work for me. I provide this information in the hope that it might be useful, but without any implied warranty whatsoever. If you have corrections, additional insight or feedback regarding FreeBSD on the Lenovo ThinkPad X200 to share, please drop me a line.

My Lenovo ThinkPad X200 has type 7458-CD5. It currently runs amd64 RELENG_8_0.

FreeBSD 8.0

Unsupported Devices

  • Intel PRO/Wireless 5300 ABGN Wireless Adapter not supported by if_iwn:
    pci0:3:0:0 class=0x028000 card=0x10118086 chip=0x42368086 rev=0x00 hdr=0x00
    Using the updated driver in RELENG_8 works for me, as does using B. Schmidt’s driver from his Subversion repository. Also see Intel PRO Wireless.
  • Intel ICH9 HD Audio not supported by snd_ich:
    pci0:0:27:0 class=0x040300 card=0x20f217aa chip=0x293e8086 rev=0x03 hdr=0x00
  • Intel Management Engine Interface (simple comms):
    pci0:0:3:0 class=0x078000 card=0x20e617aa chip=0x2a448086 rev=0x07 hdr=0x00
  • Active Management Technology - SOL (simple comms, UART):
    pci0:0:3:0 class=0x070002 card=0x20ec17aa chip=0x2a478086 rev=0x07 hdr=0x00

Partially Supported Devices

  • Chicony Electronics Co., Ltd., product 0x480c, class 239/2, rev 2.00/31.34, addr 2 (ugen)
  • AuthenTec Fingerprint Sensor (ugen)
  • Lenovo Computer Corp ThinkPad Bluetooth with Enhanced Data Rate II, class 224/1, rev 2.00/3.99, addr 3 (ugen)

Notable Supported Devices

Ericsson F3507g Mobile Broadband Minicard Composite Device (cdce,ue)
http://www.thinkwiki.org/wiki/Ericsson_F3507g_Mobile_Broadband_Module
http://projects.thiemo.net/moin.cgi/FreeBSD_on_ThinkPad_W500
This works fine. I use picocom --baud 115200 /dev/cuaU0 with:

AT+CPIN="1234"
AT+CFUN=1
AT+CGDCONT=1,"IP","gprs.swisscom.ch"
AT*ENAP=1,1

And then I run dhclient ue0 to bring the interface up. I plan to polish this some more in order to have a decent control utility, maybe writing some TTY code (just for fun). It should be possible to automate this using stty and chat. To disable (disconnect and power-save):

AT*ENAP=0
AT+CFUN=4

Also supported, the SD reader, using 8GB SDHC card:

umass0: <RICOH USB2.0-FLASH Media, class 0/0, rev 2.00/0.01, addr 3> on uhub7
da0 at umass-sim0 bus 0 target 0 lun 0
da0: [RICOH R5U880FlashMedia 0000](RICOH_R5U880FlashMedia_0000) Removable Direct Access SCSI-2 device
da0: 40.000MB/s transfers
da0: 7790MB (15954944 512 byte sectors: 255H 63S/T 993C)
GEOM_LABEL: Label for provider da0s1 is msdosfs/NIKON D60

Loader Configuration

ichsmb_load="YES"
snd_ich_load="YES"
if_iwn_load="YES"
umodem_load="YES"
u3g_load="YES"

Loading snd_ich does not give sound yet, since ICH9 is not supported yet.

PXE Installation

Old instructions for installing FreeBSD don’t work with FreeBSD 8.0 anymore. The following procedure worked for me:

  1. On the boot server, copy the installation CD-ROM to /pxeroot.
  2. Add the following lines to /pxeroot/boot/loader.conf: vfs.root.mountfrom=“ufs:/dev/md0” vfs.root.mountfrom.options=“rw” Note that this is md0 not md0c as stated in outdated documentation. Mounting the root filesystem failed for me when using md0c.
  3. Add the following line to /etc/inetd.conf: tftp dgram udp wait root /usr/libexec/tftpd tftpd -l -s /pxeroot/boot
  4. Add the following line to /etc/exports: /pxeroot -alldirs -maproot=root -ro -network 192.0.2.0/24 With 192.0.2.0/24 being the address range assigned to your DHCP clients.
  5. Add the following lines to /usr/local/etc/dhcpd.conf: host myclient { hardware ethernet 00:11:22:33:44:55; filename “pxeboot”; next-server 192.0.2.1; } This will make the system with the MAC address 00:11:22:33:44:55 boot over PXE, getting the boot loader from tftp://192.0.2.1/pxeboot.
  6. Start all required services which you don’t start by default: /etc/rc.d/nfsd onestart /etc/rc.d/inetd onestart /usr/local/etc/rc.d/isc-dhcpd onestart And/or restart those which you already run by default to make them pick up your changes: killall -HUP mountd killall -HUP inetd /usr/local/etc/rc.d/isc-dhcpd restart
  7. Boot your client with PXE. Sysinstall should come up. When asked which installation media to install from, enter NFS from 192.0.2.1:/pxeroot.

If you want an unattended installation, you can modify install.cfg within the mfsroot.gz root filesystem image under /pxeroot/boot on the boot server.