Update: the b44 driver discussed in this article is not wireless. With the Dell 8600 you can choose which Wifi adapter you get. I picked the Centrino (Intel PRO/Wireless 2100). I have it working just fine without ndiswrapper, but I’ll cover that in a separate article.

I’ve been meaning to post this article for a long time, but haven’t had a chance. I bought a Dell 8600 laptop as my main workstation and bumped up its RAM to 2GB. Soon after Fedora Core 2 Linux came out I braved the dual-boot-WinXP bug and installed it on the Dell. Turned out I had no problems with my dual boot set-up, but I was having trouble with lockups on boot up while loading the network driver. I upgraded from the original FC2 kernel 2.6.5-1.358.i686 to 2.6.6-1.435.i686 but that didn’t help.

I found the relevant bug report (viva OSS). Turns out I’m a victim because I have 2GB of memory. Once kernel-savvy developer Pekka Pietikäinen borrowed enough memory to
trigger the bug on his machine with the Broadcomm chipset, he confirmed the bug and worked up a patch that avoids the problem in exchange for some harsh restrictions
on the driver. Pekka has since refined the patch enough that it’s expected to be released in 2.6.9 or so, but for now I used Pekka’s original patch to build a new kernel. Here’s how I did so. I assume you have apt-rpm set up.

#I do all the following as root.
#You might want to take a more paranoid approach

#Make sure kernel source is available
#Pick from several available kernel versions
apt-get install kernel-sourcecode=2.6.6-1.435

cd /usr/src/linux-2.6.6-1.435/

#Copy over one of the stock Fedora Core configs
#Pick the right one for your architecture from the ones in the configs dir
cp configs/kernel-2.6.6-i686.config .config

#Grab and apply the patch
mkdir /usr/local/src/kernel-patches
wget -O /usr/local/src/kernel-patches/b44-largemem.pat 
    https://bugzilla.redhat.com/bugzilla/attachment.cgi?id=100988
#You should get no patch errors or failures
patch -p1 < /usr/local/src/kernel-patches/b44-largemem.pat

#Build it
make #Took about 27 minutes
make modules_install
make install

#You should now have in /boot the likes of vmlinuz-2.6.6-1.435custom,
#initrd-2.6.6-1.435custom.img and System.map-2.6.6-1.435custom
#You should now have /lib/modules/2.6.6-1.435custom
#/boot/grub/grub.conf should also be updated to launch the new kernels

#mv arch/i386/boot/bzImage /boot/vmlinuz-2.6.6-1.435.patched

If you happened to edit the kernel config I recommend copying the updated
config to /boot (e.g. cp .config /boot/config-2.6.6-1.435custom)

Despite Pekka’s modest and cautious description of his patch, I’ve had no problems with it, and the performance is just fine. I haven’t bothered to update the patch to any of his more recent refinements because it just ain’t broke right now. Thanks Pekka. Drinks are on me if we meet.

I’ve installed some kernel updates since then in the hopes Pekka’s patch was incorporated. Each time, Grub is set up to make the new kernel the default, and I just manually edit /etc/grub.conf to make 2.6.6-1.435custom the default. It’s just a matter of moving the stanza (e.g.)

title Fedora Core (2.6.6-1.435custom)
        root (hd0,4)
        kernel /boot/vmlinuz-2.6.6-1.435custom ro root=LABEL=/  noapic allowcddma apm=off acpi=on rhgb
        initrd /boot/initrd-2.6.6-1.435custom.img

back up above all similar entries and then running “grub” by hand.