Scott's Dell Latitude D610 and Linux Fedora Core 3

This is a summary of the trials & tribulations in getting a Linux distribution, Fedora Core 3, installed on a Dell Latitude D610 laptop/portable machine.

Last updated: 15 Sep 2005

Disclaimer and Apology

My apologies in advance to all the Linux newbies out there who could really use a hand-holding, step-by-step approach. Since installing FC3, enough time has passed that I don't remember all of the step-by-step details ... I've been using Linux long enough that I take a lot for granted. And then forget that not everyone knows those things already.

This is the first product that I've purchased from Dell. The price and features were too hard to pass up, despite my reservations about buying from Dell.

Aside to other laptop makers: I chose Dell because of the flexibility to choose various components, especially the screen size. I'm sick and tired of laptops with "only" 1024x768 displays. And most other vendors give such high-res displays premium pricing, mostly because they throw in 9 billion other features that I really don't care about. C'mon Sony and you other laptop makers: get flexible, and I'll buy from you again.

In fact, I didn't really need the CPU speed or the snazzy 3D Radeon Mobility graphics card that I ended up with. Dell offered a pre-configured package that met my 1400x1050 minimum display criteria, and the price was better than any other vendor I could find. Besides, if I keep this laptop for 6 years like I did my old Sony, I'll be glad that I got the extra RAM and CPU speed.

The Dell Latitude D610 Hardware

It's my understanding that ... Dell's Latitude line is supposed to keep pretty tight control over which components are used to make each machine. For example, not changing vendor or model of graphics card or network adaptor from week to week. So, a Dell Latitude model "Blah" should always have the same hardware components as all of the other "Blah" models manufactured in the past.

However, even within the D610 line, it's my understanding (correct or not?) that there's a little wiggle room with graphics adaptors. Check to see if your hardware matches mine. If not, be a little more cautious.

The D610 has only been in production for a couple of months. I could find very few resources on the Web that mentioned the D610 and Linux, using Fedora Core 3 or any other distribution. Trial and error is oooohhhh so much fun. Oh well. Please note: the D610 hardware is NOT THE SAME as the D600 hardware!

Here's what I've been dealing with:

It would've been nice not to get Windows XP, but I have to deal with enough Microsoft stuff related to my job that I'll need XP occasionally. {shudder}

Note about the SATA hard drive: While asking Mr. Google for assistance with this laptop, I discovered many people who had problems with their Linux installation CD's that would boot and then fail to recognize the hard drive. The reason is because the bootable CD doesn't have support for SATA hard drives. Fedora Core 3 has SATA support, so I had no problem. If your installer can't see the hard drive, that's probably why.

I don't have much interest in trying to get the Dell internal modem working. I have an external PCMCIA modem card that just works as-is with Linux and FreeBSD. If someone ever figures out how to get the Dell modem working under Linux, it would be nice to know.

Installing Fedora Core 3

Installing FC3 was simple. No problem. The only trick was resizing the NTFS partition that Dell had pre-installed.

After doing a little bit of searching (thanks to Mr. Google), I found out that the manual disk partitioning program in the Mandrake 9.1 installer CD does a fine job of resizing NTFS partitions. I just happen to have a set of Mandrake 9.1 distribution CDs, so that's what I did.

  1. Boot Windows XP, then run the disk defragmentation utility. Very important, don't forget this step.
  2. Boot off the Mandrake 9.1 install CD #1.
  3. Using the manual partitioning program, select the NTFS partition (partition #2, if I remember correctly). I changed the size down to 20GB.
  4. Exit the partitioning program, save the partition table.
  5. Once you've returned to the Mandrake installation program, stop. You don't need to go any further ... unless you're going to install Mandrake 9.1 instead of FC3. :-)

Using the FC3 disk partitioning program, I created a 20GB primary partition for Linux, then an extended partition that contains a 1.5GB swap partition (/dev/sda5). I really don't need that much swap space for daily operations, but I'd heard a rumor that you need at least 1.3X the amount of swap space in order to be able to do suspend-to-disk.

I don't now if the real factor is 1.3X, 1.0X, or some other value, but I figured that 1.5X was safe for now. I have the freedom to delete and re-create a smaller swap partition if I need to.

Hey, did you just say your swap partition was /dev/sda5?

If you were paying careful attention, the /dev/sda5 thing should sound a little weird. The "sd" naming convention is usually used for SCSI hard drives. So, why is my laptop's swap partition named /dev/hda5?

The answer is that SATA drives, like USB and FireWire hard drives (including USB flash memory "thumb" drives), use the kernel's SCSI infrastructure. So, as far as the kernel is (mostly) concerned, the D610's hard drive is a SCSI disk.

This SATA-looks-like-a-SCSI-disk illusion causes problems. First, it breaks the S.M.A.R.T. disk monitoring tools. Second, it breaks the usual "hdparm" method for changing things like disk standby timers. This is a pain, and nobody appears to have a good fix for it yet. I'll talk more about it later.

Configuring X

I didn't have a problem configuring X to use the maximum 1400x1050 resolution: the FC3 installer took care of those details.

I'm not a 3D graphics user, so I really don't care much about the RADEON Mobility X300 card inside this D610. As far as I'm concerned, an adaptor from 2 years ago, with its 2-years-ago power consumption and 2-years-ago heat dissipation, would be fine with me. But Dell didn't give me much of a choice. (Bad Dell!) Oh well. So I'm stuck with it.

After the FC3 installer was finished, I did add a few lines to /etc/X11/xorg.conf. I found the advice in http://www.hep.phy.cam.ac.uk/~andersen/fedora2latitude600.html, which is about a Dell D600. Like I mentioned earlier, a D600 is not the same as a D610. But I added these lines to the "Device" section (newbies: don't add the "+" signs):

Section "Device"
Identifier "Videocard0"
Driver "radeon"
VendorName "Videocard vendor"
BoardName "ATI Radeon Mobility M300"
+ # SLF don't know if these are necessary
+ Option "AGPMode" "4"
+ Option "EnablePageFlip" "on"
+ Option "DynamicClocks" "on"
EndSection

I've read a lot about how it isn't possible to do suspend to ram or suspend to disk when you've got the Radeon's DRI enabled. I'm such a graphics luddite that I don't quite know what DRI does. But my X config file does indeed have this line in the "Module" section:

  Load "dri"
... and it also contains this section:
Section "DRI"
  Group 0
  Mode 0666
EndSection

When I was working on the suspend to RAM stuff (see below), I'd commented out both of those: everything said that DRI caused too many problems. After I gave up on suspend to RAM, I uncommented those lines and didn't have any problems. So I've left them in.

TO DO: I haven't yet added the DPMS statements that would blank the screen and hopefully turn off the LCD display light.

For what it's worth, "glxgears" reports 48 frames/sec when the window is expanded to the full display size. I guess that means that 3D acceleration isn't working. Oh well, I'll worry about it when I need it. If you're desperate, perhaps the advice at http://forums.fedoraforum.org/showthread.php?t=26697 would be helpful? (The thread is at least 3 pages long, you'll have to wade through a lot of postings by confused/puzzled ATI users.)

Suspend to RAM ... O! The Agony!

I spent a lot of time trying to get the D610 to successfully wake up from suspend to RAM (S3). Suspending worked just fine. Resuming didn't work, no matter what I tried.

Part of my problem, I think, is that I was under the illusion that the D610 was somehow related to the D600. Silly me. So I tried following several sets of advice, found at places like http://www.linux-on-laptop.com/dell.html. But they didn't work.

I'd even tried using things like the "late S3 BIOS" patch that's floating around the 'net and supposedly works great for D600 users. None of that advice work for me when I'd compiled it using the FC3 2.6.9 kernel sources & patches (which I'd extracted from the FC3 kernel source RPM), 2.6.11, and 2.6.11.7.

If someone does manage to get S3 suspend to RAM working on a Dell D610, I would love to hear about it. Please contact me at the address below so I can help spread the word.

If you can't beat 'em ... Suspend to Disk

I found a bit of advice over on the Dell Support Forums, http://forums.us.dell.com/supportforums/board?board.id=sw_linux, from a D610 user who said that the Suspend to Disk 2 project worked well for him. So I tried it.

The software, instructions, etc. can be found at http://www.suspend2.net/. I'd never used Software Suspend 2 before, but I'd been reading a fair bit of (mostly) good press about it (for example LWN and Kernel Traffic, ...). Plus, I read on the Internet that some guy got it to work on his D610, so it must be true.

Following the instructions, the patching & kernel recompiling was painless. I'd used the stock Linux 2.6.9 kernel, since that's what FC3 used (before they applied all their other patches, of course). I gambled that I wouldn't need any of the FC3 kernel patches...

... and I was right: it worked just fine the first time. The only necessary change that I needed to make to the default /etc/hibernate/hibernate.conf was this:

--- hibernate.conf.b4SLF 2005-04-04 07:31:42.000000000 -0500
+++ hibernate.conf 2005-04-28 23:55:02.000000000 -0500
@@ -24,7 +24,7 @@
DefaultConsoleLevel 1
# ImageSizeLimit 200
## useful for initrd usage:
-# SuspendDevice swap:/dev/hda2
+SuspendDevice swap:/dev/sda5
# LoadSuspendModules suspend_swap suspend_lzf suspend_text
# UnloadSuspendModulesAfterResume yes
## Powerdown method - 3 for suspend-to-RAM, 4 for ACPI S4 sleep, 5 for poweroff

Without the SuspendDevice line, the "hibernate" program complained that it couldn't figure out where my swap partition was. That swap partition was indeed in-use, according to "free". "Hibernate" complained when /etc/fstab was the original style:

LABEL=SWAP-sda5 swap swap defaults 0 0

When I changed it to look like the more UNIX'ish line below, it still complained.

/dev/sda5 swap swap defaults 0 0

Adding the SuspendDevice statement made the complaint go away.

Earlier, I said that DRI was supposed to cause problems with suspending & resuming, both to disk and to RAM. Well, I haven't had a problem with mentioning DRI in my "xorg.conf" config file and using swsusp2. In fact, I can have the XMMS application playing Ogg Vorbis or MP3 music, and while the X console is active run "hibernate", and the machine goes to sleep successfully...

... and when I wake it up again, not only does X resume successfully, but the music resumes right when it stopped. That's good suspension, eh?

I've heard that the kernel modules for USB and certain network cards need to be unloaded before suspending. I didn't have to add anything explicit like that to the "hibernate.conf" file. It just works. After all the time that I spent trying to get suspend to ram working, I was ecstatic that suspend to disk was working.

I haven't bothered adding the ability to detect the screen closing and opening to trigger suspension/resumption. I often want to keep the machine running when the screen is closed. If you want to trigger hibernation when the screen is closed, follow the ACPI daemon instructions that you find in the suspend-to-RAM world ... but use the swsusp2's "hibernate" program instead.

Ethernet adaptor

The Tigon-based 10/100/1000 Ethernet interface just works as-is.

Wireless adaptor

I just followed the directions at http://ipw2200.sourceforge.net/.

I downloaded ipw2200 version 1.0.3 and version 0.19 of the firmware (filename = ipw2200-fw-2.2.tgz). It works well with the FC3 update kernel (2.6.11-1.14_FC3) as well as a vanilla 2.6.9 kernel that I used to add Software Suspend 2 (see above).

Just a couple of things worth mentioning. First, I compiled and installed the ipw2200 driver after the Software Suspend 2 stuff, to avoid a chicken-and-egg problem. Second, some script mentioned the wrong directory that you need to manually copy the firmware into. The correct directory is /lib/firmware.

Speedstep

I'm very interested in power management. A big reason is, of course, battery power management. I don't (yet) have a secondary battery for the D610, so it's especially nice to be able to stretch the primary 6-cell battery for as long as it can last.

My bigger reason, however, is noise management. I hate fan noise! And hot components usually mean noisy fans. So, the cooler that I run the CPU (and everything else), the less fan noise to worry about.

Aside: I wonder if I should've got a different model, with a slower CPU and less RAM. Because RAM generates heat too. In the end, the pre-packaged pricing from Dell made the faster CPU and more/hotter RAM too attractive to ignore. I hope I made the right decision.

Here's the change that I made to /etc/cpuspeed.conf to understand the Pentium M power management stuff:

--- cpuspeed.conf.b4SLF 2004-10-20 10:22:42.000000000 -0500
+++ cpuspeed.conf 2005-04-27 18:47:21.000000000 -0500
@@ -1,5 +1,4 @@
VMAJOR=1
VMINOR=1
-OPTS="-i 2"
-#DRIVER="powernow-k7"
-#OPTS="-a /proc/acpi/ac_adapter/*/state -t /proc/acpi/thermal_zone/*/temperature 75"
+DRIVER="speedstep-centrino"
+OPTS="-i 2 -a /proc/acpi/ac_adapter/AC/state -t /proc/acpi/thermal_zone/THM/temperature 75"

I'm wondering if the temp setting of 75C is too low. That sounds absurd, doesn't it: 75C is damn hot! ... But, whatever sensor it is that's reading that temperature, it's quite sensitive. I use this hack to watch the CPU speed and temperature:

#!/bin/sh

flast=0
tlast=0
while [ 1 ]; do
    fnow=`cat /sys/devices/system/cpu/cpu0/cpufreq/cpuinfo_cur_freq`
    if [ $fnow != $flast ]; then
        echo "`date` -> $fnow"
    fi

    tnow=`awk '{print $2}' /proc/acpi/thermal_zone/THM/temperature`
    if [ $tnow != $tlast ]; then
        echo "`date` -> $tnow C"
    fi

    flast=$fnow
    tlast=$tnow
    sleep 1
done

If I'm doing a CPU-intensive thing, like Ogg Vorbis encoding, this script can report 10-20C jumps in a single second after I start encoding. If encoding runs for a while, the cpuspeed daemon will cycle the CPU between 800MHz and 2000MHz regularly:

Thu May 5 01:40:52 CDT 2005 -> 800000
Thu May 5 01:40:55 CDT 2005 -> 60 C
Thu May 5 01:40:56 CDT 2005 -> 2000000
Thu May 5 01:40:59 CDT 2005 -> 67 C
Thu May 5 01:41:07 CDT 2005 -> 77 C
Thu May 5 01:41:08 CDT 2005 -> 800000
Thu May 5 01:41:11 CDT 2005 -> 63 C
Thu May 5 01:41:12 CDT 2005 -> 2000000
Thu May 5 01:41:15 CDT 2005 -> 77 C
Thu May 5 01:41:16 CDT 2005 -> 800000
Thu May 5 01:41:19 CDT 2005 -> 64 C
Thu May 5 01:41:20 CDT 2005 -> 2000000

If I use killall -USR1 cpuspeed to force the cpuspeed daemon to run at 2000MHz, I've seen the reported temperature creep up to 90C. Even after I propped the laptop up to give plenty of room around all of the air vents.

I ran the "Dell diagnostics tool" (a story in itself, see below). All of the tests ran overnight, through the next morning and half of the afternoon. The CPU fan, when it wasn't part of the test, was on high the entire time. When you boot from the diagnostics CD, it apparently boots Windows 98. I doubt that there's any thermally-aware fan or CPU speed control in Windows 98 for this new hardware. (Is there??) So the silly thing ran at (I'm assuming) 2000MHz for 18 hours without any operating system support to keep it cool.

So, is 75C too conservative? I don't know. If you do know, please contact me so that I can help spread the word. (Don't underestimate the power of Mr. Google and his search engine friends.) My contact info is below.

Laptop Mode for Linux 2.6, SATA, spindown, "can't use DMA", etc.

See http://www.xs4all.nl/~bsamwel/laptop_mode/ for details on the "Laptop Mode for Linux 2.6" power management tools. The author includes a link to a Linux Journal article that describes Laptop Mode in depth. I installed version 1.05.

The changes that I made to /etc/laptop-mode/laptop-mode.conf are as follows. I only created two partitions for Linux us, root and swap. The root partition is /dev/sda3.

--- laptop-mode.conf.b4SLF 2005-04-27 15:49:18.000000000 -0500
+++ laptop-mode.conf 2005-04-27 16:19:35.000000000 -0500
@@ -38,7 +57,7 @@
# Which partitions shall we remount? Separate the partitions by spaces.
# If you specify no partitions, then all partitions will be remounted
# that are on the drives specified in the HD option.
-REMOUNT_PARTITIONS=
+REMOUNT_PARTITIONS=/dev/sda3

# And shall we add the "noatime" option to that as well? (1=yes)
DO_REMOUNT_NOATIME=1
@@ -107,7 +126,7 @@

# The drives for which to adjust the idle timeout and power management settings.
# Separate them by a space, e.g. HD="/dev/hda /dev/hdb".
-HD="/dev/hda /dev/hdb /dev/hdc /dev/hdd"
+HD="/dev/hda /dev/hdb /dev/hdc /dev/hdd /dev/sda"

# Set the spindown timeout on the hard drives?
DO_HD=1

Unfortunately, the Laptop Mode tool cannot manage the standby timer of the D610's hard disk. Why? Because the Linux 2.6 kernels cannot pass "hdparm"'s standby timer ioctls to SATA drives.

So, most of the benefit of Laptop Mode cannot be used on the D610 yet. I'm keeping it installed, waiting for the day when the SATA and SCSI layers can communicate with SATA hard drives as well as with IDE/PATA drives.

Writing CD-ROMs and DVDs

I don't know, I haven't tried it yet. I expect that "growisofs" (from FC3's "dvd+rw-tools" RPM) and "cdrecord" (from FC3's "cdrecord" RPM) should work just fine.

DVD Playback

DVD playback works just fine with the FC3 pre-compiled RPMs that I downloaded from http://www.mplayerhq.hu/homepage/index.html.

Audio configuration: Internal audio

The internal audio controller works as-is. According to "lspci", the device is:

00:1e.2 Multimedia audio controller: Intel Corp. 82801FB/FBM/FR/FW/FRW (ICH6 Family) AC'97 Audio Controller (rev 03)

Programs such as "ogg123", "xmms", and "mplayer"/"gmplayer" have no problem with this audio controller.

Some people have been tripped up by the default volume being set to zero. A fix cited by several people is:

  1. Run XMMS or some other application to make music/noise while you adjust volume levels.
  2. Use "aumix", "alsamixer", or whatever tool to adjust the master, Pcm, and Pcm2 volume levels to what you wish the default to be.
  3. Get a superuser shell, using "su", "sudo", log in as "root", whatever.
  4. Run /usr/sbin/alsactl store 0
  5. Edit /etc/rc.local with your favorite text editor and add the line /usr/sbin/alsactl restore 0 at the end.

I also have a Griffin iMic, which is normally connected to a FreeBSD 5.3 box. I wanted to see if it worked with Fedora Core 3. Yes, it does. When I plugged the iMic into the D610, I simply saw this in /var/log/messages:

May 4 17:50:36 bb2 kernel: usbcore: registered new driver snd-usb-audio

The iMic device then uses /dev/mixer1 to control mixing levels and /dev/dsp1 for input/output. (I didn't try plugging a microphone in and trying to record something, but I assume that it would work.)

To configure an alternate DSP, the options are program-specific. For "ogg123", use ogg123 -d oss -o dsp:/dev/dspX file.ogg, where /dev/dspX is the path to your DSP device.

For XMMS, select the "Options" menu, then "Preferences". Select the "Output plugin". I was using the "OSS Driver": select "Configure", then enter alternate devices /dev/dspX and /dev/mixerX for your appropriate device.

If you use "esd" (eSound daemon) or other network audio thingies, then you'll have to configure those daemons to use the correct DSP and mixer devices.

Update 07 May 2005: I just picked up a Voyetra Turtle Beach Audio Advantage. Plugged into a USB port, it works. I'm using a Fedora Core 3 distribution, 2.6.9-based kernel, default ALSA drivers & config etc. All you need to do is tell your applications to use (for example) /dev/mixer1 and /dev/dsp1 instead of the default mixer & DSP devices.

I like the physical size: it's much smaller than the Griffin iMic that I've been using on a desktop FreeBSD 5.x box.

I do not like its volume adjustment. With a pair of small & lightweight headphones (from a Sony Walkman, easy to travel with), "pcm" level #3 is the maximum that I'd typically listen to. Anything above 10 is loud enough to cause distortion. So the only usable volume settings (range 0 - 100) are 1 and 3. So, I guess I need to go out and buy a new pair of travel-friendly small headphones that has an in-line volume control. {sigh}

Headphone jack hum/hiss/noise woes!

Overall, I'm happy with the D610 hardware. Suspend to RAM would be really nice, but I can work around it.

However, the hum and hiss and noise from the D610's headphone jack is pretty bad. There is a lot of discussion about this over on the Dell User Forums, including:

Also, this reviewer also dislikes the headphone audio quality: http://www.notebookreview.com/default.asp?newsID=2268. This person ended up buying a Turtle Beach Audio Advantage USB audio device, too.

Here is my description of the problem:

All of these notes were taken using a pair of Sony Walkman headphones plugged into the headphone jack on the left side of the Dell Latitude D610 laptop.

There is only a very quiet hiss when the BIOS banner is displayed. After XP starts booting a rhythmic ticking starts when the XP banner page appears. The hiss gets significantly louder 3 or so seconds before the login screen appears.

After the login screen appears a low & quiet buzz is added to the hiss. Whenever the mouse moves a higher pitched buzz is frequently/usually added to the hiss which stops about 1/2 second after the mouse stops moving.

After login moving the mouse adds the buzz plus additional random high squeaks and other bursts of sound very unpredictable.

When Windows Media Player plays an audio CD the background hiss and a constant high-pitched hum can be heard. Even with the volume at 50% this annoying hum can still be heard. The loud hiss and hum continues when the volume is muted. The same behavior also appears when playing back DVDs with Windows Media Player to the same distracting degree. The high-pitched hum does not stop when the WMP app is exited.

The high-pitched hum intermittently stops during some disk activity or soemtimes when application windows are opened or closed. The high-pitched hum is not affected by changing the volume or selecting mute. The high-pitched hum stops completely when changing display settings via the Display control panel but it resumes after any resolution or color depth change is completed. The high-pitched hum does not stop after disabling hardware acceleration via Control Panels - Settings - Advanced - Troubleshoot.

The high-pitched hum does not stop after disconnecting from AC power. The high-pitched hum does not stop when connected to AC power and the 6-cell main battery is removed. The high-pitched hum does not stop when Wifi is disabled via the Fn+F2 keypress.

The high-pitched hum occasionally stops after exiting all applications and control panels but usually starts again when the mouse moves or a new application is launched.

During XP shutdown all hum and hiss disappears after the screen blanks for about 1 second before the power shuts off.

I have a support ticket open with Dell to resolve this problem. Given the experiences of other unhappy D610 users with similar headphone noise problems, I am not expecting a quick fix. But I will be thrilled if Dell can fix it.

Update 07 May 2005: A Dell tech was out yesterday. He replaced the main board. No significant improvement, drat.

Eraser mouse pointer and buttons

There is a really annoying problem that I haven't quite figured out yet with the mouse pointer. Specifically, the buttons above the touchpad and below the spacebar. Depending on how the kernel has been compiled, those buttons do or don't work.

The thing that really bugs me is that I haven't been able to figure out what kernel .config knob makes the difference. Or whether it's a loadable module difference. Or both. I know it isn't a kernel command line difference ... but that's as far as I've got.

The 2.6.9+swsusp2 kernel that I compiled myself, combined with the bizillion driver modules, has both sets of buttons working. I have a copy of the .config file for anyone who might find it helpful.

Contacting Me

Darn spammers make it difficult to just put an email address in a Web-accessible document. Uff da. Well, the right hand side of my email address is "snoo" and "kles.com". Without all those double-quotes, brackets, and braces, of course. The left hand side of the address is "slfri" and then "tchie", all squashed together. Without all those double-quotes, of course. Don't forget the "@" in the middle!