Debian GNU/Linux on a Dell Inspiron 5100

If you have questions or comments, email me (see Contact info on the left).

News:

My Setup:

60 GB harddrive: Installed Windows XP (Working) on a 15 GB partition. Installed Debian GNU/Linux on the other 45 GB.
Memory: 256MB from Dell, 768MB with a cheap 512MB stick from Kommax.com.
Network: builtin BroadComm ethernet. Working. Updated 2004 Mar 22.
Video: ATI Radeon M6. Working (with acceleration or dual-headed). Updated 2004 Mar 22.
Sound: builtin Intel AC97 audio. Working. Updated 2004 Mar 22.
Touchpad Support: Working. Updated 2004 Mar 22.
USB Mouse: Gyration wireless. Working.
USB Printer: Epson Stylus C80. Working.
ACPI Support: Working. Updated 2004 Sep 1.
Touchpad repair required.

Ethernet card:

This was the biggest pain in the ass to get working. It seems the driver for this card (BroadComm 4401) isn't included with the 2.4 Linux kernel, so you have to download it separately. This is not easy since you won't be able to connect to the internet without the driver in the first place. So, step 1 is to get the driver onto your laptop somehow, probably via a burned CD from another computer, or a PCMCIA network card. Anyway, the module you need (for the 2.4 kernel) is bcm4400. If you have Debian, you can just

apt-get install bcm4400-source
and it will install to your /usr/src directory for you to copy to your laptop and compile. If you don't have Debian, you can probably find it by searching for bcm4400 on Google. Once you have the source on your laptop, compile it. It issued several warnings while compiling for me, but it still works. Copy the resulting bcm4400.o to /lib/modules/KERNEL-VERSION/kernel/drivers/net/. Run
modprobe bcm4400
ifup eth0
And you should be good to go. You can also put the following in your /etc/modules.conf to automatically insert the module when you ifup eth0:
alias eth0 bcm4400

Update:

I recently tried to compile bcm4400 again for the 2.4.23 kernel, and make failed to work. I had to edit the Makefile by hand and add the line
KSRC=/usr/src/linux-2.4.23/
to the top. I'm not sure why I didn't have to add this before, but if you have problems, try adding this. I'm assuming your kernel source is located at /usr/src/linux-2.4.23. If not, just replace that with the location of your kernel source (download and untar the kernel if you don't have the sources).

Kernel 2.6

The 2.6 kernel includes this driver as a module called b44. It is accessible in the kernel configuration under Device Drivers/Networking support/Ethernet (10 or 100Mbit)/. Select "EISA, VLB, PCI and on board controllers", and "Broadcom 4400". You may compile it as a module named b44.

ATI Radeon M6:

3D Acceleration

If you don't want acceleration, you can skip this. Everything should work fine already. However, if you do (as I did), you'll need to jump through a few hoops. First, you need the special dri libraries and drm modules. In Debian, set up your /etc/apt/sources.list to include the following:

deb http://dri.freedesktop.org/~daenzer/debian/dri-trunk-sid/   ./
And run:
apt-get install xlibmesa3-dri-trunk drm-trunk-module-src
Compile the drm module (which was installed to /usr/src/modules/) using their Makefile.linux, and install it (radeon.o) to /lib/modules/KERNEL-VERSION/char/drm. Before starting X, make sure the modules load in the following order:
modprobe agpgart
modprobe radeon
To avoid having to do this at every boot, I put this in my /etc/modules.conf:
pre-install radeon modprobe agpgart
To check if everything is working, once you're in X, run "glxinfo", and you should see the following near the top:
direct rendering: Yes
If it says No, then something's wrong, you don't have acceleration.

Update:

The packages you need have changed. First, drm-trunk-module-src is not necessary (it's included in at least kernels 2.4.23 and on). If you want full acceleration, install the packages with this command:
apt-get install xlibmesa-gl xlibmesa-gl1-dri-trunk xserver-xfree86-dri-trunk

Kernel 2.6

The 2.6 kernel has changed the way AGP works slightly. In addition to agpgart, you also need the appropriate agp module for your chipset. For this laptop (and many others), that is the intel-agp module. You'll need to insert the intel-agp module before radeon (agpgart will automatically be inserted with intel-agp). To do this automatically, create a file in /etc/modprobe.d/ and put the following in it:
install radeon modprobe intel-agp; modprobe --ignore-install radeon
Now run update-modules to add this line to /lib/modules/modprobe.conf. (Don't directly edit /lib/modules/modprobe.conf, as it will be overwritten by Debian). This will ensure whenever module radeon is inserted, intel-agp is inserted first, then radeon.

Dual Headed:

To get a dual-headed display, you have to sacrifice 3D acceleration (as far as I can tell). There are two uses you can make of the monitor plug in the back. If you hook up a monitor while your laptop is on, the extra monitor will be a clone of your laptop screen. That's cool enough for me, but it actually also serves as a dual-head port. To make it dual-headed, you need to have the monitor plugged in when you turn your laptop on. Also, you'll need to set up your /etc/X11/XF86Config-4 file to support a dual-headed display. Here's mine.

Sound:

OSS

This is easy. For OSS, just use the i810_audio kernel 2.4 module. To get sound on bootup, add this to your /etc/modules.conf file:

alias soundcore i810_audio

ALSA

If you want to use ALSA (recommended if you're using kernel 2.6), there is a bit more work to do. First, make sure ALSA support is enabled, and you have the right kernel modules. The important one for the Inspiron 5100 is under Device Drivers/Sound/Advanced Linux Sound Architecture/PCI devices/Intel i8x0/MX440. You'll also probably want to enable "OSS API emulation." It's fine to compile ALSA stuff as modules.

Once the modules are installed, you'll want to install the alsa tools with:

apt-get install alsa-base alsa-utils
alsaconf
You can insert the module using
modprobe snd-intel8x0
To automate this, create a file in /etc/modprobe.d/ and put the following in it:
alias snd-card-0 snd-intel8x0
Run update-modules. Now the proper ALSA modules should automatically be inserted whenever sound is played.

For some reason, ALSA likes to set the volume to 0 by default. You need to change the volume with alsamixer or some other mixer program. To save your settings, type

alsactl store
You can now type "alsactl restore" at any time to reload these settings. The alsa init script should do this for you upon bootup. Make sure you have a link from /etc/init.d/alsa to the appropriate /etc/rcX.d/ directory.

Touchpad (Synaptics):

The internal touchpad can be optimized with the Synaptics XFree86 driver. You'll most definitely want this with kernel 2.6, because touchpad support seems lacking. You can find the driver and installation instructions here.

USB Mouse (Gyration):

Getting an extra mouse to work is also kind of a pain. I have a cordless USB mouse from Gyration, so I'm not sure if this applies to all types of mouse. I had to boot with the USB cable plugged into the laptop, then insert modules "usbcore", "hid", and "input". Also, I'm not sure, but I think the modules I have to load for the mouse conflict with the modules I have to load for the printer, so I end up being able to use only one of these at a time. I'll look into it some more.

Update:

I was having problems with plugging USB devices in and out. When I first plugged something in, it would work, but if I ever unplugged it, I'd have to reboot in order to get Linux to recognize the device again. I have since upgraded to kernel 2.4.23, and compiled with module ehci-hcd (USB 2.0 support), and plugging in/out now works fine. I'm not sure which did it, but I'm pretty sure it was because this machine has a USB 2.0 interface. Now all that is required is that I "modprobe usb-uhci", and all other required modules are loaded for me.

USB Printer (Epson Stylus C80):

As was the case with many of the peripherals, there were some quirks with getting the printer working. It seems the USB cable must be connected to both the printer and laptop before booting. I don't know what it is with having to plug things in at boot for them to work with this laptop. I had the printer modules load at startup in the following order:

modprobe printer
modprobe usb-uhci
I use cupsys with the gimpprint drivers, and they work quite well - once the modules are loaded.

Update:

See USB Mouse.

Windows XP:

The first thing I did when I got my laptop was wipe out my Windows XP partition and start installing Debian. Once I got Linux all set up (which was quite an effort, what with the lack of ethernet driver), I set to work on reinstalling XP on a 10GB partition I had left open. Even this simple task caused me problems. When I tried to boot off the Windows XP re-installation CD that came with Dell, and all I got was a short "Please wait" message followed by a blank screen.

I had set a startup password upon receiving the laptop, but disabled it after a few failed Windows XP installation attempts. It still didn't work, so I filed a technical support request at Dell. Within a few hours, someone emailed me back, telling me to try resetting the BIOS. I did, and magically it worked. Apparently some other change prevented Windows from installing. I'm not sure why Windows would need to access the BIOS, but it does.

Broken Touchpad:

After a few weeks of enjoying my shiny new grey-and-blue laptop, the touchpad started to act strange. It refused to move the mouse in a straight line. Instead, the mouse would wiggle back and forth as I dragged my finger vertically. After determining that it wasn't just finger spasms, I called Dell and put in a service request, and they said they would send someone over within a few hours. Mind you, I chose the cheapest warranty, 1 year of mail-in repair service.

Within 5 minutes of the call, someone from Dell was at my house - apparently he was in the neighborhood. However, he was useless, only there to say he didn't have a box with him, and that someone would come by tomorrow to pick it up.

The next day, someone did come, but only to drop off the box I was supposed to package my laptop in. Later that day, another person came, with yet another box, to pick up my laptop. I packaged my laptop in the first box with the packing slip that came with said box, and sent it off to be repaired.

After 2 weeks passed with no word from Dell, I started to get worried. I called Technical Support, and then Customer Service, and only got computerized menus that led me to dead ends. Finally I called some number and got through to someone who told me they had my laptop, but were waiting for the new part to arrive so they could fix it. I was relieved, but still without a laptop.

A little before the 3 week mark, my laptop finally came back. All was fixed, but 3 weeks is a long time for a geek like me to go without a computer.

The moral of this little story is, if you're going to buy a laptop from Dell, spring the extra $100 to get the at-home repair warranty.

ACPI/APM support (laptop info):

APM, and its newer, more versatile cousin, ACPI, are protocols to communicate with your laptop such as viewing battery life, CPU temperature, and entering sleep/standby mode, etc. Sadly, only the most useless of these features work in Linux. I've tried compiling a kernel (2.4.21) with APM support, and a different one with the newer ACPI support, and the only thing that works is the CPU temperature information. Kernel 2.5 doesn't seem to fix anything. If you really need to know how much life your battery has, and/or be able to put your laptop in sleep mode, it seems you have 3 options:

  1. Wait a few years until Linux fully supports ACPI and/or APM.
  2. Buy a different laptop (most other laptops will report battery life, but I don't know of any for which Linux supports standby/sleep mode).
  3. Don't use Linux.
Pick your favorite. My choice is none of the above, live without ACPI. Though it would be nice to have.

Update:

Thanks to help from Jeff LaFrenier, I've finally gotten some decent ACPI support. I had to download and apply the ACPI patch from acpi.sourceforge.net to my kernel source (get one for your kernel version). Then I had to update my DSDT (information about my laptop's hardware). Here are the steps to update the DSDT for a 2.4 linux kernel (make sure you do this after applying the ACPI patch):
  1. download a dsdt.patch for your kernel
  2. download an updated DSDT for the Dell Inspiron 5100, also at acpi.sourceforge.net.
  3. download Intel's iasl tool (iasl-linux-20030228.tar.gz)
  4. ./iasl -tc dsdt.asl (where dsdt.asl is the DSDT file you downloaded from acpi.sf.net)
  5. cp dsdt.hex /usr/src/linux-2.4/drivers/acpi/tables/acpi_dsdt.c
  6. cd /usr/src/linux-2.4 && patch -p0 < dsdt.patch
  7. rebuild kernel and reboot

After doing this, battery info, thermal info, standby mode, and even lid status info (whether it's open or closed) all worked for me. To activate standby mode, issue a "echo 1 > /proc/acpi/sleep". It looks like the computer freezes, because the monitor doesn't shut off, but it's working (you might want to blank the screen with xscreensaver or similar before doing this). To resume, press the power button. One caveat: if you have acpid installed (as I did), pressing power will also shutdown your system by default, interfering with resume from standby. To prevent this, either edit /etc/acpi/powerbtn.sh or remove /etc/acpi/events/power and restart acpid. Also, while in standby mode, your software clock doesn't update, so you have to sync it with your hardware clock via "hwclock" after you resume from standby.

Just be warned, if you are hoping to use standby mode to save power, I'd run some tests first to make sure you're gaining something. I let my laptop run for 20 minutes without power connected, and battery drained to 89% from 100% both with and without standby enabled. My conclusion is that standby doesn't save me any power. My little study may have been flawed, or you may have different results, so try it out yourself.

Kernel 2.6

Here are the steps for a 2.6 Kernel:
  1. download a dsdt.patch for your kernel - the 2.4.21 patch seems to still work
  2. download an updated DSDT for the Dell Inspiron 5100, also at acpi.sourceforge.net.
  3. download Intel's iasl tool (iasl-linux-20030228.tar.gz)
  4. ./iasl -tc dsdt.asl (where dsdt.asl is the DSDT file you downloaded from acpi.sf.net)
  5. cp dsdt.hex /usr/src/linux-2.6/drivers/acpi/tables/acpi_dsdt.c
  6. edit /usr/src/linux-2.6/drivers/acpi/tables/Makefile and add "acpi_dsdt.o" to the list of .o files after "obj-y :="
  7. cd /usr/src/linux-2.6 && patch -p0 < dsdt.patch
  8. rebuild kernel and reboot