This report is listed at TuxMobil - Linux on laptops, notebooks, PDAs, mobile phones.

Linux on the FSC Lifebook E8210

This page describes my experience installing Linux on a Fujitsu Siemens Computers (FSC) Lifebook E8210. Note that some words or phrases herein may be trademarks, and the links were deemed correct at the time of original publication.

In principle, you could order the notebook without an operating system, but the cost overhead of the special-purpose build far outweighs the benefits of not paying approx. 100 EUR for the pre-installed Microsoft Windows XP, at least for small orders.

I used the Linux From Scratch build instructions, not a prepackaged distribution, but since my findings concern primarily the kernel, they should be applicable to most distributions.

Typographic Conventions

Text boxes with coloured background denote command-line interaction with the system. Bold text indicates commands to be typed in. User commands are depicted with a gray background and a > prefix, commands that require system administrator privileges show a reddish background with a # prefix. Placeholder text is in italics.

Examples:

> echo "hello, world"
hello, world
# ifconfig eth0 command

Hardware

Depending on the geographic area, notebooks with the designation E8210 differ in some features such as screen resolution, separate graphics card, fingerprint reader, Trusted Platform Module (TPM), or wireless connectivity. It is advisable to determine the precise set of features on offer prior to the purchase. This page describes the model GER-206200-002, which has a WSXGA+ screen, WLAN, and Bluetooth, but lacks a separate graphics card, a fingerprint reader, a UMTS modem, or a TPM.

Overview

The following table gives an overview of the notebook's hardware. The vendor makes a high-level PDF datasheet [English, German] available.

  description identification
CPU dual-core 2.0 GHz, 2 MB cache Intel Core Duo T2500
chipset PCI-Express Intel 945GM
RAM 1x 1024 MB PC2-5300 (DDR2, 667 MHz)  
BIOS Phoenix Trusted Core (in Flash-EPROM) 1.11 release 04/10/2006
display 15.4'' WSXGA+, 1680 x 1050 pixel, non-glare  
graphics chipset-integrated, S-Video out Intel GMA950
hard drive 80 GB SATA Fujitsu MHV2080B
optical drive DVD+/-RW, DVD+R DL NEC DVD+/-RW ND-6650A IDE
CardBus 1x type I/II O2 Micro OZ711MP1/MS1 CardBus bridge
ExpressCard 1x 54 mm (also supports 34 mm) Intel ICH7-M bridge
SmartCard 1x O2 Micro SmartCardBus Reader
memory card SD/MMC O2 Micro OZ711MP1/MS1 CardBus bridge
Ethernet 10/100/1000 Mbit/s Marvell Yukon 88E8055
WLAN IEEE 802.11a/b/g Intel PRO/Wireless 3945ABG
audio in/out, S/PDIF Realtek ALC262
modem V.92 56 Kbit/s Conexant Soft Modem???
USB 4x USB 2.0 Intel ICH7-M
Firewire 1x Firewire IEEE1394 400 Mbit/s O2 Micro OZ711MP1/MS1 CardBus bridge
IrDA FIR 4.0 Mbit/s  
Bluetooth 2.0+EDR Taiyo Yuden Bluetooth Module
serial 9-pin  
parallel ECP/EPP  
dimensions 35 x 360 x 260 [mm]  
weight    

The output of lspci -vvv is more detailed. Other information is in the output of dmidecode.

Connectors

The diagram shows the locations of the various connectors.

  Ethernet battery serial 3x USB  
DC in
back
left   right
keyboard
touchpad
front
S-Video
VGA USB
parallel DVD drive
ventilation
CardBus
ExpressCard
SmartCard
modem
  IrDA Firewire SD audio  

Removing the battery allows access to the compartment for the UMTS SIM card, if any. All the USB sockets are oriented vertically, and the three in the upper right corner are quite close together. Thus, some bulky devices such as MP3 players may not fit without an extension cable.

CPU

The CPU is a dual-core "Yonah" design operating at 2.0 GHz with the following features:

Compiler Switches

The features suggest the use of the following gcc command-line switches to direct the compiler to generate appropriate code:

-march=pentium-muse MMX, SSE, SSE2 extensions, schedule instructions for Pentium-M
-msse3use SSE3 extensions
-mfpmath=sseuse the SSE unit for all floating-point calculations (avoids using the stack-based 387-style coprocessor)

Note that code compiled with these switches will not run on Pentium-M or older Pentium-4 CPUs (lack of SSE3). These switches do not break the ABI, i.e. code compiled with or without these switches can be freely intermixed.

Additional switches provide further performance enhancements, but they do break the ABI, i.e. all start-up code, libraries and object files must be compiled with the same set of switches:

-malign-doublealign all doubles on 64-bit boundaries
-m128bit-long-doublestore long doubles as 128-bit quantities
-mregparm=3when calling a function, pass up to three arguments in registers
-msseregparmpass floating-point parameters in SSE registers

In order to ensure that some or all of these switches are used for every compilation, modify gcc's spec file located at /usr/lib/gcc/i686-pc-linux-gnu/version/specs. Newer gccs have their specs file built-in by default, thus you must create it first:

# gcc -dumpspecs > /usr/lib/gcc/i686-pc-linux-gnu/version/specs

Then, add the desired options at the start of the cc1_cpu rule. Verify that they are indeed passed to the backend with a test compile such as

> gcc -v -x c /dev/null -o /dev/null

Note: Some sources claim that using -march=prescott or -march=nocona (for Core2) instead of -march=pentium-m -msse3 is the more appropriate gcc setting. There are a number of reasons why this is not necessarily true. Both Prescott and Nocona are based on the Pentium4 (NetBurst) architecture, which is radically different than its predecessors (double-pumped ALU, trace cache, etc). Pentium-M, Core, and Core2 are different designs, related to each other (but not to NetBurst). Therefore, for the purposes of instruction scheduling and loop and function alignment, asking gcc to produce Pentium-M code appears to be the better option. The differences in feature sets of the CPUs (SSE3, 64-bit instructions) are less important.

Power Saving

The Linux cpufreq infrastructure controls frequency and voltage scaling.

Read linux/Documentation/cpu-freq/. Make sure that CONFIG_CPU_FREQ is enabled in your kernel; you also need to enable the performance and conservative governors, i.e. CONFIG_CPU_FREQ_GOV_PERFORMANCE and CONFIG_CPU_FREQ_GOV_CONSERVATIVE. Also, choose CONFIG_X86_ACPI_CPUFREQ.

BIOS

Features

ACPI

It appears that there is only a single fan that operates quietly. There is no ACPI-based fan control.

Comments on the original DSDT:

The Intel IASL compiler issues only one warning when compiling the disassembled DSDT:

dsdt.dsl  2130:                     Method (SBLL, 1, NotSerialized)
Warning  1086 -                                ^ Not all control paths return a value (SBLL)
This warning appears to be harmless and irrelevant.

Hotkeys

Linux Kernel

I am using Linux kernel v2.6.18 as distributed by www.kernel.org with this configuration, except where noted otherwise. The deliberations below are intended for this kernel.

Graphics and X11

Console

Use a VESA framebuffer console, giving the vga=795 kernel command-line option gets a nice large console with a small, but well readable, font.

X Window System

Use the 915resolution tool to patch the TFT's native resolution of 1680x1050 into the RAM copy of your video BIOS.

> /usr/sbin/915resolution 50 1680 1050
Intel 800/900 Series VBIOS Hack : version 0.5.2

Chipset: 945GM
BIOS: TYPE 1
Mode Table Offset: $C0000 + $269
Mode Table Entries: 36

Patch mode 50 to resolution 1680x1050 complete

Use the X.org 7.1 server and its i810 driver. When downloading X.org 7.1, consider that some packages remained unchanged from X.org 7.0; those are not duplicated into the X.org 7.1 download directories.

This list of features has been considered:

Here is my xorg.conf file.

Hard Drive

The built-in SATA hard drive is supported by the libata / AHCI driver combination, a SCSI low-level driver, thus the hard drive shows up as /dev/sda. It reads about 37 MB/s (sustained, linear from block 0).

CardBus Slot

The CardBus controller is an O2 Micro device which works using the yenta.ko driver.

ExpressCard Slot

Kernel configuration: Choose "PCI Hotplug Support", but no specific driver in the submenu. One level up, choose "PCI Express Hotplug driver". CONFIG_HOTPLUG_PCI_PCIE should then be set, the module is called "pciehp.ko". Load the module with the option "pciehp_force=1", otherwise some errors are generated, because the ACPI firmware lacks support for the _OSC function:

Jul 9 14:19:28 localhost kernel: pci_hotplug: PCI Hot Plug PCI Core version: 0.5
Jul 9 14:19:31 localhost kernel: pciehp: HPC vendor_id 8086 device_id 27d0 ss_vid 0 ss_did 0
Jul 9 14:19:31 localhost kernel: ACPI: PCI Interrupt 0000:00:1c.0[A] -> GSI 22 (level, low) -> IRQ 169
Jul 9 14:19:31 localhost kernel: Evaluate _OSC Set fails. Status = 0x0005
Jul 9 14:19:31 localhost kernel: acpi_run_oshp:\_SB_.PCI0.RP01 OSHP fails=0x5
Jul 9 14:19:31 localhost kernel: Evaluate _OSC Set fails. Status = 0x0005
Jul 9 14:19:31 localhost kernel: acpi_run_oshp:\_SB_.PCI0 OSHP fails=0x5
Jul 9 14:19:31 localhost kernel: pciehp: Cannot get control of hotplug hardware for pci 0000:00:1c.0
Jul 9 14:19:31 localhost kernel: pciehp: HPC vendor_id 8086 device_id 27d2 ss_vid 0 ss_did 0

Since I do not own an ExpressCard, this slot is untested yet.

SmartCard

The current state of SmartCard handling in Linux is somewhat confusing, please read my general introduction.

The PCMCIA-based SmartCard reader is integrated into the CardBus bridge. You need to enable ISA and PCMCIA support in your kernel and load the "pcmcia.ko" module. Then, "pccardctl info" should diplay something like

PRODID_1="O2Micro"
PRODID_2="SmartCardBus Reader"
PRODID_3="V1.0"
PRODID_4=""
MANFID=ffff,0001
FUNCID=255

A specific driver is required. A driver package for use with CT-API clients and PC/SC Lite is available at musclecard.com, heading "O2Micro Smartcardbus PCMCIA Smartcard Reader". The driver is available for kernel 2.6, but fails to compile with kernel 2.6.17, apparently because of driver model adaptations in the PCMCIA core/initialization. The userspace shared library needs to have its ozctapi/Makefile modified to include the path to PC/SC Lite's include files. Other than that, the driver is a major mess, both userspace utilities and the driver appear to be semi-ported from Windows, UCHAR and ULONG types abound, #ifdef forests throughout.

I've created a patch that allows the driver to compile and initialize on Linux 2.6.17, but the module reference counting screws up and unloading the driver is impossible.

Your configuration file for pcscd should look like this:

FRIENDLYNAME "O2 Micro SmartCard reader"
DEVICENAME /dev/ozscr0
LIBPATH /usr/lib/pcsc/lib_OZSCR.so
CHANNELID 9

Copy the CT-API / IFDHandler library from ozctapi/lib_OZSCR.so to /usr/lib/pcsc. Independent of the DEVICENAME setting, the /dev/ozscrlx device file is opened. (With the patch above, udev will create a /dev/ozscr0. Make a manual symlink.) After starting the pcscd daemon, pcsc_scan is able to detect insertions/removals of my German health insurance card, but I have not been able to actually read the card.

SD/MMC Card Reader

The card reader is a subfunction of the O2 Micro CardBus controller. Register-level programming documentation for version 1.0 host controllers is available from the SD Card Association. Use the sdhci.ko and mmc_block.ko kernel modules.

Kernel 2.6.18: Works at about 2.7 MB/s in PIO mode with a warning, the messages are:

Jul 28 23:06:39 localhost kernel: sdhci: Secure Digital Host Controller Interface driver, 0.12
Jul 28 23:06:39 localhost kernel: sdhci: Copyright(c) Pierre Ossman
Jul 28 23:06:39 localhost kernel: sdhci: SDHCI controller found at 0000:08:03.2 [1217:7120] (rev 1)
Jul 28 23:06:39 localhost kernel: ACPI: PCI Interrupt 0000:08:03.2[A] -> GSI 16 (level, low) -> IRQ 193
Jul 28 23:06:39 localhost kernel: sdhci:slot0: Unknown controller version (16). You may experience problems.
Jul 28 23:06:39 localhost kernel: mmc0: SDHCI at 0xf0202800 irq 193 PIO

When inserting a SD card, additional messages show up:

Sep 12 22:13:05 localhost kernel: mmcblk0: mmc0:b368 SD01G 975360KiB
Sep 12 22:13:05 localhost kernel: mmcblk0: p1

Kernel 2.6.17: Works in PIO mode only. I get about 1.2 MB/s with a high-speed SD card with a 10 MB/s specification.

Analyzing the capabilities flags, it appears that the controller does not support DMA. For additional information, see the MMC wiki.

Ethernet

The Gigabit Ethernet port uses a Marvell Yukon 88E8055 chip, supported by the sky2.ko experimental kernel module.

Kernel 2.6.18 and lower: When the device is not up, the driver logs error messages such as:

sky2 eth1: phy read timeout

It appears that the device produces spurious PHY interrupts, then the driver tries to read the PHY interrupt status register when the PHY is not powered up and fails. I've created a patch that checks if the device is running before reading PHY registers, thereby avoiding the message. It also adds a stack backtrace should a "phy read timeout" occur again so that it can be debugged better.

WLAN

The WLAN is Intel 3945abg-based. Use the driver package ipw3945-linux-1.2.0 from Intel's website. It is intended for use with kernel 2.6.20 and contains the firmware file and the regulatory daemon. Earlier driver versions do not work with kernel 2.6.20 due to workqueue interface changes.

The released driver version 1.0.0 on Intel's website does not work, the error message is

eth1: skb too small (-1).

For kernel 2.6.19 and below, download the microcode and "regulatory daemon" from http://bughost.org/ipw3945/. Use the driver from ipw3945.sourceforge.net; version 1.1.0-pre2 works with kernel 2.6.18 (should also work with 2.6.17) if you apply a small patch for the Makefile.

> cd ipw3945-1.1.0-pre2
> patch -p1 < ../some/path/ipw3945.diff

Independent of your kernel version, compile the driver as follows:

> make modules
Install the microcode file so that the hotplug subsystem's firmware loader can load it. Copy the driver to the module directory:
# cp ipw3945.ko /lib/modules/version/kernel/drivers/net/wireless
# depmod -a
Load the driver and start the regulatory daemon:
# modprobe ipw3945
# /sbin/ipw3945d
ipw3945d - regulatory daemon
Copyright (C) 2005-2006 Intel Corporation. All rights reserved.
version: 1.7.18
Intel PRO/Wireless 3945ABG Network Connection found at:
/sys/bus/pci/drivers/ipw3945/0000:06:00.0
Daemon launched as pid 5028. Exiting.
The kernel messages are:
Jul 29 01:38:25 localhost kernel: ieee80211_crypt: registered algorithm 'NULL'
Jul 29 01:38:25 localhost kernel: ieee80211: 802.11 data/management/control stack, git-1.1.13
Jul 29 01:38:25 localhost kernel: ieee80211: Copyright (C) 2004-2005 Intel Corporation
Jul 29 01:38:25 localhost kernel: ipw3945: Intel(R) PRO/Wireless 3945 Network Connection driver for Linux, 1.1.0-pre2d
Jul 29 01:38:25 localhost kernel: ipw3945: Copyright(c) 2003-2006 Intel Corporation
Jul 29 01:38:25 localhost kernel: ACPI: PCI Interrupt 0000:06:00.0[A] -> GSI 19 (level, low) -> IRQ 185
Jul 29 01:38:25 localhost kernel: PCI: Setting latency timer of device 0000:06:00.0 to 64
Jul 29 01:38:25 localhost kernel: ipw3945: Detected Intel PRO/Wireless 3945ABG Network Connection
Jul 29 01:38:27 localhost kernel: ipw3945: Detected geography ABG (13 802.11bg channels, 23 802.11a channels)

Now assign the IP address and routes as usual.

WEP works, use iwconfig ... enc ... as usual. WPA and WPA2 are supposedly supported with wpa_supplicant, I have not tested it.

Modem

WinModem, not tested.

USB

Built-in ICH7 with four external USB 2.0 ports. Tested devices:

Firewire

A function on the O2 Micro CardBus controller that works with the ohci1394.ko driver. An attached external 3.5'' hard drive (Samsung HD300LD, see above) attains 26 MB/s reading and 15 MB/s writing. Since the notebook has a 4-pin Firewire port only, no power is delivered to external devices.

It appears that isochronous transfers don't work. (Experienced with the FreeBoB audio driver.)

IrDA

The "findchip" program from irda-utils fails to detect a known chip.

Bluetooth

The bluetooth USB device attaches when the "hardware radio enable" switch at the front is set to the "enabled" position. "hciconfig hci0 up" starts the radio, "hciconfig -a" then shows additional detailed information. No further testing due to lack of devices.

Sound

Works with kernel 2.6.20 or 2.6.18 and lower and the snd-intel-hda driver. Choose the "debug" option under the ALSA kernel configuration menu, otherwise everything seems to be ok, but no sound is produced. Of course, don't forget to unmute the master channel with alsamixer or equivalent.

Kernel 2.6.19 also detects the modem codec in addition to the audio codec, but then fails to initialize its mixer with the message:

Dec 9 20:21:46 localhost kernel: si3054: cannot initialize. EXT MID = 0000
That causes the whole sound initialization to fail, which causes audio players etc. to fail with messages such as
ALSA lib confmisc.c:670:(snd_func_card_driver) cannot find card '0'
ALSA lib conf.c:3479:(_snd_config_evaluate) function snd_func_card_driver returned error: No such device
ALSA lib confmisc.c:391:(snd_func_concat) error evaluating strings
ALSA lib conf.c:3479:(_snd_config_evaluate) function snd_func_concat returned error: No such device
ALSA lib confmisc.c:1070:(snd_func_refer) error evaluating name
ALSA lib conf.c:3479:(_snd_config_evaluate) function snd_func_refer returned error: No such device
ALSA lib conf.c:3947:(snd_config_expand) Evaluate error: No such device
ALSA lib pcm.c:2146:(snd_pcm_open_noupdate) Unknown PCM default
I've created a patch that removes the modem codec ID from the detection tables, making the sound work again.


Written by Jens Maurer, my e-mail address is first name dot last name at gmx dot net.
$Id: index.html,v 1.27 2007/04/06 20:41:48 jmaurer Exp $