Installing Ubuntu Breezy on a Dell Inspiron 6400

Hardware

Works

Not Tested

Note: For details on others' experiences with suspend-to-disk and 3D acceleration with Intel 945GM graphics, see here.
For Chris DeJong's experiences with getting Ubuntu Dapper working with the Inspiron 6400, see here.

Base Installation

I pre-partitioned my hard drive for a dual-boot setup with Windows prior to installing Ubuntu Breezy. The base installation was mostly straightforward, with a few gotchas:
Section "Device"
Identifier "ATI Technologies, Inc. ATI Default Card"
#Driver "ati"
Driver "vesa"
BusID "PCI:1:0:0"
EndSection
        and change "ati" to "vesa".

Getting the dual core CPUs recognized, the wireless card, and the Ricoh SD card reader working

The sdhci driver for the Ricoh SD Card Reader has been merged in the main kernel tree starting with 2.6.17-rc1, so that is the kernel version that I used for everything.

References:

For compiling kernels --

http://newbiedoc.sourceforge.net/system/kernel-pkg.html
http://www.falkotimme.com/howtos/debian_kernel2.6_compile/

For Ricoh SD card reader --

http://mmc.drzeus.cx/wiki/Linux/Drivers/sdhci
http://www.disgruntledgoat.com/content/useful/gentoo_on_inspiron630m.php#cardreader

For Intel(R) Pro/Wireless 3945ABG wireless card --

http://ipw3945.sourceforge.net/
http://ipw3945.sourceforge.net/INSTALL
http://www.ubuntuforums.org/showthread.php?t=140085
http://www.ubuntuforums.org/showthread.php?t=144820

Getting the wireless card firmware recognized --

http://www.openthought.org/blosxom.cgi/2006/02/13

Stage I: Compile and install latest kernel with patches

Downloaded kernel source (2.6.16 only, not any of the subreleases such as 2.6.16.5; thanks to Sebastian Ortiz for pointing this out) and prepatch (2.6.17-rc1) from kernel.org.

Move the source and prepatch to /usr/src and unpack them:
sudo mv linux-2.6.16.tar.bz2 /usr/src
sudo mv patch-2.6.17-rc1.bz2 /usr/src
cd /usr/src
sudo bunzip2 patch-2.6.17-rc1.bz2
sudo tar -xvjf linux-2.6.16.tar.bz2
sudo ln -s linux-2.6.16 linux
Patch the kernel 2.6.16 with the prepatch 2.6.17-rc1:
sudo cp patch-2.6.17-rc1 linux/
cd linux/
sudo patch -p1 < patch-2.6.17-rc1
Copy existing kernel configuration to /usr/src/linux:
cd /usr/src/linux
sudo cp /boot/config-2.6.12-10-386 .config
(or whatever working .config file from previous 2.6.x kernel; mine is here if you want to use that)

Install ncurses development package (required for the next step 'make menuconfig'):
sudo apt-get install libncurses5-dev
Run 'make menuconfig' to set up kernel from .config file
sudo make menuconfig
You can check/change the kernel configuration here --
  File systems ->
     <*> Ext3 journalling file system support
     [*] Ext3 extended attributes
     [*]   Ext3 POSIX Access Control Lists
     [*]   Ext3 Security Labels
  Processor type and features ->
     Processor family ->
        Pentium M
  Processor type and features ->
     [*] Symmetric multi-processing support
     (8)   Maximum number of CPUs (2-255) (NEW)
     [ ]   SMT (Hyperthreading) scheduler support (NEW)
     [*]   Multi-core scheduler support (NEW)
  Device drivers -> 
     MMD/SD Card support ->
        <*> MMC support
        [*] MMC debugging
        <*> MMC block device driver
        <*> Secure Digital Host Controller Interface support (EXPERIMENTAL)
        <*> Winbond W83L51xD SD/MMC Card Interface support
  Device drivers -> 
     SCSI device support ->
        SCSI low-level drivers ->
           <M> Serial ATA (SATA) support
           <M>   AHCI SATA support
           <M>   ServerWorks Frodo / Apple K2 SATA support
           <M>   Intel PIIX/ICH SATA support
  [etc.]
  Networking ->
     Networking options ->
        Network packet filtering (replaces ipchains) ->
           Core netfilter configuration ->
              <M> Netfilter netlink interface
              <M>   [and everything else in this section]
              <M> Netfilter Xtables support (required for ip_tables)
              <M>   [and everything else in this section]
           IP: Netfilter configuration ->
              <M> IP tables support (required for filtering/masq/NAT)
              <M>   [everything up to, but not including, ARP tables support]
  Device Drivers ->
     Network device support ->
        Wireless LAN (non-hamradio) ->
           [*] Wireless LAN drivers (non-hamradio)
     Generic Driver Options ->
        <*> Userspace firmware loading support
  Cryptographic options ->
     <M> AES cipher algorithms
     <M> AES cipher algorithms (i586)
     <M> ARC4 cipher algorithm
     <M> Michael MIC keyed digest algorithm
  Library routines ->
     <*> CRC32 functions
and save the new .config.

Install kernel-package to get the program (make-kpkg) that compiles kernels into a Debian package:
sudo apt-get install kernel-package
Install fakeroot so that you can build a .deb package as a normal user:
sudo apt-get install fakeroot
Install initrd-tools to get initrd.img (required for proper booting of kernel):
sudo apt-get install initrd-tools
Actually build the kernel as a .deb package:
(automates and replaces the sequence "make dep; make clean; make bzImage; make modules"):
sudo make-kpkg --append-to-version=.20060414 --revision=ricoh01 kernel_image
(I have the --append-to-version as the date that I built the kernel)

Install kernel:
cd ..
sudo dpkg -i kernel-image-2.6.17-rc1.20060414_ricoh01_i386.deb
Create ramdisk for kernel (otherwise the kernel panics and will not boot):
cd /boot/
sudo mkinitrd -o /boot/initrd.img-2.6.17-rc1.20060414 2.6.17-rc1.20060414
Edit /boot/grub/menu.lst (the entries for the new kernel):
title       Ubuntu, kernel 2.6.17-rc1.20060414 
root        (hd0,1)
kernel      /boot/vmlinuz-2.6.17-rc1.20060414 root=/dev/sda2 ro quiet splash
initrd      /boot/initrd.img-2.6.17-rc1.20060414
savedefault
boot

title       Ubuntu, kernel 2.6.17-rc1.20060414 (recovery mode)
root        (hd0,1)
kernel      /boot/vmlinuz-2.6.17-rc1.20060414 root=/dev/sda2 ro single
initrd      /boot/initrd.img-2.6.17-rc1.20060414
boot
Reboot (and select the new kernel when booting back in!):
sudo shutdown -r now

Note:
The kernel version and configuration I used throws a devfs-related error very early in the boot process:

mount: unknown filesystem type: devfs

I haven't noticed any problems using this configuration, and I believe that devfs is being superseded by udev in recent 2.6 kernels.

Patrick Brochu notes the following on getting rid of the error:

I reinstalled, from scratch, but did not take any of the kernel updates from the ubuntu update manager. I simply installed 2.6.17-rc3 from kernel.org and I don't see the message anymore. I can only guess that the devfs error comes from one of these updates.

As well, with self-compiled kernels, you lose the Ubuntu splashscreen on boot.

Stage II: Checking whether both processors are recognized

Post-reboot... to check on whether both processors are recognized, run the following:
sudo cat /proc/cpuinfo
This should give two entries, one for each processor:
processor       : 0
vendor_id       : GenuineIntel
cpu family      : 6
model           : 14
model name      : Genuine Intel(R) CPU           T2400  @ 1.83GHz
[...]

processor       : 1
vendor_id       : GenuineIntel
cpu family      : 6
model           : 14
model name      : Genuine Intel(R) CPU           T2400  @ 1.83GHz
[...]

Stage III: Dealing with EVMS -- "device-mapper: error adding target to table" on bootup

Edit the section "sysfs_devices" in the file /etc/evms.conf:
sysfs_devices {
   include = [ * ]
   exclude = [ sda* ]  <== ADDED sda* to exclude list
}

Stage IV: Getting the Ricoh Card Reader to work

Look at the output of dmesg to determine whether the Card Reader has been detected:
dmesg | grep sdhci
Insert a card into the card reader. The output of dmesg should indicate where the block device is for the card reader:

[17179782.012000] MMC: starting cmd 10 arg 00000200 flags 00000015
[17179782.012000] sdhci [sdhci_send_command()]: Sending cmd (10)
[17179782.012000] sdhci [sdhci_irq()]: *** sdhci:slot0 got interrupt: 0x00000001
[17179782.012000] sdhci [sdhci_finish_command()]: Ending cmd (10)
[17179782.012000] sdhci [sdhci_tasklet_finish()]: Ending request, cmd (10)
[17179782.012000] MMC: req done (10): 0: 00000900 00000000 00000000 00000000
[17179782.012000] mmcblk0: mmc0:104f S008B 6640KiB
[17179782.012000]  mmcblk0:<7>MMC: starting cmd 12 arg 00000000 flags 00000035
My card reader has been assigned block device /dev/mmcblk0p1:
(check with 'ls /dev/mmc*')

Mount the SD card (I created a directory called 'temp' in my home directory):
sudo mount -t vfat /dev/mmcblk0p1 temp/
To unmount:
sudo umount temp/
I created a directory called /media/sdcard as a permanent mount point for the SD card reader:
sudo mkdir /media/sdcard
and created an appropriate entry in /etc/fstab:
/dev/mmcblk0p1  /media/sdcard   vfat    user,noauto        0       0

Stage V: Getting the Wireless Card to work

Note: In order to get the wireless card to work, I used the ieee80211 subsystem included with the kernel, rather than downloading the ieee80211 subsystem tarball as others have done. When I used the ieee80211 subsystem tarball, it compiles but the ipw3945d daemon does not load:

./load
No modules unloaded.
WARNING: Error inserting ieee80211_crypt
(/lib/modules/2.6.17-rc3.20060504/net/ieee80211/ieee80211_crypt.ko):
Invalid module format
FATAL: Error inserting ieee80211
(/lib/modules/2.6.17-rc3.20060504/net/ieee80211/ieee80211.ko): Invalid
module format
insmod: error inserting './ipw3945.ko': -1 Invalid module format
Load failed. ipw3945d - regulatory daemon
Copyright (C) 2005-2006 Intel Corporation. All rights reserved. version: 1.7.18
2006-05-07 03:23:46: ERROR: opening /sys/bus/pci/drivers/ipw3945: No
such file or directory (2)
2006-05-07 03:23:46: ERROR: Could not find Intel PRO/Wireless 3945ABG
Network Connection


Lucas Aimaretto has reported the same issue (using kernel version 2.6.17-rc3) and that it is resolved by using the ieee80211 subsystem included with the kernel.

Installing the Driver, Regulatory Daemon, and Firmware

Download the ipw3945 driver from (contains driver, regulatory daemon, and firmware):
http://downloadfinder.intel.com/scripts-df-external/detail_desc.aspx?ProductID=2259&DwnldID=10315&agr=Y

Unpack the ipw3945 driver tarball (contains driver, firmware, and daemon):
sudo tar -xvzf ipw3945-linux-1.0.0.tgz
cd intel-ipw3945-1.0.0/
Unpack and install the ipw3945 driver itself:
sudo tar -xvzf ipw3945-1.0.0.tgz
cd ipw3945-1.0.0/
chmod 755 remove-old
sudo ./remove-old
make IEEE80211_INC=/lib/modules/2.6.17-rc1.20060414/build/include/
sudo make install
Unpack and install the firmware:
cd ..
sudo tar -xvzf ipw3945-ucode-1.13.tgz
cd ipw3945-ucode-1.13/
sudo cp ipw3945.ucode /lib/hotplug/firmware
(Getting udev to recognize the firmware)
Create the file /etc/udev/rules.d/999_firmware.rules and put in the following:
ACTION=="add", SUBSYSTEM=="firmware", RUN+="/sbin/udev_run_hotplugd"
Then run 'sudo /etc/init.d/udev restart'

Unpack and install the regulatory daemon:
cd ..
sudo tar -xvzf ipw3945d-1.7.18.tgz
cd ipw3945d-1.7.18/
sudo cp x86/ipw3945d /sbin/
Test whether the driver worked:
cd ../ipw3945-1.0.0/
sudo ./load debug=0
(look at the eth1 interface and available access points)
iwconfig eth1
iwlist eth1 scan

Update (May 6, 2006) -- Loading the Wireless Card at Boot Time:

Patrick Brochu wrote to me about getting the wireless card loaded at boot time. Here's what he had to say:

I can get the wireless card to come up at boot by creating /etc/modprobe.d/ipw3945 with the following in it:
install ipw3945 /sbin/modprobe --ignore-install ipw3945 ; sleep 0.5 ; /sbin/ipw3945d --quiet
remove ipw3945 /sbin/ipw3945d --kill ; /sbin/modprobe -r --ignore-remove ipw3945

Enabling Native Resolution and 3D acceleration with the ATI Radeon Mobility X1400

(Updated May 24, 2006 to include information on 3D acceleration: driver version 8.25.18 works with my 2.6.17-rc1 kernel)

Note:
If you have already installed some version of the ATI Radeon graphics drivers from the ATI web site, to uninstall the old ATI drivers, run:
sudo /usr/share/fglrx/fglrx-uninstall.sh

Downloaded the ATI 8.25.18 display drivers from their Linux x86 Notebooks with ATI Graphics driver page:
https://support.ati.com/ics/support/default.asp?deptID=894
--> Drivers and Software --> Linux Display Drivers and Software --> Notebooks with ATI Graphics

Installer file:
ati-driver-installer-8.25.18-x86.run

Make the installer file executable and run installer as root:
chmod a+x ati-driver-installer-8.25.18-x86.run
sudo ./ati-driver-installer-8.25.18-x86.run
(GUI loads: answered prompts)
- Install Driver 8.25.18 on X.Org 6.8.x
- Automatic Install

The log file is stored at /usr/share/fglrx

Make backup copy of existing xorg.conf:
sudo cp /etc/X11/xorg.conf /etc/X11/xorg.conf.backup
Create file /etc/ld.so.conf (this should already exist... but it didn't on my computer so I created it. The /usr/X11R6/lib directory is the one added to get the ATI radeon driver configuration library recognized):
/lib
/lib64
/usr/lib
/usr/lib64
/lib/tls
/usr/lib/i486
/usr/lib/i586
/usr/lib/i686
/lib/tls/i686
/usr/lib/i686/cmov
/lib/tls/i686/cmov
/usr/X11R6/lib
/usr/local/lib
Create the necessary links and cache to shared libraries:
sudo ldconfig -v
Run the ATI graphics driver configuration program:
sudo aticonfig --initial --input=/etc/X11/xorg.conf
Reboot the computer / restart X.

Update: Re-enabling scrolling with the Synaptics Touchpad

After installing the ATI graphics driver, I discovered that the Synaptics Touchpad scrolling function no longer worked. Here's what I had to do to re-enable it.

Reference: http://www.redhat.com/archives/fedora-list/2004-November/msg02639.html

Load the evdev module:
sudo modprobe evdev
Add "evdev" (without quotes) to /etc/modules

Edit the "ServerLayout" section of /etc/X11/xorg.conf:

Section "ServerLayout"
    Identifier     "Default Layout"
    Screen      0  "aticonfig Screen 0" 0 0
    InputDevice    "Generic Keyboard"
    InputDevice    "Configured Mouse"
    InputDevice    "Synaptics Touchpad" "AlwaysCore"
EndSection
After restarting X, the touchpad scrolling worked.

Notes on Suspend-to-Disk (hibernate) and 3D acceleration (with Intel 945GM graphics):

From Werner Lemberg:
From Andy Parkins:

Last updated July 6, 2006.
Jennifer Tsai
jennifer (dot) tsai (at) utoronto (dot) ca

TuxMobil - Linux on Laptops, Notebooks, PDAs and Mobile PhonesLinux On Laptops