Update (February 2008): Apparently the newer (2.6.23.x) kernels now work "out of the box", and it should be safe to ignore everything below. I'll leave it up for historical purposes, however.

Slackware on a Dell Inspiron 6000

If you're thinking of installing Slackware on a Dell Inspiron, you may wish to consider a different distribution - I've heard Ubuntu is better able to run `out of the box.' However, if you're devoted to Slackware and comfortable with the idea of rebuilding your kernel, read on.

This document is based on my experience installing Slackware 10.1 on a Dell Inspiron 6000. However, I suspect much of the material will be applicable for other releases of Slackware (especially 10.2) and other Inspiron laptops. It is aimed at Slackware users who are familiar and comfortable with the command line, but don't have much experience doing things like setting up SCSI RAIDs or rebuilding their kernel.

If you were to do a basic installation from the Slackware CD, most things would work. The network, however, would not. In order to get your network working, you will need the Broadcom network driver in the 2.6 kernel. So, time to install the 2.6 kernel - I assume this is old hat for you; you can get Slackware packages for Linux 2.6.13 in testing/ and follow Pat's directions to get the generic kernel set up easily enough. (Even though we're going to be building a new kernel, I'll assume you installed the generic 2.6.13 kernel and set up the initrd for it - this will set up some symlinks and keep me from having to go on about mkinitrd.)

Well, if you were to reboot at this point using either the 2.4.XX or 2.6.13 kernel, you would end up with a charming kernel panic accompanied by complaints about problems finding/mounting /dev/hda6 or something like that. This is where things get interesting. It turns out that the Dell Inspiron 6000 hard drives use the SATA interface with the 2.6 kernels, but not with the 2.4 kernels. So there are a few things you need to do to get your system up and running.

First of all, you need to build a new kernel, with support for SATA (as well as the Broadcom network driver while we're at it) built in. To do this, install kernel-source and kernel-headers out of testing/ and cd /usr/src/linux (which should be a symlink to /usr/src/linux-2.6.13). The first step to building a new kernel is to clean up some clutter using the make mrproper command - but be careful! make mrproper will also delete the kernel's .config file, which you'll need later on. So the procedure is

    $ # As root
    $ cd /usr/src/linux
    $ cp .config ~
    $ make mrproper
    $ cp ~/.config .

Next you need to load the necessary drivers. You can do this either through a menu using make menuconfig or by editing the .config file with your text editor of choice. If you choose to edit the .config file, you'll want to make sure the following lines appear in it somewhere:

    CONFIG_EXPERIMENTAL=y   # Broadcom network driver is experimental
    CONFIG_B44=y    # Broadcom network driver (EXPERIMENTAL)
    CONFIG_SCSI_SATA=y
    CONFIG_SCSI_ATA_PIIX=y
    CONFIG_SCSI_QLA2XXX=y

I personally edited the .config file by hand, but if you'd rather dig through the menus, I can tell you that the network driver can be found under Device Drivers --> Network device support --> Ethernet (10 or 100 MBit) --> Broadcom 4400 ethernet support (EXPERIMENTAL). Since the driver is experimental, you need to allow experimental drivers in your code maturity options.

If you feel comfortable recompiling your kernel, you may want to take this opportunity to remove stuff you know you aren't going to need - you'll end up with a leaner and meaner kernel in the end. However, the basic rules apply - only remove things you're sure you won't need, and don't mess with anything if you don't know what it is or what it does.

Finally build your new kernel: make && make modules_install. The next step is to go get a snack, because this generally takes a good long while.

Now that the kernel is built, execute the following commands to get it set up to boot.

    $ # Assuming the symlinks for /boot/config and /boot/vmlinuz are
    $ # pointing at the generic-2.6.13 files.
    $ # Customize for your system as needed

    $ cp /boot/vmlinuz-generic-2.6.13 /boot/vmlinuz-generic-2.6.13.backup
    $ cp /boot/config-generic-2.6.13 /boot/config-generic-2.6.13.backup
    $ cp arch/i386/boot/bzImage /boot/vmlinuz-generic-2.6.13
    $ cp .config /boot/config-generic-2.6.13
    $ lilo

Don't reboot the system yet! There are still a couple of SATA-related things we need to take care of. First of all, make sure that the /etc/lilo.conf entry for Linux-2.6.13 has "root = /dev/sdaX", instead of the "root = /dev/hdaX" that you might instinctively put there. Even though you're changing this line, do not change "boot = /dev/hda"! Do this and kernel panics will become a fond memory. And, of course, after changing /etc/lilo.conf, execute lilo again to register the change.

Next, open /etc/fstab with your text editor of choice and change all the "/dev/hdaX" partitions to "/dev/sdaX". Skip this step and fsck will fail on reboot, when it tries to check nonexistant "/dev/hdaX" partitions. Note that this means if you ever want to boot up a 2.4 kernel again (for rescue purposes, say), you will need to change back to hda in fstab. In my opinion, this isn't worth the bother - I just removed the 2.4 kernel completely.

Next, go into /boot/initrd-tree/dev and change all the "hdaX" devices to "sdaX", using rename or mv (again, something that would cause problems with a 2.4 kernel). For example: rename h s hda*. After doing that, you'll need to rebuild the initrd image and make sure lilo registers any changes:

    $ mkinitrd    # Note no parameters
    $ lilo

Now you should be ready to reboot.

Please let me know (email daschaich at gmail dot com) if I've forgotten anything or made any errors (it was a long and traumatic experience). I would like this document to actually be useful to some people.

January 2006 Updates: If you try to run lilo, it will now fail, since there is no /dev/hda. This can be easily solved by creating /dev/hda as a symbolic link pointing to /dev/sda (ln -s /dev/sda /dev/hda). Additionally, do not try to reboot with any USB device plugged in. This will claim the sda spot during boot and cause lilo to fail.

Creative Commons License
This work is licensed under a
Creative Commons License.

Valid HTML 4.01! Valid CSS!