no software patents .com

Linux on a Dell Latitude D500

First of all, thanks to all the people writing reports on www.tuxmobile.org. Without them I wouldn't have been able to do this.

Author: Roland Hagemann ( mail@-SPAM-rolandhagemann.de - remove the "-SPAM-" )

Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.2 or any later version published by the Free Software Foundation.

This is supposed to be a rough overview of how I set up Linux on my Dell Latitude D500 Laptop. This guide also tries to point you to information which I'm not giving in this guide explicitly. I recently switched distributions and now use Ubuntu Linux. But as before, most of the information on this page is not distribution-specific.

Feel free to use the information provided here, but don't blame me if it doesn't work. Feedback and suggestions, however, are most appreciated.

I can't be made responsible for data loss or other damages in any way.

Overview

ACPI - Power management
Most things work
Suspend to disk Working, needs SoftwareSuspend patch
Suspend to RAM Working with uswsusp
XServer Working
Hard Disk Working
DVD/CD-RW Working
Audio
Working
USB USB 1.0 working, no hardware to test 2.0
Ethernet Working
Wireless LAN Working
Modem Working
Infrared Working
Keyboard special keys Partly working
PCMCIA Should be working, but no hardware to test
TV-Out Not working
Working Partly working Not tested Not working



I guess you all know how to install Linux, so I'll spare you that part.

Kernel

At the moment, I use kernel version 2.6.11.4 patched with Software Suspend-2.1.8.2 and supermount. Con Kolivas provides more recent supermount patches: http://ck.kolivas.org/patches/2.6/
The kernel configuration file can be found here: config-2.6.11.4
You might want a resolution of 1024x768 on the console, so when you set up your bootmanager, don't forget:

vga=773                 # 1024x768 resolution on the console
resume2=swap:/dev/hdXX  # default resume partition

For the first parameter also check linux/Documentation/fb/vesafb.txt
The last parameter for the use of software suspend. It is not necessary when you set

  CONFIG_SOFTWARE_SUSPEND_DEFAULT_RESUME2="swap:/dev/hdXX"

You might be interested in these:
dmesg
lspci
lsmod
Let me know if you need anything else

ACPI

ACPI works very nicely. You can check how long your battery will last with "acpi" or use klaptopdaemon (kde) / Battery Charge Monitor (gnome) to see the battery status in the bottom-right corner of your screen.

To dynamically change the CPU frequency, either use a program based approach like cpufreqd or a CPU load based approach like cpudynd or lamp (latter only for 2.6).

You can save some battery life when you're not actually using the laptop and put it in standby S1 mode. I wrote a small script which I run when I want the laptop to go into standby mode.
Only the active user can blank the screen, hence "su roland -c ..." in the second line.

#!/bin/sh
su roland -c "xset -display :0 dpms force off"          # turn off screen
hdparm -y /dev/hda                                      # put harddisk into standby mode
echo "1" > /proc/acpi/sleep                          # put CPU in sleep mode
hwclock --hctosys                                       # set the system time to bios time after resume

However, since software suspend works flawlessly, I normally prefer to suspend the laptop to disk when I'm not using it.
I don't use the -Y option for the deepest harddisk sleep mode because it takes about 30 seconds for the drive to spin up again and only saves about 200mW.
Being in this state the laptop only needs 7297mW ( according to /proc/acpi/battery/BAT0/state ). When working normally the consumption is about twice that amount.

For another option to save some power look at laptop-mode in the harddisk section.

Suspend to disk (with Suspend2 )

Software Suspend is working with kernel 2.6 since version 2.0.0.72. I recommend using version the stable version 2.1, which has recently been released. Check the SoftwareSuspend homepage for updates. The only remaining problems are concerning usb. It is recommended to stop hotplug and unload all usb modules before suspending. The module psmouse might also have to be unloaded.

Important: Make a backup of your whole system before trying software suspend ! It corrupted my filesystem irreparably twice !

Suspend to RAM

After a long I recently (Dec 2006) tried Suspend to RAM again, and much to my own surprise it worked straight out of the box. I used a standard Debian-Etch kernel (2.6.18-3-686) and installed uswsusp (also Debian-Etch, version 0.3~cvs20060928-6). All you need to do is

/usr/sbin/s2ram -f -s -p

Check the swsusp website and the documentation that comes with it for more information.

XServer

If possible, do not use XFree86 Version 4.3.0, it has two bugs regarding Intel's I855GM on-board graphics chip:

Both of these bugs are fixed since XFree-4.4rc2. As you might know, just before its 4.4 release, XFree86 adopted a new licensing scheme incompatible with the GPL. I therefore chose to use Xorg's XFree. The two above mentioned bugs are not existent in X11R6.7.0.

When configuring your kernel make sure you set CONFIG_AGP_INTEL=y/m. To make use of DRI also set CONFIG_DRM=y and CONFIG_DRM_I830=m.

You might be interested in my /etc/X11/xorg.conf and my /var/log/Xorg.0.log for reference here's also the old /var/log/XFree86.0.log.

To use the vga-out on a CRT or a projector, check out i855crt

Harddrive

With older kernel versions there was supposed to be a problem, but with the latest kernel DMA works. I set the DMA mode and other hdparm options in my startup scripts with the command

hdparm -d1 -A1 -X69 -m16 -u1 -a64 -c3 -B128 -W1 /dev/hda

I also enable DMA for the cdrom with

hdparm -d1 -u1 -a8 /dev/hdc

see

man hdparm

for explanations.

Since Linux 2.6.6 laptop-mode is part of the 2.6 kernel series. For more information look at linux-2.6.6/Documentation/laptop-mode.txt

DVD/CD-RW

No problems at all with the drive. For kernel 2.4 you need to specify the "hdc=scsi" boot option in order to burn CDs. For 2.6 that is no longer necessary, since CD recording is supported directly through ATAPI.

Audio

To use OSS, set up your kernel with "CONFIG_SOUND_ES1371=m" and "CONFIG_SOUND_ICH=m" and use the modules i810_audio and ac97_codec.

ALSA, however, should be preferred. It is already in the 2.6 kernel.
For 2.4 on Debian, you're best installing Alsa the Debian way. The generic instructions for 2.4 can be found on the alsa-project page. After installing, unload any OSS modules, load snd-intel8x0 and ALSA works like charm.

USB

USB is not a problem. Look at the kernel-config for the appropriate options. I could not yet test USB 2.0, due to the lack of hardware.

Ethernet

The built-in 10/100 MBit network-card works without any problems. Just use the module e100 which you get when you use "CONFIG_E100=m" in your Kernel.

Wireless LAN

I use the wireless card regurlarly now both at university and at home.
It works with the ndiswrapper module (ndiswrapper.sf.net for more information). To set up the wireless device you need the wireless-tools, which should be available for every distribution. I had some trouble with WPA (Wireless Protected Access) in the past. But these issues have been resolved since ndiswrapper-0.12 with wpa_supplicant-0.3.0. On Gentoo all you have to do is

emerge ndiswrapper wpa_supplicant

Then edit /etc/conf.d/wpa_supplicant and /etc/wpa_supplicant.conf and then

/etc/init.d/wpa_supplicant start
/etc/init.d/net.wlan0 start

to bring up the wireless network. For more information and more detailed explanations look at the ndiswrapper and wpa_supplicant homepages, especially the ndiswrapper wiki. The wpa_supplicant homepage is http://hostap.epitest.fi/wpa_supplicant/. Thanks to Jos Delbar for his help with my WPA problems

The ndiswrapper module should work with the Dell TrueMobile 1400 (Broadcom) and the Intel PRO/Wireless 2100 (Centrino) cards.
You might also want to look at these sites:

Jon Lech Johansen started writing a 2.6 driver for the Intel PRO/Wireless 2100 card. http://nanocrew.net/blog/ipw2100/

And there is the closed source driver from Linuxant, which costs 20$. It should be working with both kinds of cards.

Modem

Get the pctel driver pctel-0.9.6.tar.gz from http://linmodems.technion.ac.il/pctel-linux/

tar xzf pctel-0.9.6.tar.gz
cd pctel-0.9.6
./configure --with-hal=i8xx --with-kernel-include=<path-to-kernel-source>/include
make
insmod modules/pctel.o
insmod modules/ptserial.o irq=11 iobase=0xd400 iobase1=0xd080

I finally tested the modem. After these steps you can use the WinModem like any other.
Only works with Kernel 2.4 as far as I know.

Fn-Keys

You can get some of the keys working with hotkeys. Namely volume up & down and mute. Use "xev" to find out the keycodes and write an appropriate .def file. I won't go into any detail here, because I don't actually use it. Please look at

man hotkeys

Infrared Port

Infrared is working.
After loading the modules irport and ircomm I issued the following command:

irattach /dev/ttyS1 -s

The following command:

cat /proc/net/irda/discovery

gave me the output below with my mobile phone lying next to the laptop:

IrLMP: Discovery log:
nickname: SIEMENS S35, hint: 0x9024, saddr: 0xafb00a22, daddr: 0x08703434

PCMCIA

I have not actually tested this myself, due to the lack of hardware, but I got an email of Patrick Allison, pointing out all the problems.

PCMCIA does *not* work right out of the box for most distributions.
If you try to plug in a PCMCIA card with the standard installs of 
the pcmcia tools, it'll hang the machine immediately!

The problem is that cardmgr's default list of "allowed memory regions"
is (in /etc/pcmcia/config.opts)
include port 0x100-0x4ff, port 0x800-0x8ff, port 0xc00-0xcff

However, if you check /proc/ioports, you'd see...
0800-087f : Intel Corp. 82801DBM LPC Interface Controller
0880-08bf : Intel Corp. 82801DBM LPC Interface Controller

So when cardmgr tries to probe that region, it hangs the machine.
Whoops...

The solution is to change /etc/pcmcia.config.opts from

include port 0x100-0x4ff, port 0x800-0x8ff, port 0xc00-0xcff

to

include port 0x100-0x4ff, port 0xc00-0xcff

and then it works happily.

Thanks again to Patrick for providing this information.

Version History

Valid XHTML 1.1!