My previous laptop: [thinkpad 560e]

Note: This page is completely superseded now that Linux distributions like Suse 7.3 are available.  Everything works right out of the box.  
 
 

Linux on the IBM ThinkPad 240

Joan Bresnan

Notes and configuration information for installing SuSE 6.2 and Linux 2.2.14 on the IBM ThinkPad 240
(including USB link to Handspring Visor,
Visor note and VMware note).
Updated June 25 2000**
Fast, cheap, and ultralight:

The ThinkPad 240 makes a very nice ultralight (3lb) Linux platform. With the Celeron 300 Mz model being discontinued and RAM prices low, you can currently (April 2000) get a new 192 MB system (with 6 gig hard drive) for around $1150.  (A recent usenet review  benchmarked such a system at better than a PII 400 Mz TP600E.)  The screen is bright. (I personally find SVGA 800x600 the most legible resolution for a 10.4" screen.)  The keyboard is superior for this class of machine, and one of its best features, along with the overall quality and linux compatibility.  An extended life battery is available.  Doing my normal work (editing and creating postscript), I get close to 2 hours on the regular battery and  around 4 or 4+ hours on the extended life battery.

It all works:

All of the hardware works under linux: X server, sound (playing and recording), automatic suspend on keys or shutting the lid, hibernate mode (which saves your state to the hard drive and shuts off the power--great for airplane embarcations), pcmcia networking and scsi cdrom, the internal modem, and the USB port (which I use for hotsyncing my Handspring Visor).  Reportedly the infrared port works as well, but I haven't tried it.

The purpose:

I'm very happy with my tp240, but it was a lot of work to get everything working right together, especially the interactions of apm, sound, and the ltmodem.  I got a lot of help from the Web:

http://www.cs.utexas.edu/users/kharker/linux-laptop/
http://www.linux-thinkpad.org/ (especially for chipset info)
http://home.snafu.de/wehe/index.html

Maybe my notes will help someone else.  They are about getting the hardware to work perfectly under linux (SuSE 6.2 with upgraded kernel, pcmcia, and apm), rather than about how to do an install.   I've also added some notes on configuring VMware to run the Win98 installation concurrently with linux.  It works beautifully for me. YMMV ... Don't blame me if following these notes ruins your ThinkPad, your data, or your marriage!

One final note:  Though this project was a lot of work, I suspect that SuSE 6.4 has everything you need already built in.

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

Before installing linux I upgraded the bios from Win98 using the IBM update program.  I installed SuSE 6.2 which is very stable and gives you kernel 2.2.10 when you recompile from the sources.  But the Lucent Winmodem drivers for linux require the 2.2.12 kernel at least.  So I compiled the vanilla 2.2.14 kernel from www.kernel.org. (Patching up doesn't work cleanly with the Suse kernel sources, which are already heavily patched.)  This kernel version turns out to be a good choice for USB support as well.  I also installed the SuSE 6.2 updates and bugfixes for my system.  There is a SuSE source for the 2.2.14 kernel (lx_suse-2.2.14.SuSE-12.i386.rpm) available at:

ftp.sourceforge.net/pub/suse/suse/i386/evaluation-6.4/full-names/i386/lx_suse-2.2.14.SuSE-12.i386.rpm

**But now I've upgraded to kernel 2.2.16, which claims to handle IBM thinkpad apm better.

In addition, I installed the latest pcmcia version 3.1.11 and apm version 3.0final.

1. XFree86 works as promised.  I got the XF86Config file from another webpage and put in the TP770 keyboard.   (Sad to say, the commercial and very fast laptop X-server from XI couldn't cope with suspend and resume.  I have no problems with XFree86.)

2. Apm works. You have to compile apm support into the kernel to get suspend and hibernate to work properly.  I upgraded to version 3.0final of apmd,to get automatic sound module shutdown on system suspend.  See next note (3).
Here are my kernel configuration particulars for APM:

CONFIG_APM=y
# CONFIG_APM_IGNORE_USER_SUSPEND is not set
# CONFIG_APM_DO_ENABLE is not set
CONFIG_APM_CPU_IDLE=y
CONFIG_APM_DISPLAY_BLANK=y
CONFIG_APM_POWER_OFF=y
CONFIG_APM_IGNORE_MULTIPLE_SUSPEND=y
CONFIG_APM_IGNORE_SUSPEND_BOUNCE=y
# CONFIG_APM_RTC_IS_GMT is not set
# CONFIG_APM_ALLOW_INTS is not set

Note that this last parameter should not be set.  When it is set =y, the trackpoint lags annoyingly after a suspend.

3. Sound works.  The kernel has to be recompiled for sound: for the Alsa drivers, choose sound support in the kernel configuration, but don't select any particular sound drivers.  I installed the latest Alsa drivers, which offer good support for the tp240 soundchip (playing and recording).  See a section of my /etc/conf.modules for a setting which automatically unmutes the sound channels.  Note: you have to unload the sound drivers before doing a suspend, or sound won't work when you resume.  The latest version of apm (v. 3.0final) will run pre- and post-suspend scripts for you and automatically unload/load the sound drivers, if you want.  The script is /etc/apmd_proxy; you also have to revise /sbin/init.d/apmd to run the (executable) apmd_proxy script on bootup.)  To load/unload sound drivers manually, I modified the alsasound script utility.
I discovered that by configuring alsasound for oss emulation correctly, I am able to play sound in the VMware Win98.  What is required is to load the following additional modules in this order:

/sbin/insmod /lib/modules/2.2.14/misc/snd-pcm-plugin.o
/sbin/insmod /lib/modules/2.2.14/misc/snd-mixer-oss.o
/sbin/insmod /lib/modules/2.2.14/misc/snd-pcm-oss.o
4. The Lucent PCI ltmodem worksYou have to install the Lucent binaries as described in several other linux laptop web pages.  Note: The Lucent install script puts the ltmodem load command into /etc/rc.d/rc.local, but SuSE uses /etc/rc.d/boot.local instead, so copy it there. The ltmodem is temperamental and sometimes causes a system freeze, or goes defunct on its own.  So I ended up doing a manual load and unload of the ltmodem, which seems to keep it "fresher".

5. Pcmcia works.  I had to install the source (v. 3.1.11) to compile the pcmcia modules for my new 2.2.14 kernel.  With the following setting in /etc/rc.config, everything works together: modem, pcmcia scsi card -- (these are the default in the latest pcmcia version, so I don't really need them, but earlier versions might)

   PCMCIA_PCIC_OPTS="pci_csc=1 pci_int=1"

   Of course, you have to read the excellent PCMCIA-HOWTO to get the resources right in /etc/pcmcia/config.opts.

The kernel also has to be compiled with generic scsi support for the pc scsi card for the cdrom, or whatever other pc cards you use.

6. Networking .  A network requires compiling the kernel for IP forwarding and stuff.  I used the following settings, in addition to the general networking stuff I had already enabled for ppp.  These are for a simple private network for backing up my laptops.

   CONFIG_IP_ADVANCED_ROUTER=y
   CONFIG_RTNETLINK=y
   CONFIG_NETLINK=y

   CONFIG_IP_FIREWALL=y

A bit of disappointing news: Some laptop chipsets don't allow the use of the parallel port for PLIP.  The tp 240 parallel port does not seem to work with PLIP over a null parallel port cable, so that convenient and inexpensive way of synchronizing your laptop with other machines is not available.  You can still use rsync over a dialup line, though, but it's SLOOOOOW.  I bought a cheap pc card ethernet adaptor and made a network to the other laptop using my old adaptor.  I've learned that the parport support in kernel 2.2.14 may be broken, so possibly the fault with plip is not in the tp240 hardware...

I was amazed at how well the pcmcia ethernet modules work.  After configuring /etc/pcmcia/network.opts, your network interface is automatically brought up/down when you insert/remove your pccard.  And the cards are recognized right out of the box.

7. USB Works.   I have a Handspring Visor, and initially hotsynced it to my tp240 via the serial port.  But the USB port is much faster. Given all the above, it was fairly easy to enable USB support for the Visor.  I just followed the Handspring Visor Mini-HowTo by Ryan VanderBijl.  He describes using a `backport' of the USB support from the 2.3.xx development kernel to the 2.2.14 kernel.  Basically, you just patch your 2.2.14 (or 15 or 16) kernel with the patch he refers to, and then configure and recompile the kernel.
**The latest backport (June 2000) is from the 2.4 kernel and works fine with USB modules and apm.  I  load the USB modules in /sbin/init.d/boot.local and unload them in halt.local.  The place to get the latest USB backports is: http://www.suse.cz/development/usb-backport/.  The Linux-Visor webpage is at:  http://usbvisor.sourceforge.net/cgi-bin/index.pl.
The excellent (command-line) pilot-link tools are at ftp://ryeham.ee.ryerson.ca/pub/PalmOS/pilot-link.0.9.3.tar.gz .

8. A little note on the Handspring Visor with Linux.  I have to say that the Visor/Linux link is very cool.  The pilot-link software works flawlessly.  I've got 8 MB of Visor memory, so I could load up Noah (a 125,000 wordnet English dictionary from SourceForge), a graphical web browser, email, useful reference material (such as a bibliography of linguistic works I use, my CV, and my email aliases), telnet, etc., as well as all my addresses in my address book and my calendar info from ical on my tp240.  (There's a very nice syncal program that works with a mouse click to synchronize laptop calendar and Visor calendar.)  I bought the standard (wired) modem Springboard module for internet access and a really nice folding keyboard  (the Stowaway by Targus) for internet access while bicycle touring---a super ultralight kit (much cheaper than similar Palm stuff) all weighing in at around 1 lb.

9. VMware for linux.    I originally set up my tp240 to dual boot Win98 and linux, so that I could use the Windows 98 programs (MS Word, Excel, Powerpoint or Qualcom Eudora) in a pinch, as when someone sends me a MS Word .doc file.  But because it's a pain to reboot, I seldom used the dual boot feature.  Now I've installed VMware 2.0 for linux, and as a result I have a  window in which I can run Windows 98 and all these Win98 programs concurrently with linux.  It's a bit as though my little laptop has its own pet computer.  (Succumbing to the terrible cuteness of it all, I call them "linnie" and "winnie".)  They share files with a samba server that comes pre-configured with the VMware program, so I can just drag and drop files back and forth between "linnie" and "winnie".    With the 192 MB of RAM in the tp240, you can get reasonably usable performance from this virtual Win98 machine.  The new version 2.0 of VMware is much easier to configure than version 1.0 and I recommend it highly.  Note: VMware 2.0 does not support the USB port on the tp240.  So if you want to run the Windows98 Palm Desktop software for the Visor, you need to use a serial cable hotsync cradle.  I personally find the linux command-line pilot-link tools more powerful  for my purposes.  ** also: I have successfully enabled sound in "winnie"; it requires loading the oss emulation modules for Alsa.  See the sound section above.

Since my internet access on this laptop is through the ppp dialup on the internal modem, I chose the "host-only networking" setup of VMware,   I use a static IP address for "winnie" in my /etc/vmware/config file.  I added the name "linnie" to my /etc/vmware/vmnet1/smb/smb.conf file.  In Win98, under Network => Properties => IP address, I specified the static IP I chose for "winnie" (192.168.0.128) together with the netmask 255.255.255.0.  Under Network => Properties => Gateway, I specified the   HostOnlyAddress  (192.168.0.1) in  /etc/vmware/config. Under Network => Properties => DNS, I set the host = winnie, domain = localdomain (the same as in the /etc/vmware/vmnet1/dhcpd/dhcdp.confoption domain-name "localdomain").  And I added the DNS server IP addresses that I use in linux under /etc/resolv.conf.  (**It's unnecessary to change the /etc/vmware/vmnet1/dhcpd/dhcpd.conf file.)   Finally, I put a copy of my /etc/hosts file in the linux partition into C:\Windows\hosts.

On the linux side, I use routing to connect to the internet from Win98 over the linux internet connection.  To do this, I had to compile routing support into the kernel (the VMware documentation on networking has good information about what is needed), and then after dialing up through my ppp connection, I just run this little script (again following the VNware networking documentation) when I want to connect to the internet from "winnie":

#!/bin/bash
/sbin/ipchains -P forward DENY
/sbin/ipchains -A forward -s 192.168.0.2/24 -j MASQ

That's it!

All in all, this little system is really worth many times its weight in gold.  It's too cool.  Well, to be specific: it's fast, cheap, ultralight, and extremely cute.

To Do:

IrDA (some websites say they get 4Mps).

There is a problem using the ctrl-alt-fn keys to switch virtual consoles.  I think it has to do with the keymap for the special 240 keyboard.  One can get around this by getting to a virtual console via ctrl-alt-fn3 and then using Alt-> or Alt-< to switch.  Or you can use chvt n (sometimes).
 
 

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 


%%%%%%%%%%%%%%%---conf.modules---%%%%%%%%%%%%%%

# alias char-major-14 off
# alias sound off
# alias midi off

# ALSA native device support
post-install snd-card-es1938 /usr/sbin/alsactl restore
alias char-major-116 snd
options snd snd_major=116 snd_cards_limit=1
alias snd-card-0 snd-card-es1938

# OSS/Lite setup
alias char-major-14 soundcore
alias sound-slot-0 snd-card-0
alias sound-service-0-0 snd-mixer-oss
alias sound-service-0-1 snd-seq-oss
alias sound-service-0-3 snd-pcm-oss
alias sound-service-0-12 snd-pcm-oss

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
 
 
 


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%-

#! /bin/sh
# Copyright (c) 1996 S.u.S.E. GmbH Fuerth, Germany.  All rights reserved.
#
# Author: Bodo Bauer <bb@suse.de>
#
# /sbin/init.d/apmd
# slightly modified for apm3.0final - jb

. /etc/rc.config

# Determine the base and follow a runlevel link name.
base=${0##*/}
link=${base#*[SK][0-9][0-9]}

test $link = $base && START_APMD=yes
test "$START_APMD" = "yes" || exit 0

# The echo return value for success (defined in /etc/rc.config).
return=$rc_done
APMD="-w 10 -W"

case "$1" in
  start)
       echo -n "Starting advanced power management daemon: "
       if [ -e /proc/apm ] ; then
            startproc  /usr/sbin/apmd -- \
      -P /etc/apm/apmd_proxy $APMD  || return=$rc_failed
 else
     echo -n " not supported by kernel"
 fi
 echo -e "$return"
    ;;
  stop)
    echo -n "Stopping advanced power management daemon: "
 if [ -e /proc/apm ] ; then
            killproc -TERM /usr/sbin/apmd || return=$rc_failed
 else
     echo -n " not supported by kernel"
 fi
        echo -e "$return"
     ;;
  restart|force-reload)
     $0 stop  &&  $0 start  ||  return=$rc_failed
     ;;
  status)
 checkproc /usr/sbin/apmd && echo OK || echo No process
     ;;
    *)
        echo "Usage: \$0 {start|stop|restart|reload|status}"
        exit 1
esac

# Inform the caller not only verbosely and set an exit status.
test "$return" = "$rc_done" || exit 1
exit 0
 

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

# from /etc/pcmcia/config.opts
#
# I have subtracted port 0x2f8-0x2ff (Winmodem, IrDA)
   include port 0x100-0x2f0, port 0x300-0x4ff, port 0x800-0x8ff,
           port 0xc00-0xcff
   include memory 0xc0000-0xfffff
   include memory 0xa0000000-0xa0ffffff, memory 0x60000000-0x60ffffff

   # recommended in the PCMCIA-HOWTO for thinkpads w internal modems
   exclude port 0x2f8-0x2ff
   ...
   # Sound
   exclude irq 5

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

here's my /etc/vmware/config file:

vmware.fullpath = "/usr/bin/vmware"
wizard.fullpath = "/usr/bin/vmware-wizard"
dhcpd.fullpath = "/usr/bin/vmnet-dhcpd"
loop.fullpath = "/usr/bin/vmware-loop"
libdir = "/usr/lib/vmware"
smbpasswd.fullpath = "/usr/bin/vmware-smbpasswd"
ethernet.address = "192.168.0.128"
ethernet0.address = "00:50:56:2c:bb:ec"

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

all I added to my /etc/vmware/vmnet1/smb/smb.conf file:

; SMB name of the host (the hostname by default)
  netbios name =  linnie