Gentoo GNU/Linux on Compaq TC1000 HOWTO

Draft 0.9
TC1000 Linux

NOTE

I do not own TC1000 anymore, so do not expect any updates. You might be interested in Johannes Wilm's version of this document, though.

Disclaimer

I expect you to have a general Linux knowledge. Preferably Gentoo Linux knowledge. And I assume that you had installed some (preferably Gentoo) Linux distribution on a "typical" PC at least once.
It's not a step-by-step guide. More like the Installation Instructions extension and modification. You are expected to follow general Gentoo Installation Instructions.

And please keep in mind, that I'm not a native english speaker and my english is... well - you'll see. My apologies.

Background

You may safely skip to the raw meat below...

I was talking to a friend once and I said that if I would buy myself a laptop computer, it would definetely be a TabletPC. I had no idea how soon it came true.
After a month or so I got the opportunity to buy a used TC1000 cheaply and I got it.
I played with preinstalled XP for some time. It's nice. It works. But I wanted my GNOME on it, where I feelt the most comfortable and I finally decided to try to install Linux.
After some research I found a page describing all components that I need to take care of. It looked good. I also found some notes about Gentoo on Transmeta Crusoe based computer. I had choosen my favourite Gentoo Distribution and my favourite 2.6 series Linux kernel.
Below is a record of the long journey I went... ;-)

Bootstrap

I don't want to wipe the XP installation. I might find it usefull and I want to migrate the data. So I have to resize the Windows partition. There are several tools to do that. Use the one that best fits you.
I shrunk first partition to 20GB - 10GB is enough for Linux.

First Obstacle

How do You install Linux on a floppyless and CD-ROMless computer?

The easiest way would bee to boot from external USB CD-ROM. I don't have one though.

First idea:
I got ZipSlack unpacked it and launched. (I have leftovers of Windows 98, so I am able to boot DOS and use loadlin.exe.) No bonus. Kernel complained about my 32 bit PCI bus wanting me to set it to 16 bit in BIOS. Yeah, right - there is no such setting. After some googling I found no solution.

Second Idea:
I already have Cooperative Linux installed. So I configured the second partition under coLinux. Voila - I have a running Linux that I can begin installation with. Great!

Installing Gentoo GNU/Linux

I'm just following The Great Gentoo Linux/x86 Handbook...
with the following exceptions:

  1. instead of getting portage tree from internet I just copied it from my coLinux installation (with all the distfiles fetched already :-) )
  2. CFLAGS according to Rob McMullen instructions

It looks that 2.6 series kernel has support for all TC1000 hardware without patching. So I'm going "the hard way". ;-)
Tweaking all options took me some time after the actuall installation. I'll save you the trouble. You'll find all the needed files in the Appendix A.
I tried the Gentoo Patched 2.6 Linux sources - with good result.

# emerge sys-kernel/gentoo-dev-sources

IMPORTANT!!!

You have to put ohci-hcd and usbhid to /etc/modules.autoload.d/kernel-2.6. And do it at the very beginning becouse if it does not load properly you end up with non-working keyboard! (been there, seen that)

We'll need a hotplug package, so:

# emerge hotplug
# rc-update add hotplug default

Locale HINT

# nano -w /etc/env.d/00lang:
LANG=pl_PL
LC_ALL=pl_PL
LINGUAS=pl

# env-update
# source /etc/profile

Do it before emerging system, to choose/activate the Polish translations. Substitute your locale. ;-)

Another obstacle

Installing GRUB on the HDD.

I couldn't do it from coLinux, becouse it does not have access to the whole hard drive. I finally resorted to pulling out the HDD and connecting it to a "big" PC machine and using GRUB Floppy. And... it didn't work. I created a Linux partition under Windows, and it had a non-Linux type set. ARGH!
So I got a Tiny Linux UPX Bootdisk image and launched my installed Gentoo Linux using it's kernel, changed the partition type with fdisk and finally installed GRUB both on MBR and the Linux Partition (it saved me later).
After inserting HDD back to the TC1000 it started with GRUB allowing me to launch my Gentoo instalation. At last!

Conclusion

I'm unable to install Linux without an external CD-ROM drive and without help from another PC.

So maybe the easier way is to use PXE installation? Try it out. ;-)

After installation configuration

Working hotplug should had already inserted all required modules for you, but I preffer to load them manually at boot, just to be sure I have them when for example I would brak the hotplug package later. :-)

I need to know "What's inside" to configure it.

# lspci
0000:00:00.0 Host bridge: Transmeta Corporation LongRun Northbridge (rev 03)
0000:00:00.1 RAM memory: Transmeta Corporation SDRAM controller
0000:00:00.2 RAM memory: Transmeta Corporation BIOS scratchpad
0000:00:05.0 VGA compatible controller: nVidia Corporation NV11 [GeForce2 Go] (rev b2)
0000:00:07.0 ISA bridge: VIA Technologies, Inc. VT82C686 [Apollo Super South] (rev 40)
0000:00:07.1 IDE interface: VIA Technologies, Inc. VT82C586A/B/VT82C686/A/B/VT823x/A/C PIPC Bus Master IDE (rev 06)
0000:00:07.4 ISA bridge: VIA Technologies, Inc. VT82C686 [Apollo Super ACPI] (rev 40)
0000:00:07.5 Multimedia audio controller: VIA Technologies, Inc. VT82C686 AC97 Audio Controller (rev 50)
0000:00:07.6 Communication controller: VIA Technologies, Inc. Intel 537 [AC97 Modem] (rev 30)
0000:00:08.0 Ethernet controller: Intel Corp. 82551QM Ethernet Controller (rev 10)
0000:00:0a.0 Ethernet controller: Atmel Corporation 802.11b Wireless Network Adaptor (at76c506) (rev 11)
0000:00:0b.0 CardBus bridge: Texas Instruments PCI1520 PC card Cardbus Controller (rev 01)
0000:00:0b.1 CardBus bridge: Texas Instruments PCI1520 PC card Cardbus Controller (rev 01)
0000:00:0c.0 USB Controller: NEC Corporation USB (rev 41)
0000:00:0c.1 USB Controller: NEC Corporation USB (rev 41)
0000:00:0c.2 USB Controller: NEC Corporation USB 2.0 (rev 02)

Some fine hardware. Carefully rewrite it on a scrap of paper for later usage if you want to discover all software support for it by yourself.
If not, go on reading. ;-)

Ethernet

It is just working with the e100 driver. Add it to /etc/modules.autoload.d/kernel-2.6

Wireless LAN

Atmel card is supported by 2.6 kernels. But it requires some setup.
You need hotplug and firmware installed.
First step - module: add atmel_pci to /etc/modules.autoload.d/kernel-2.6 (just after e100)
Second step - firmware: get atmel-firmware-1.0.tar.gz, unarchive and ./install.sh
Reboot and check dmesg if it is working and does not complain about missing firmware.
Third step - setup second ethernet adapter script:

# ln -s net.eth0 /etc/init.d/net.eth1

and edit /etc/conf.d/net
Fourth step - install wireless-config: get wireless-config.ebuild and follow the instructions on Gentoo Forum.
Setup /etc/conf.d/wireless.

# /etc/init.d/net.eth1 start

and if everything works:

rc-update add net.eth1 default

ALSA

The driver is already in kernel.

# emerge alsa-utils

use /etc/modules.d/alsaand

# /etc/init.d/alsasound start # rc-update add alsasound default

and unmute channels with alsamixer

LONGRUN

# emerge longrun

Longrun kernel support does not create devfs entries, so I had to create device files manually:

# mkdir -p /dev/cpu/0
# mknod /dev/cpu/0/msr -m 0644 c 202 0
# mknod /dev/cpu/0/cpuid -m 0600 c 203 0

ACPI

I want to be able to shutdown the machine with it's power switch and switch Longrun profiles when connecting/disconnecting AC Adapter.

# emerge acpi acpid
# /etc/init.d/acpid start
# rc-update add acpid default

I based my script on Gentoo Forums once again. You'll find it in Appendix A. Put /etc/acpi/action.sh startup to /etc/conf.d/local.start.

Lm_Sensors

# emerge lm-sensors

and then

# sensors-detect

created perfectly fine /etc/conf.d/lm_sensors config

# rc-update add lm_sensors default

PCMCIA/CF

# emerge sys-apps/pcmcia-cs

Switch lines in /etc/conf.d/pcmcia to:

PCIC="yenta_socket"
PCIC_ALT="i82365"

and

# /etc/init.d/pcmcia start
# rc-update add pcmcia
# lsmod
Module                  Size  Used by
serial_cs               6888  1
ds                     13284  5 serial_cs
yenta_socket           13408  1
pcmcia_core            52676  3 serial_cs,ds,yenta_socket

As you can see yenta_socket is loaded and it loaded serial_cs subsequently. Let's see what it is. :-)

# cardctl config
Socket 0:
  not configured
Socket 1:
  Vcc 3.3V  Vpp1 0.0V  Vpp2 0.0V
  interface type is "memory and I/O"
  irq 3 [exclusive] [level]
  speaker output is enabled
  function 0:
    config base 0x0100
      option 0x41
    io 0x02f8-0x02ff [8bit]
# cardctl ident
Socket 0:
  no product info available
Socket 1:
  product info: "Bluetooth BT0100M", "", ""
  function: 2 (serial)

Yey! It's my D-Link DCF-650BT CompactFlash Bluetooth Card. :-)

Bluetooth

I have succesfully set up my CF-card Bluetooth adapter. It works perfectly with my Nokia 6600 mobile phone and Logitech MX900 BT Cordless mouse.
Details are out of scope of this document. If you want them though - mail me. :-)

Modem

It's an Agere Modem on an AMR on VIA AC97.
It's supported with Smart Link Driver/Daemon.

# FEATURES="-sandbox" emerge slmodem

edit /etc/conf.d/slmodem - use MODULE=slamr

# /etc/init.d/slmodem start
# rc-update add slmodem default

and add your user to the group dialout

and something to test it out

# emerge minicom lrzsz

use /dev/ttySL0 as your modem device

Side Keyboard

It's a normal AT keyboard, but it sends unusual keycodes and the kernel complains:

atkbd.c: Unknown key released (translated set 2, code 0x84 on isa0060/serio0).
atkbd.c: Use 'setkeycodes e004 <keycode>' to make it known.

so i did as it suggested (also created small side keyboard map):

setkeycodes e002 130
setkeycodes e003 131
setkeycodes e004 132
setkeycodes e005 133
setkeycodes e006 134
setkeycodes e007 135

loadkeys /etc/tc1000.map

in /etc/conf.d/local.start (rename tc1000.txt to tc1000.map)

I had a hard way with X though. The linux-tablet-pc xmodmaprc does not work for me - I have different keycodes under X than under console.
After fixing it and putting at /etc/X11/Xmodmap it started working under GDM, but not under GNOME.
GNOME is Using the new Xkb not Xmodmap.
I managed to create /etc/X11/xkb/symbols/tc1000 code-to-symbol mapping, but I have no idea how to make it work under GNOME. :-(

X Server

I use the X.org XServer

# emerge x11-base/xorg-x11
# rc-update add xfs default
# /etc/init.d/xfs start

with the following xorg.conf

The nVidia driver

I used to use nVidia provided binary only driver for the landscape mode. But using it trashes the console, causing the machine to freeze when you switch back to text console. And since shutting down X server means switching back to textmode, you cannot turn the machine off normally when you use the nVidia binary driver.
Only with NVIDIA 1.0-5336 driver the console is working! It flickers horribly but switching to it does not freeze the TC1000.
And since the X.Org nv driver works very fine now, I resorted to using only the nv driver.

Following is only for reference and completeness. DO NOT INSTALL IT!

Following the Gentoo nVidia Guide

# emerge nvidia-glx nvidia-kernel

didn't work, becouse Crusoe processor is lacking MTRR support, but bliq had found a solution for this problem.

# emerge --fetchonly =media-video/nvidia-glx-1.0.5336-r2
# sh /usr/portage/distfiles/NVIDIA-Linux-x86-1.0-5336-pkg1.run

I need to put via-agp and nvidia modules to /etc/modules.autoload.d/kernel-2.6.

Screen Rotation

Switching the orientation on-fly (XRandR extensions) does not work with nv driver. Only xorg.conf options work.

To be able to choose screen orientation at startup I had written an /usr/X11R6/bin/X wrapper to select screen layout via kernel parameter.
Put the script in place of the existing X symlink and make it executable.

# chmod +x /usr/X11R6/bin/X

Also check the supplied /boot/grub/grub.conf file.

Tablet Pen

Grab my fpi2002-0.5.tar.gz port of the fpi2002 enabler for kernel 2.6 and the tc1k-1.1.tar.gz driver for XFree.
Compile and install fpi2002 and add it to /etc/modules.autoload.d/kernel-2.6. It needs to be loaded before any other serial port driver for it to work.
Unarchive tc1k pen driver and copy it to XServer modules dir

# cp tc1k-1.1/tc1k_drv.o /usr/X11R6/lib/modules/input/

and use my xorg.conf. ;-)

GNOME

My favourite desktop :-)

# emerge app-admin/fam
# rc-update add famd default
# emerge gnome

Test it with startx and then

# rc-update add xdm default

GNOME On-screen Keyboard

# emerge gok
# emerge xvkbd

Handwriting

# emerge xstroke

Finishing touches

Some GNOME applications complained about lack of accesibility layer:

# emerge libgail-gnome

Next step - setting my Home-Dir as my Desktop:

$ gconftool-2 -s /apps/nautilus/preferences/desktop_is_home_dir true -t bool

This helps with the workspace metaphore and motivates me to keep my home dir cleanly organised.
Then create some usefull dirs: Documents, Images, Music, Media, Download; with proper emblems.

Effect

# uname -a
Linux tabby 2.6.8-gentoo-r4 #3 Sun Sep 19 10:13:39 CEST 2004 i686
 Transmeta(tm) Crusoe(tm) Processor TM5800 GenuineTMx86 GNU/Linux

# rc-status
Runlevel: default
  local                     [ started ]
  netmount                  [ started ]
  domainname                [ started ]
  pcmcia                    [ started ]
  syslog-ng                 [ started ]
  hotplug                   [ started ]
  net.eth0                  [   off   ]
  net.eth1                  [ started ]
  acpid                     [ started ]
  famd                      [ started ]
  xdm                       [ started ]
  xfs                       [ started ]
  bluetooth                 [ started ]
  sshd                      [ started ]
  slmodem                   [ started ]
  lm_sensors                [ started ]

Screenshot

Everyone loves screenshots... :-)

GNOME 2.6 Screenshot

More to come.

There are still some things to set up.
Using GOK with GDM login
Screen rotation - nv driver supports it, but lack of XRandR rotation support
gensplash
Journal program - http://www.adebenham.com/gournal/ - have to find .5h to write and test .ebuild

Appendix A: Gentoo config files for TC1000

Appendix B: Links, links, links...


Author: Tomasz Sterna
Email: tomek@xiaoka.com
XMPP: smoku@xiaoka.com