Liberating the Fujitsu S6130 & P5020, or
Centrino in the Free World

Many recent lightweight laptops (less than 2kg) are built around Intel's Centrino architecture, which comprises the Pentium M processor, the 855 chipset family (itself including the memory subsystem, USB, audio, and graphics controller), and the PRO/Wireless network controller. Two such laptops are the Fujitsu S6130 and P5020 - as well as the slightly older models S6120 and P5010. Both are high-end ultralights, where the P Series optimises for small size, low weight, and multimedia applications and the S Series optimises for processing power. The following documents my experience with replacing the legacy OS that comes with these machines by GNU/Linux; despite my first hand experience being limited to the Fujitsu laptops, most of what is being said about the Centrino components will apply to other Centrino machines as well.

The instructions below come with absolutely NO WARRANTY. Following these instructions may result in broken hardware, a crippled laptop, and loss of data as well as loss of your sanity.

Summary: The Fujitsu S6130 and P5020 work fine with GNU/Linux. However, to make use of all hardware features - in particular, power management, wireless networking, and the Wide Super XGA display of the P5020 - work beyond simply installing one of the standard distributions is required.

The Machines

Before getting to the actual installation and configuration of GNU/Linux, first a brief summary of the hardware.

[S6130]

[P5020]

In the following, paragraphs will be explicitly labeled [S6130] or [P5020] if they are specific to a single model. Moreover, issues concerning Centrino components will be labeled [Centrino].

The Code

I am using Fedora Core 2 as the basis for the installation. However, other distributions based on the 2.6 kernel will probably be fine as well. The following will include Fedora specifics, but I will try to keep the description as distribution-neutral as I can. Crucial to getting power management working properly is the use of the 2.6 kernel. In particular, I need some some form of software suspend (save-to-memory or save-to-disk), as I move my machine frequently and don't want to have to reboot each time.

Base Installation

The base installation of Fedora Core 2 (FC2) works straight out of the box. However, it does neither contain support for the Intel PRO/Wireless LAN 2100 3B nor for FireWire. (The latter is disabled, as FireWire support in some 2.6 kernels prevents the kernel from booting on some hardware; hence, FC2 disables it to be on the save side.)

[Fedora Core] Nevertheless, here some FC2-specific hints. As the media industry is increasingly successful at making the life of Linux users harder by preventing us from watching the DVDs and listening to the music that we paid for, FC2 does not come with support for playing MP3 files or watching DVD movies. More precisely, the risk of patent litigation under US law prevents Red Hat from including the necessary software components. Fortunately, the US hasn't managed (yet?) to impose its copyright and patent law on all of the rest of the planet, so the required components can be downloaded and installed from some non-US repositories.

The yum tools makes software installations and updates from a collection of Fedora repositories very convenient - provided your network connection is of sufficient bandwidth. To add additional package repositories to the set considered by yum, you need to edit the file /etc/yum.conf. Personally, I am using the Fedora Extras repository in combination with rpm.livna.org. To use those, add the following to your /etc/yum.conf:

[extras-stable]
name=Fedora Core $releasever - Fedora US (Stable)
baseurl=http://download.fedora.us/fedora/fedora/$releasever/$basearch/RPMS.stable/
gpgcheck=1

[livna-stable]
name=Livna.org Fedora Compatible Packages (Stable)
failovermethod=priority
baseurl=http://rpm.livna.org/fedora/$releasever/$basearch/yum/stable
	http://rpm.livna.org/fedora/1.92/$basearch/yum/stable
gpgcheck=1

To use the packages from Fedora Extras and rpm.livna.org download their GPG keys, as described on their web sites. Or if you trust me, execute

rpm --import http://rpm.livna.org/RPM-LIVNA-GPG-KEY
rpm --import http://www.fedora.us/FEDORA-GPG-KEY

as root.

Preparing the Kernel for Software Suspend

Suspend-to-memory (aka ACPI state S3) cannot be used with current Linux kernels on the Fujitsu S6130 and P5020. Although, the actual Linux kernel survives the transition, the screen stays black after the machine has otherwise resumed. The graphics adapter doesn't seem to be properly re-initialised.

Hence, I am using suspend-to-disk (aka ACPI state S4). Linux currently has three implementations of that functionality, of which - in 2.6.5 - two are shipped with the standard kernel (namely, swsusp and pmdisk) and one is available as a patch (namely swsusp2). In the following, I will describe how to get swsusp to work. I'd be interested to hear of anybody who successfully uses swsusp2 with 2.6 on the Fujitsu machines, or any other centrino laptop.

Patching the Kernel Sources

You need to have kernel sources installed on your system; i.e., on Fedora Core, you need the kernel-source package matching your running kernel. I have tried this with version 2.6.5-1.358. The vanilla kernel from kernel.org as well as the kernel as shipped by FC2 will fail on resume if X is running, or more precisely if support for Intel AGP (modules agpgart and intel-agp) is loaded or compiled into the kernel - FC2 compiles it into the kernel by default. This is due to the page table setup used for the gatt table by the AGP subsystem - see Debian Bug #234976 for the gory details. The file linux-2.6.5-1.358.swsusp.diff contains a patch, originally by Pavel Machek, that fixes this problem. To apply the patch do the following:

# cd /usr/src/linux-2.6.5-1.358
# patch -p1 <linux-2.6.5-1.358.swsusp.diff

Configuring, Compiling, and Installing the New Kernel

Suspend-to-disk currently does not work properly with Linux highmem support, which is enabled by default on FC2. Hence, you need to disable this before recompiling the patched kernel. More precisely, I suggest to modify the kernel configuration included with the FC2 kernel source as follows:

You can do that by executing make gconfig, which will launch a graphical configuration editor. Alternatively you can copy my configuration file linux-2.6.5-1.358.swsusp.config to .config and execute make oldconfig. Afterwards built and install the new kernel. You can do all this by executing the following:

# cp linux-2.6.5-1.358.swsusp.config .config
# make oldconfig
# make
# make modules_install
# make install

I suggest to boot and test this new kernel before proceeding. (Note that the kernel installation script does not make the new kernel the default in the boot menu.)

Testing Software Suspend

It is advisable to first test software suspend in single-user mode without X windows. This will make it easier to isolate the cause of any potential problem. Proceed as follows:

If something goes wrong, reboot the system and add "noresume" to the boot command line in the boot menu. After you have rebooted, execute "mkswap /dev/hdaX", where "/dev/hdaX" is the name of your swap partition. This is to avoid that the system picks up an old suspend image later (and to re-enable normal swapping).

A word of warning: Swsusp stores a kernel state on disk and brings it back later. Never ever change the contents of any mounted file system between a suspend and a resume, as this will mostly likely leave you with a corrupted file system. You should also avoid adding or removing any hardware, as this can confuse the kernel.

If everything went fine so far, try suspending and resuming out of an X windows session; i.e., boot into runlevel 5 (the default with FC2) or into runlevel 3 and start X manually.

[Update: 29 Jul 4] If you want to use the kernel update to version 2.6.6, you need the kernel patch linux-2.6.6-swsusp.patch instead of the one listed above. Moreover, you can leave HIGHMEM enabled in the kernel. Otherwise, the instructions are the same.

Wireless Network Setup

The Centrino wireless adapter Intel PRO/Wireless LAN 2100 3B Mini PCI aka IPW 2100 is supported by the ipw2100 driver. Since version 0.45 both managed mode (for networks using an access point) and ad-hoc mode (for peer-to-peer networks) is supported. The easiest method to install this driver is separate from the linux kernel tree. In addition to the driver itself, the firmware for the wireless hardware needs to be installed.

Version 0.45, at least on FC2, has problems with using the hotplug subsystem to load the firmware; hence, we need to use the legacy firmware loader for the moment. Moreover, I don't need support for WEP and hence didn't include it in the installation as it requires the installation of an auxiliary package for the encryption and decryption algorithms. If you plan to use WEP, please see the installation instructions coming with the ipw2100 driver package.

First, download the driver source (version 0.45) and matching firmware. Unzip the latter and copy the three .fw files to /etc/firmware/. Then, build and install the driver as follows:

# cd /usr/src
# tar xzf ipw2100-0.45.tgz
# cd ipw2100-0.45
Edit Makefile to uncomment the two lines CONFIG_IPW2100_LEGACY_FW_LOAD=y and CONFIG_IPW2100_NOWEP=y, respectively.
# make
# make install

You can now load the driver with modprobe ipw2100 and check the diagnostic messages with the command dmesg. If the hardware has been properly recognised, you can configure the wireless network as you usually do.

Graphics: Using an External CRT Display

[27 Jul 4] The icons on the keyboard suggest that you can drive an external CRT display (via the VGA plug) after pressing Fn-F10. However, this doesn't work properly, as you can't get an image on both the external and internal display simultaneously and because the screen image is shifted down off screen by a bit with a random pattern appearing on the top. In order to properly enable an external CRT display, I recommend to use the tool i855crt.


This page is part of Manuel Chakravarty's Web space.

Last modified: Thu Jul 29 10:13:43 EST 2004