Installing Ubuntu 7.04 (Feisty Fawn) on a ThinkPad X40
Contents
Executive summary
Ubuntu Linux 7.04 -and probably any modern distro- "just works" out-of-the-box on this machine.
No manual configuration was required. Even network, wifi, xorg (with 3D acceleration), sound and suspend-to-ram were properly configured and functional, all with opensource drivers only, at the end of the default Ubuntu installation. I've no problem with fan noises either.
But there's still some room for fine tuning:
- To improve energy efficiency and battery life (8 cell bat gives 4h with default install, 6h after tuning)
- To access some special features (like some Thinkpad special keys)
- To better use resources (memory, CPU, power, ...)
The machine
This an "all Intel" machine: differing from most other Thinkpad models because even the network, wireless and graphic controllers uses Intel chipsets. Note that some X40 models use atheros for wifi, or tg3 for ethernet (but not mine). That's why I opted for this one (beside the 1.2 Kg ultraportable form factor).
- IBM Thinkpad X40 (model 2371Y29), Centrino platform
- 1 Go DDR SDRAM (333MHz PC2700)
- CPU: Intel Pentium M (Dothan) 738 at 1.4 GHz -32KB L1 - 2Mo cache L2 - 90 nm - LV (low voltage) - 400MHz FSB (4 x 100) - MMX - SSE - SSE2 - no NX/XD bit, no hyperthreading, no 64bits - socket 479 - (Enhanced) EIST SpeedStep - CPUID : 6D6 (cpu family: 6 / model: 13 / stepping: 6)
- Southbridge chipset ICH4-M (Intel 82801DBM) : PCI, USB, IDE
- Intel gigabit ethernet controller (linux kernel module: e1000) 82541GI MT mobile (support PXE boot :)
- Wifi controller: Intel PRO/Wireless 2200BG Mini-PCI Adapter on a MiniPCI slot
- Northbridge / Graphic chipset : Intel Extreme Graphics 2 (Intel 855GME)
- Ricoh R5C511 PCMCIA controller (CardBus slot)
- IrDA
- TFT display: 12" screen, @1024x768 nominal resolution
- Hard Drive : 1.8" - PATA - 40 Go - 4200 RPM - Hitachi DK13FA-40B
- ATA controler : Intel 82801DBM Ultra ATA storage controller 24CA
- Audio controller: AD1981B AC'97 (linux kernel module: i810_audio)
- Weigth / size: 1.24 Kg / 26.8 cm x 23.7 cm x 2.4 cm
- UltraBase X4 with broken DVDROM
- Batteries :
- default small one: 4 cells, Li-Ion, 1900mAh (about 27.4W) ~ 3h00
- new one : 8 cells, Li-Ion, 4400 mAh (about 63W), 0.4 kg, ref (FRU) : IBM-92P1083 ~5h30
- BIOS version : 1UETD3WW (2.08 ), built on 2006-12-21, released on 2007/01/31
- IBM ThinkPad Embedded Controller version : 1UHTA6WW (1.56)
- FW model : TP-1U
Installation
The X40 is a very small ultraportable, and doesn't have builtin CDROM or floppy drive. I own an IBM UltraBase X4 dock station, but her DVDrom is dead. So I went for PXE (network boot) installation for the first time ; I just applied instructions from this web page : this was unexpectedly simple and worked flawlessly. Everything got installed from network, "over the air".
I kept the 4Go IBM recovery partition at the end of the drive, by superstition and for Rescue and Recovery. Afterwards, I compiled my own 2.6.22 kernel, patched with high resolution timers, to improve the battery life, and applied tips from the How to reduce power consumption.
Small glitches
Distribution (Ubuntu Feisty Fawn 7.04)
Even if everything was supported, there was some small things where Ubuntu (or Gnome, or Linux kernel) could have done better:
- Suspend-to-ram works out-of-the-box, no special tricks are needed. But sometimes, not always, for an unknown reason, the Gnome "logout" screen hides the s2ram and s2disk (hibernate) options. Whatever, we still can suspend thanks to the thinkpad's special keys (or just with an "echo mem > /sys/power/state").
- Ubuntu installs the "special keys" handler from the "hotkey-setup" package. This is suboptimal, since hotkey-setup supports less special keys than tpb, and consumes a lot of battery (see for instance this bug report).
- More generally, the whole Ubuntu system needs work to become power efficient on laptops: switch to a 2.6.21 or more kernel, use in kernel "ondemand" governor rather than userland powernowd+hald-addon-cpufreq, activate AC97 power saving features when on battery, etc.
- The default Ubuntu install left me with a lot processes related to printing (cupsd, gnome-cups-icon, hpiod, hpssd (this one is a python script!)) while I have no printer configured nor attached. Bad. They shouldn't start this until hald find something plugged or until I try to configure a printer. It also left the bluetooth "hcid" daemon, while I've no bluetooth controller. evolution-alarm-notify is running while I've never launched (let alone configured) Evolution.
Hardware and BIOS limitations
The hardware is fine for me, even if a bit old by nowadays standards (I'd prefer have an Intel AHCI chipset with SATA drive on it, for power efficiency reason, and I'd prefer a Core2Duo CPU....). It lacks also some options available on some other Thinkpads models, like the fingerprint reader (but seriously, I prefer give this up to keep my "all Intel" chipsets). It lacks a Firewire controler. The BIOS is also somehow suboptimal, in some aspects.
For an unknown reason, the BIOS disable by default the deeper power saving c-states (C3 and C4). There's two option for this that you need to turn on, despite the the misleading BIOS online help that says "usualy not needed". Type "F1" during boot to access the BIOS, then enable:
CPU power management
PCI bus power management
The BIOS, as in many laptops, hides the HPET hardware timer to the system. Windows XP don't support HPET and when enabled, it displays a yellow exclamation mark on his device manager list, hence the common vendor choice to disable it. That's a bit odd since Linux can make a great use of it: other available timers (PIC/LAPIC) can't schedule timer events more than a few milliseconds away, so they causes about 20 to 40 CPU wakeups per second. This impact the power consumption greatly. Yet, thanks to the Udo A. Steinberg and Venki Pallipadi, we have a way to force enable HPET on chipsets known to support it (this include ICH3-M, ICH4-M, ICH5-M etc.). So I applied their patch, part of the Resolution Timer patchset on top of my hand compiled 2.6.22-rc5 kernel, and all worked fine: dmesg | grep hpet
:
[ 3.740522] hpet clockevent registered
[ 3.740527] hpet0: at MMIO 0xfed00000, IRQs 2, 8, 0
[ 3.740532] hpet0: 3 64-bit timers, 14318180 Hz
[ 5.080000] Time: hpet clocksource has been installed.
Not tested yet
- TCPA chipset: Trusted Computing controller. Should be supported by tpm and tpmdd but who need this, really ?
- HDAPS (Hard Drive protection mechanism): this should work out of the box, we have a kernel module for that but I disable it because it's known to suck power
- IrDA (Infrared controller) : is known to work too, and looks supported by my kernel, but I've no other IrDA device to test with
- SD Card slot : I've no SD cards to test this
- 56K Modem: I've no use of this
System informations
dmesg | grep states
[ 5.280003] ACPI: CPU0 (power states: C1[C1] C2[C2] C3[C3] C4[C4])
[ 5.280009] ACPI: Processor [CPU] (supports 8 throttling states)
lspci :
00:00.0 Host bridge: Intel Corporation 82852/82855 GM/GME/PM/GMV Processor to I/O Controller (rev 02)
00:00.1 System peripheral: Intel Corporation 82852/82855 GM/GME/PM/GMV Processor to I/O Controller (rev 02)
00:00.3 System peripheral: Intel Corporation 82852/82855 GM/GME/PM/GMV Processor to I/O Controller (rev 02)
00:02.0 VGA compatible controller: Intel Corporation 82852/855GM Integrated Graphics Device (rev 02)
00:02.1 Display controller: Intel Corporation 82852/855GM Integrated Graphics Device (rev 02)
00:1d.0 USB Controller: Intel Corporation 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) USB UHCI Controller #1 (rev 01)
00:1d.1 USB Controller: Intel Corporation 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) USB UHCI Controller #2 (rev 01)
00:1d.2 USB Controller: Intel Corporation 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) USB UHCI Controller #3 (rev 01)
00:1d.7 USB Controller: Intel Corporation 82801DB/DBM (ICH4/ICH4-M) USB2 EHCI Controller (rev 01)
00:1e.0 PCI bridge: Intel Corporation 82801 Mobile PCI Bridge (rev 81)
00:1f.0 ISA bridge: Intel Corporation 82801DBM (ICH4-M) LPC Interface Bridge (rev 01)
00:1f.1 IDE interface: Intel Corporation 82801DBM (ICH4-M) IDE Controller (rev 01)
00:1f.3 SMBus: Intel Corporation 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) SMBus Controller (rev 01)
00:1f.5 Multimedia audio controller: Intel Corporation 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) AC'97 Audio Controller (rev 01)
00:1f.6 Modem: Intel Corporation 82801DB/DBL/DBM (ICH4/ICH4-L/ICH4-M) AC'97 Modem Controller (rev 01)
02:00.0 CardBus bridge: Ricoh Co Ltd RL5c476 II (rev 8d)
02:00.1 Generic system peripheral [0805]: Ricoh Co Ltd R5C822 SD/SDIO/MMC/MS/MSPro Host Adapter (rev 13)
02:01.0 Ethernet controller: Intel Corporation 82541GI Gigabit Ethernet Controller
02:02.0 Network controller: Intel Corporation PRO/Wireless 2200BG Network Connection (rev 05)
cat /proc/cpuinfo
processor : 0
vendor_id : GenuineIntel
cpu family : 6
model : 13
model name : Intel(R) Pentium(R) M processor 1.40GHz
stepping : 6
cpu MHz : 600.000
cache size : 2048 KB
fdiv_bug : no
hlt_bug : no
f00f_bug : no
coma_bug : no
fpu : yes
fpu_exception : yes
cpuid level : 2
wp : yes
flags : fpu vme de pse tsc msr mce cx8 apic sep mtrr pge mca cmov pat clflush dts acpi mmx fxsr sse sse2 ss tm pbe up est tm2
bogomips : 1196.93
clflush size : 64
Other Linux installation reports on Thinkpad X40
Don't forget that the X40 line included different ethernet (tg3 or e1000) and wireless (atheros or Intel) chipsets, and that Linux support involved over time. So there may be some difference between your experience with X40 and others reports. Some reports are quite old too, and Linux involve at fast pace.
Thinkwiki internal notes about installing Linux on X40
- Installation of Gentoo on a ThinkPad X40
- Installation of Debian on a ThinkPad X40
- Installation of Fedora Core on a ThinkPad X40
Exernal links to notes about installing linux, OpenBSD and FreeBSD on X40
- HARDWARE IBM ThinkPad X40 on the Gentoo wiki
- Linux and ACPI on an IBM Thinkpad X40, by Matthew Garrett
- Slackware 10.1 and 10.2 on X40, by Andrew Smith
- SuSE 9.1 on X40, by Russell Bradford
- Solaris on X40, on Sun's BigAdmin database
- Red Hat 9 on X40, by Piete Brooks
- PC-BSD on X40, by Tarotoast
- FreeBSD 5.4 on X40, by Daniel Roethlisberger
- FreeBSD 5.3 on X40, by Khairil Yusof
- OpenBSD on X40, by Joshua Stein
- OpenBSD, OpenBSD official site, i386-laptops page
- OpenBSD 3.9, 4.0 and 4.1 on X40, by Jim Rees
- Fedora Core on X40, by the infamous Eric S. Raymond
- Fedora on X40, by John Leach
- Mandrake 10.1 on X40, by Matthew Brett
- Mandriva 10.1 on X40, by ZoneO
- Mandriva 2006 on X40, by Zone0
- Ubuntu Feisty 7.04, by Chris Cartledge
- Ubuntu Dapper 6.06 on X40, by cmsj
- Ubuntu Breezy 5.04 on X40, by John Schmitt
- Ubuntu Breezy 5.04 on X40, by Martin Leopold
- Debian on X40, by Martin Würtele
- Debian on X40, by Stephan Müller;
- Debian on X40, by Sebastian Schmieg
- Debian/GNU Linux 3.1 (Sarge), by Michael Aschauer
- Debian GNU/Linux Unstable with ACPI on an IBM Thinkpad X40, by madn3ss
- Debian on X40 (with example PXE network install), by Mark Triggs
Installation Notes for Ubuntu 7.10 (Gutsy Gibbon) by dmoerner
I found this page very useful for the installation of Ubuntu 7.10 on my Thinkpad X40. There are a couple things that are different:
1) To get suspend/hibernate to work from gnome-power-manager you must do the following:
- add Option "VBERestore" "on" to Section "device" of /etc/X11/xorg.conf (see http://www.intellinuxgraphics.org/man.html for reference)
- add acpi_sleep=s3_bios resume=/dev/sda? to /boot/grub/menu.lst where ? is your swap partition.
- edit /etc/default/acpi-support and uncomment the line that says "restore video state on resume"
2) You should disable the hotkey-setup service, because the keys on the thinkpad are hardwired and the hotkey-setup can cause freezes.
3) You will want to install compizconfig-settings-manager to get more control over Compiz Fusion. In my experience, the Thinkpad can handle compiz fusion just fine, with the exception of the rain plugin and the transparent cube gears, which cause it to slow up tremendously.
4) Compile a 2.6.24-rc2 or newer kernel as soon as possible. The new scheduler and the introduction of hpet into the main line kernel (boot with the code hpet=force) are invaluable.