Installing Slackware/11.0 on a ThinkPad T42

From ThinkWiki
Jump to: navigation, search

As the name suggests, this page documents a start-to-finish installation of Slackware 11 on a thinkpad T42. This is a work-in-progress, so check the history page for mistakes I made (if you are that type). Original installation done by User:Frobnitzem, additional edits performed by:

  • none as yet

System Information

Gathering system information is like mice storing away for winter.

CPU Pentium M, 1.7 GHz
Monitor resolution 1400x1050
Graphics ATI Mobility Radeon 9600
Network Intel Pro/1000 MT Mobile Connection
Intel Pro/Wireless 2200BG
CD/DVD Matshita DVD-RAM UJ-812
PCMCIA TI PCI-4520 Cardbus Controller
Sound AD1981B(AC'97) (module snd-intel8x0 works on 2.4 kernel)
IR IBM ThinkPad FastIR
HDD Intel 82801DBM UATA-24CA for Fujitsu MHT2080AH

These sections follow in the order I installed them, with some of the later customizations do-able while the kernel is recompiling.

Installation proper

Grabbed a DVD install of Slackware 11 [1]. It failed to boot (maybe 2.4.33 kernel shipped doesn't recognize the drive?). Grabbed install CDs ibid. Sat through package selection process. Created a second user account (useradd).

Found out that sound is muted by default. Fix:

  1. amixer set Master 70 unmute
  2. amixer set PCM 70 unmute
  3. amixer set CD 70 unmute
  4. alsactl store

Installed all my favorite software, not worrying about how to make the wifi work for now or optimizing video performance.

Updating the Kernel to 2.6.x

As you may know, the wifi driver is in the 2.6.4 or newer kernels. This necessitated more work on my part and while I was at it I may as well recompile some respectability into my kernel.

  1. cd install-media/extras/linux-
  2. pkgtool
    1. no to kernel itself (patience grasshopper)
    2. yes to source (modules and/or headers optional)
  3. cd /usr/src/linux yes, the symlink had been changed to 2.6
  4. install suspend2 kernel patch
    1. bzcat /path-to/suspend- | patch -p1
  5. cp .config Default.config
  6. make mrproper
  7. make menuconfig
    1. See options section, below.
    2. strangely, make complained about --no-stack-protector, so I deleted that option
  8. If you compiled it as a module, add radeonfb to /etc/rc.d/rc.modules. if you are not sure the initrd will work or you don't want to login and type modprobe radeonfb blind.
  9. make && make modules
  10. make modules_install
  11. cd /boot
  12. cp /usr/src/linux/arch/i386/boot/bzImage vmlinuz-
  13. rm vmlinuz
  14. ln vmlinuz- vmlinuz
  15. ln vmlinuz-ide- vmlinuz.old
  16. mkinitrd -c -o /boot/initrd- -m radeonfb:anothermodule -k
  17. ln initrd- initrd.gz
  18. vi /etc/lilo.conf
  19. lilo # see lilo options
  20. reboot # with fingers crossed

Suspend2 Kernel Patch

The last kernel patch for released is [2]. This requires the suspend2-userui version 0.6.4 [3]. I used the latest hibernate script, since this did not have any version disclaimers...

The hibernate script requires the LZW module in the encryption section of the kernel config and recomments copying rc.hibernate-cleanup to /etc/rc.d.

There is also a kernel patch to fix power issues with the radeonfb module, but I had to manually add in some of the patch, since the kernel versions don't exactly jive.

Kernel Options

Make sure you save your config. options somewhere safe, since you will probably need to recompile and/or reinstall the kernel sources a couple of times to get all the options right. In order to avoid compile-time errors, use make mrproper before make modules, but note that make mrproper deletes .config. You will have to removepkg and installpkg the kernel each time you do this if you have installed the latest ipw2200 module from source. Also, if you want to patch the kernel source to use the suspend2 and/or hdaps drive locking, do it before executing the following steps.

  • Processor Family = Pentium M (scroll down)
  • ACPI Options
    • CPUFreq driver = Intel Enhanced SpeedStep
      • ACPI Processor P-States = fall-back module
      • Don't use APM at all.
  • IrDA
  • Added reiserfs into the kernel to avoid messing with initrd
  • Disabled all graphics modules in Devices->Graphics support except ATI Radeon display, which I built as a module to avoid conflict with fglrx
  • I built the following directly into the kernel
    • I2C device interface
    • Intel 82801 (ICH) I2C driver
    • e1000 Gbit ethernet driver
    • LZF compression (needed for suspend2)

I gave up trying to guess how slackware is requiring its sound to work, so I recompiled using the original sound module options. Don't do anything to the sound options.

Recompile kernel overnight.

(make && make modules) ||  echo "poo-bear"

Install the thing. make modules_install depmod -ae # I have heard that this is a good think to do, but your mileage may vary. make install

realize that slackware is still using lilo, so install has just replaced vmlinuz. Copy original to unique name and symlink, then install new lilo menu. You will also need to make an initrd, since radeonfb is now a module.

Make sure you add another image="vmlinuz.old" to the file just incase the worst should happen... And hey, why not add append = "acpi_sleep=s3_bios" from SUSE on T42 while you're at it! My system hung on bootup with my first try here because it couldn't mount some filesystems. I added the noauto option to appropriate drives in /etc/fstab and everything was peachy again.

Lilo Options

Here is a printout of my lilo.conf file. Notice the cheat codes I pass to the kernel boot propmt in the append= line.

# LILO configuration file
# Start LILO global section
boot = /dev/hda
message = /boot/boot_message.txt
timeout = 1200
# Override dangerous defaults that rewrite the partition table:
# VESA framebuffer console @ 800x600x256
vga = 771
# Normal VGA console
# vga = normal

# End LILO global section
# Windows bootable partition config begins
other = /dev/hda1
  label = Windows
  table = /dev/hda
# Windows bootable partition config ends
# Linux bootable partition config begins
image = /boot/vmlinuz
  root = /dev/hda6
  label = Linux
  initrd = /boot/initrd.gz
  append = "acpi_sleep=s3_bios resume2=swap:/dev/hdaX"
# Linux bootable partition config ends

image = /boot/vmlinuz.old
 root = /dev/hda6
 label = Linux-

Replace /dev/hdaX with your own swap partition please.

rc.modules thinkpad-specific modules

My /etc/rc.d/rc.modules file includes the following lines to load some modules that are not found automatically:

/sbin/modprobe agpgart # this is already in the file around line 88 and required by ATI's fglrx module.

#/sbin/modprobe radeonfb # I don't need these two because initrd loads them
#/sbin/modprobe psmouse # or they are compiled into the kernel.
/sbin/modprobe nvram
/sbin/modprobe hdaps
/sbin/modprobe tp_smapi


Follow the install from source options, and don't forget to patch ipw2200-2.tgz because you're going to compile it anyway. I mistakenly used the development version of ieee802011-1.2.17 (instead of 1.2.15) with ipw220-1.2.0 and ipw2200-fw-3.0, but it is working anyway.

  1. ieee802011-1.2.15
  2. ipw2200-fw-3.0 (contents of folder ipw2200-fw-3.0 not the folder itself goes in /lib/firmware)
  3. ipw220-1.2.0
    1. edit the Makefile for this package before the usual make && make install if you want to enable promiscuous and radiotap functionality, which seems to work fine on my system.

In order to test wifi and make the thing go once it is working, I installed the Wireless Assistant package. If you don't like the default behavior of attempting to connect to any wireless network on boot-up, make rc.wireless nonexecutable: chmod 644 /etc/rc.d/rc.wireless.

Some Customization

Special Module Configuration

Added suggested sections to /etc/modules.conf and /etc/modprobe.conf from Ipw2200, IrDA, and others.

/etc/modprobe.conf -- supercedes modules.conf with 2.6.x kernels

alias irda0 nsc-ircc
options nsc-ircc dongle_id=0x09 io=0x2f8 irq=3 dma=3
options ipw2200 led=1


At this point, the kernel has already been configured to work with suspend2, so the ACPI event monitor should be up and running. Follow the instructions on How to configure acpid to create scripts in /etc/acpi to enable some good system behavior. Notes:

  • some of the lid/powerbtn scripts are using different means to do the same thing -- call hibernate whenever you feel the need
  • radeontool is not necessary to get the backlight to turn off when the lid is closed
    • this seems to work out-of-the box via hardware -- try it yourself by pressing the lid button (black circle behind the Esc key) with your pen

Hardware Accident Protection

tp_smapi can compile you a kernel module to do this and get some cool accelermeter data, however I have not gotten it to compile yet because it requires another package and I am too buisy to go and look for it. Slackware 11 doesn't come with dmidecode [4], required by the Makefile of tp_smapi, so you will have to install this first.

Battery Monitor

gkrellm worked with the kernel's hdaps module just fine. Have yet to try it with tp_smapi's hdaps module.

Muse at all the time I could spend on making special keys work.


Would be nice to figure out how to make the lights blink in sequence.

X11 Configuration

Installed ATI's own Mobility Radeon driver installer [5]. Re-installed free-type and webcore fonts, as suggested in Optimal Use of Fonts on Linux.


  • aticonfig --initial seems to have forgotten to fix the DRM permissions, so glxgears doesn't perform until:
  Section "DRI"
    Mode 0666
  • Option "DPMS" in Monitor section.
  • Enable shared memory via /dev/shm by adding the following to /etc/fstab and mounting tmpfs
tmpfs   /dev/shm   tmpfs   defaults   0   0

Currently gave up on Beryl, which does not find the packages it need in the Slackware distro. Needs at least:

  • X11 7.1
  • beryl-xgl to work with fglrx
    • requires older beryl-mesa, but beryl-core seems incompatible...