Debian GNU/Linux on Dell D620

As of 200609222 this is still a work in progress. I’m making changes as I go along, so if you find this interesting please check back often. And please oh please don’t hesitate to write or leave a comment to contribute.

Introduction

This is my personal experience with the Dell Latitude D620 using Debian GNU/Linux. As usual, you should try these tips under your own risk, and your mileage may vary.

Get windows out of the way…

…or not. Since the fingerprint utilities run in windows and I have no idea if they will ever be accessible from Linux -either natively or under WINE/Xen/VMware- I decided to keep it around for the time being. I booted with Knoppix DVD 5.0 and used qtparted to resize the original Windows partition down to 8GB. I created a dummy partion with 1GB as /dev/sda3 and a swap partition with 4GBas /dev/sda4 near the end of the disk. Then I erased and re-created /dev/sda3 using all the remaining space:

# fdisk -l /dev/sda

Disk /dev/sda: 100.0 GB, 100030242816 bytes
255 heads, 63 sectors/track, 12161 cylinders
Units = cylinders of 16065 * 512 = 8225280 bytes

   Device Boot      Start         End      Blocks   Id  System
/dev/sda1               1           6       48163+  de  Dell Utility
/dev/sda2   *           7        1051     8388608+   7  HPFS/NTFS
/dev/sda3            1051       11663    85246244   83  Linux
/dev/sda4           11664       12161     4000185   82  Linux swap / Solaris

/dev/sda1 is the Dell Utility partition; it looks like it’s a standard DOS partition with the Dell diagnostic utilities.

lspci

Knoppix dutifully reports that this D620 has got this nifty collection of hardware:

00:00.0 Host bridge: Intel Corporation Mobile 945GM/PM/GMS/940GML and 945GT Express Memory Controller Hub (rev 03)
00:01.0 PCI bridge: Intel Corporation Mobile 945GM/PM/GMS/940GML and 945GT Express PCI Express Root Port (rev 03)
00:1b.0 Audio device: Intel Corporation 82801G (ICH7 Family) High Definition Audio Controller (rev 01)
00:1c.0 PCI bridge: Intel Corporation 82801G (ICH7 Family) PCI Express Port 1 (rev 01)
00:1c.1 PCI bridge: Intel Corporation 82801G (ICH7 Family) PCI Express Port 2 (rev 01)
00:1c.2 PCI bridge: Intel Corporation 82801G (ICH7 Family) PCI Express Port 3 (rev 01)
00:1d.0 USB Controller: Intel Corporation 82801G (ICH7 Family) USB UHCI #1 (rev 01)
00:1d.1 USB Controller: Intel Corporation 82801G (ICH7 Family) USB UHCI #2 (rev 01)
00:1d.2 USB Controller: Intel Corporation 82801G (ICH7 Family) USB UHCI #3 (rev 01)
00:1d.3 USB Controller: Intel Corporation 82801G (ICH7 Family) USB UHCI #4 (rev 01)
00:1d.7 USB Controller: Intel Corporation 82801G (ICH7 Family) USB2 EHCI Controller (rev 01)
00:1e.0 PCI bridge: Intel Corporation 82801 Mobile PCI Bridge (rev e1)
00:1f.0 ISA bridge: Intel Corporation 82801GBM (ICH7-M) LPC Interface Bridge (rev 01)
00:1f.2 IDE interface: Intel Corporation 82801GBM/GHM (ICH7 Family) Serial ATA Storage Controller IDE (rev 01)
00:1f.3 SMBus: Intel Corporation 82801G (ICH7 Family) SMBus Controller (rev 01)
01:00.0 VGA compatible controller: nVidia Corporation Unknown device 01d7 (rev a1)
03:01.0 CardBus bridge: O2 Micro, Inc. OZ601/6912/711E0 CardBus/SmartCardBus Controller (rev 40)
09:00.0 Ethernet controller: Broadcom Corporation NetXtreme BCM5752 Gigabit Ethernet PCI Express (rev 02)
0c:00.0 Network controller: Intel Corporation PRO/Wireless 3945ABG Network Connection (rev 02)

Installation

I used the same official 3.1r2 Debian NetInst CD I use everywhere else. I formated /dev/sda3 for reiserfs and /dev/sda4 for swap space.
During installation neither the wireless nor the wired ethernet card were detected, so I just installed with no ethernet card and waited for the base installation to finish. When asked about grub, I went for a MBR installation.
While booting debian for the first time I inserted the USB ethernet adapter that’s in my toolbox (a generic rt1805 clone I got off eBay for US$10) which would not be recognized by netinst but that works fine with the base 2.4 system upon reboot.
I switched to tty2 and did a

#  dhclient eth0

to autoconfigure the interface and complete the apt configuration and package downloading. I promptly added testing to sources.list:

#deb file:///cdrom/ sarge main

#deb cdrom:[Debian GNU/Linux 3.1 r2 _Sarge_ - Official i386 Binary-1 (20060420)]/ unstable contrib main

deb http://archive.progeny.com/debian stable main contrib non-free
deb-src http://archive.progeny.com/debian stable main contrib non-free

deb http://archive.progeny.com/debian testing main contrib non-free
deb-src http://archive.progeny.com/debian testing main contrib non-free

#deb http://archive.progeny.com/debian unstable main contrib non-free
#deb-src http://archive.progeny.com/debian unstable main contrib non-free

deb http://security.debian.org/ stable/updates main contrib non-free
deb http://security.debian.org/ testing/updates main contrib non-free

and pinned to stable in /etc/apt/preferences

Package: *
Pin: release o=stable
Pin-Priority: 995

Package: *
Pin: release o=testing
Pin-Priority: 800

Package: *
Pin: release o=unstable
Pin-Priority: 500

I immediately installed linux-image-2.6.16-2-686-smp and its dependencies to take advantage of the core duo’s SMP capability after reboot. Please note that rebooting into 2.6 wasn’t exactly straighforward -I should have installed 2.6 from the beginning- so keep reading below.

GRUB

Dell splashimage for GRUBUpon upgrading to kernel 2.6.16-2-smp and GRUB, the kernel hanged up after USB initialization. A quick peek to the kernel boot options in GRUB revealed that it had root=/dev/hda3 instead of /dev/sda3. I guess that the SATA disk was running in IDE emulation under 2.4, but it uses libsata under 2.6 so now it should be root=/dev/sda3. I changed the boot option from the GRUB boot menu (can you do *that* in your bootloader?) and changed the corresponding kopt in /boot/grub/menu.lst after booting.
I made a grub splashimage and a desktop wallpaper in JPEG format from the default Dell wallpaper in Windows. In order to use the splashimage I made a small change to /boot/grub/menu.lst:

 # Pretty colours
 color cyan/blue white/blue

+# splashimage
+splashimage=(hd0,2)/boot/grub/splashimages/dell.xpm.gz

nVidia video card

During installation xorg insisted pretty heavily on going with a vesa-compatible card. I had to tell it to use the nv driver at least four times. I went for monitor autodetection and it chose the 1440×900 resolution automagically. Nevertheless, X just didn’t run at all under kernel 2.4, it complained about not finding the touchpad and not having a pointer, but after rebooting in 2.6.1 6 everything worked (mostly) fine.
To get hardware acceleration in OpenGL I apt-get installed nvidia-glx, nvidia-kernel-2.6.16-2-686-smp and nvidia-settings and modified these sections in /etc/X11/xorg.conf

 Section "Device"
         Identifier      "Generic Video Card"
-        Driver          "nv"
+        Driver          "nvidia"
         BusID           "PCI:1:0:0"
 EndSection

 Section "Module"
         Load    "i2c"
         Load    "bitmap"
         Load    "ddc"
-        Load    "dri"
         Load    "extmod"
         Load    "freetype"
         Load    "int10"
         Load    "type1"
         Load    "vbe"
+        Load    "glx"
 EndSection

I was also supposed to zap the ‘Load “GLcore”‘ line in the Module section, but it didn’t exists anyway.

In order to enable TwinView the configuration must read like this:

Section "Device"
        Identifier      "Generic Video Card"
        Driver          "nvidia"
        BusID           "PCI:1:0:0"
        Option "TwinView"
        Option "MetaModes"                "1280x1024, 1440x900; NULL, 1440x900"
EndSection

Section "Monitor"
        Identifier      "Generic Monitor"
        Option          "DPMS"
        HorizSync       28-72
        VertRefresh     43-60
EndSection

Section "Monitor"
        Identifier      "External Monitor"
        Option          "DPMS"
        HorizSync       28-72
        VertRefresh     43-60
EndSection

My complete xorg.conf is available for downloadincluding the proietary nVidia driver configuration, TwinView and TouchPad+TrackPoint configuration.

Trackpoint and Touchpad

The trackpoint works as intended right out of the box, but the touchpad has very little acceleration.
The touchpad configuration I had in the ThinkPad R50 just doesn’t cut it for the Dell: the acceleration is just too small. These parameters in /etc/X11/xorg.conf work a lot better:

Section "InputDevice"
        Identifier      "Synaptics Touchpad"
        Driver          "synaptics"
        Option          "SendCoreEvents"        "true"
        Option          "Device"                "/dev/input/mice"
        Option          "Protocol"              "auto-dev"
        Option          "ZAxisMapping"          "4 5"
        Option          "Emulate3Buttons"       "on"
        Option          "SHMConfig"             "on"
        Option          "LeftEdge"      "85"
        Option          "RightEdge"     "1010"
        Option          "TopEdge"       "85"
        Option          "BottomEdge"    "730"
        Option          "FingerLow"     "25"
        Option          "FingerHigh"    "30"
        Option          "MaxTapTime"    "180"
        Option          "MaxTapMove"    "220"
        Option          "VertScrollDelta"       "100"
        Option          "MinSpeed"      "0.10"
        Option          "MaxSpeed"      "0.60"
        Option          "AccelFactor"   "0.2"
        Option          "HorizScrollDelta"      "0"
EndSection

I’ll look into vertical and horizontal scrolling later.

Broadcom NetXtreme BCM5752 wired ethernet card (tg3)

Didn’t work at all during netinst and under kernel 2.4, but it was detected and worked flawlessly under 2.6.16.

Intel PRO/Wireless 3945ABG wireless card (ipw3945ABG)

To get the wireless card working you’ll need to compile a few non-free packages. Head over to http://ipw3945.sourceforge.net/ and get these tarballs: ipw3945-1.1.0.tar.gz, the microcode image and the regulatory daemon. You’ll also need a newer ieee802.1 1kernel infrastructure than what’s included in 2.6.16, and you migth also want to apt-get install wireless-tools and wpasupplicant.
I untarred all packages, read carefully all READMEs and LICENCEs, and then did

cd ieee80211-1.1.14/
$ sudo make check_old
$ make
$ sudo make install
$ cd ../ipw3945-ucode-1.13/
$ sudo cp ipw3945.ucode /usr/local/lib/firmware/
$ cd ../ipw3945d-1.7.22/
$ sudo cp x86/ipw3945d /sbin/
$ cd ../ipw3945-1.1.0/
$ make
$ ./load

The “sudo make check_old” is *very* important because ipw3945 doesn’t like the (older) stock version. If you leave it in place it will take precedence over the one you are about to install and you won’t be able to connect to the network.
In order to make the supervisor daemon run when the module is loaded, I followed the instructions in the INSTALL file to create /etc/modprobe.d/ipw3945 with these lines:

install ipw3945 /sbin/modprobe --ignore-install ipw3945 ; sleep 0.5 ; /sbin/ipw3945d --quiet
remove ipw3945  /sbin/ipw3945d --kill ; /sbin/modprobe -r --ignore-remove ipw3945

I added ipw3945 to /etc/modules and then ran update-modules
Then in /etc/network-interfaces

auto lo
iface lo inet loopback

auto eth1
iface eth1 inet dhcp
        wpa-conf managed
        wpa-key-mgmt WPA-PSK
        wpa-ssid your-ssid
        wpa-passphrase your-passphrase

(Don’t forget to add the loopback interface! You might get unexpected hangs during KDE startup if this slips your mind!)
and finally

# ifup eth1

Voilá: instant Wireless!

SMP

After rebooting into 2.6.16-2-smp both cores are enabled and I get this in /proc/cpuinfo:

processor       : 0
vendor_id       : GenuineIntel
cpu family      : 6
model           : 14
model name      : Genuine Intel(R) CPU           T2400  @ 1.83GHz
stepping        : 8
cpu MHz         : 1829.086
cache size      : 2048 KB
physical id     : 0
siblings        : 2
core id         : 0
cpu cores       : 2
fdiv_bug        : no
hlt_bug         : no
f00f_bug        : no
coma_bug        : no
fpu             : yes
fpu_exception   : yes
cpuid level     : 10
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe nx constant_tsc pni monitor vmx est tm2 xtpr
bogomips        : 3665.17

processor       : 1
vendor_id       : GenuineIntel
cpu family      : 6
model           : 14
model name      : Genuine Intel(R) CPU           T2400  @ 1.83GHz
stepping        : 8
cpu MHz         : 1829.086
cache size      : 2048 KB
physical id     : 0
siblings        : 2
core id         : 1
cpu cores       : 2
fdiv_bug        : no
hlt_bug         : no
f00f_bug        : no
coma_bug        : no
fpu             : yes
fpu_exception   : yes
cpuid level     : 10
wp              : yes
flags           : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat clflush dts acpi mmx fxsr sse sse2 ss ht tm pbe nx constant_tsc pni monitor vmx est tm2 xtpr
bogomips        : 3657.81

Sound

First of all, mute that annoying beep to keep your wife from beating the crap out of you. khaoohs’ HowTo: Turn off (mute) system beep comes in handy:

# rmmod pcspkr
When I got tired of typing this whenever I rebooted, I decided to get rid of it *forever*

# echo "pcspkr" > /etc/hotplug/blacklist.d/pcspkr

Now about proper audio, alsaconf detected the sound card just fine but no sound came out at all. Non-extensive research revealed that the alsa drivers included in 2.6.16-2-smp are way too old, so I used module-assistant to build them from source, I restarted KDE sound subsystem and the sweet, sweet KDE startup sound greeted my ears.
The only glitch so far is that the microphone channel doesn't work after suspend. I'll look into it in due time.

DVD-ROM Drive

The drive won't be detected by default under 2.6.x. In order to work, the "atapi_enabled" option must be enabled when loading the libata module, but since that's loaded in initrd it must be enabled there:

# echo "libata atapi_enabled=1" >> /etc/mkinitrd/modules
# cp /boot/initrd.img-`uname -r` /boot/initrd.img-`uname -r`.bak
# mkinitrd -o /boot/initrd.img-`uname -r`
# reboot
  • Port replicator docking/undocking
  • Sometimes when I try to hot-dock the laptop hangs. However, if I suspend the machine by closing the lid before docking/undocking everything works fine.

    ToDo

    • ACPI, suspend-to-disk and ACPI-related glitches
    • IRDA
    • Bluetooth
    • Modem
    • Mobile broadband. (The sucky Dell LA configurator didn't show WWAN options, but there's a SIM slot under the battery and the BIOS says something about the radio. We'll see...)
    • Sound, beyond that annoying *bleep*
    • SmartCard reader
    • TPM chip
    • Biometrics (Fingerprint reader! Yay!)

    Certainly Related

    2 thoughts on “Debian GNU/Linux on Dell D620”

    Comments are closed.