This report is listed at TuxMobil - Linux on laptops, notebooks, PDAs, mobile phones.
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.
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:
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.
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
.
The diagram shows the locations of the various connectors.
Ethernet battery | serial 3x USB | |||||||||||||
DC in |
|
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.
The CPU is a dual-core "Yonah" design operating at 2.0 GHz with the following features:
The features suggest the use of the following gcc command-line switches to direct the compiler to generate appropriate code:
-march=pentium-m | use MMX, SSE, SSE2 extensions, schedule instructions for Pentium-M |
-msse3 | use SSE3 extensions |
-mfpmath=sse | use 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-double | align all doubles on 64-bit boundaries |
-m128bit-long-double | store long doubles as 128-bit quantities |
-mregparm=3 | when calling a function, pass up to three arguments in registers |
-msseregparm | pass 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:
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
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.
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.
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.
Use the 915resolution tool to patch the TFT's native resolution of 1680x1050 into the RAM copy of your video BIOS.
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.
The CardBus controller is an O2 Micro device which works using the yenta.ko driver.
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:
Since I do not own an ExpressCard, this slot is untested yet.
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
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:
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.
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:
When inserting a SD card, additional messages show up:
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.
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:
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.
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
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.
Independent of your kernel version, compile the driver as follows:
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.
WinModem, not tested.
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.)
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.
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:
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 $