Debian on an HP tx1000

Recently I had the opportunity to wipe out my HP tx1000, and upon reinstalling Debian, I discovered that things have changed since my previous writeup. The tx1000 is still Linux-unfriendly, and I would not yet recommend it for someone who is not willing to commit a fair amount of time to working out the kinks; however, progress has been made and I've done things a little differently than last time, which has made things work a little better than before. So, I've done a total re-write of my previous article.

Latest information

As I discover new and exciting things about running Linux on this laptop, I'll update this page. If you want to be notified when this page is updated, you can subscribe using the controls at the bottom of this page.

Disclaimer

As always, this information is supplied with no warranty, expressed or implied. If your computer blows up, your cat dies, or anything else happens, don't come crying to me.

Info for the impatient

The Gist

The laptop is setup as a dual-boot between Windows Vista Business and Debian sid. Grub is used to boot the system, instead of Vista's bootloader. The switch to Vista Business made the HP recovery partition useless (since it's Vista Home), which removed the need to use Vista's bootloader, and using GRUB in the MBR allows me to hibernate either OS when switching to the other (if you're using Vista's bootloader and hibernate Vista, the bootloader will not let you boot into another OS until you resume Vista and shut it down properly.)

The move to Debian sid also means that most things work out of the box. The only thing I've had to dance with so far is the Wireless NIC, which is explained below.

What works out of the box

The following worked with  no effort on my part:

  • sound
  • wired ethernet
  • suspend to disk (sorta-see below)
  • SD reader
  • volume control buttons
  • CD drive
  • Wireless remote (generates keyboard events)
  • webcam

What needs a little coaxing

The following needed a little work from me to function:

  • wireless NIC
  • 3D Hardware acceleration (NVidia drivers)
  • Suspend-to-Disk and Suspend-to-RAM

What doesn't work (yet)

The following are things I've tried and not got working yet:

  • suspend to RAM

What's not tested

Following are things I haven't tried yet:

  • touchscreen
  • tablet functions
  • Mini-cardbus slot
  • Expansion port
  • S-video
  • hot-plugging the CD drive
  • fingerprint scanner

The details

Prepare the system

Using Vista's Disk Management tool, shrink your Windows partition to allow some space for your Linux installation.

Install Debian

Install using your method of choice. I installed the "Laptop", "Desktop", and "Standard system" packages, which gives me a full Gnome GUI and utilities for most of the hardware. When booting the installation system, append 'noapic' and 'irqpoll' to the kernel options. 'noapic' prevents the system from randomly freezing, and 'irqpoll' stops the "disabling IRQ7" messages, which coincide with a loss of USB hot-plug functionality. After your installation is complete, make sure that these options are passed through GRUB to the kernel on subsequent boots.

Upgrade to sid

Using your method of choice, modify your APT sources to point to the sid repository and do a dist-upgrade. Don't forget to install (and use!) the latest kernel; this is necessary to get sound and wireless ethernet to work. Leave some deb-src URLs in your sources.list for installation of ndiswrapper.

WiFi

(source)

  • Unload the ssb module:
    rmmod ssb
  • Blacklist the ssb module (it shares PCI IDs with the NIC in this machine, which confuses ndiswrapper and makes things not work properly:
    echo "blacklist ssb" >> /etc/modprobe.d/blacklist
    update-initramfs -u
  • Install module-assistant:
    apt-get install module-assistant
  • Install ndiswrapper with the following command:
    module-assistant a-i ndiswrapper
  • The wireless NIC is a Broadcom 4328 chipset. HP's drivers cause ndiswrapper to GPF and hose your system; I had better luck with Dell's drivers. Download them from ftp://ftp.dell.com/network/R151517.EXE. Extract them using unzip (be warned, the files will extract into the current directory.)
  • cd to the DRIVER directory
  • Install the drivers to ndiswrapper with the following command:
    ndiswrapper -i bcmwl5.inf
  • Set up the ndiswrapper module to autoload with the following commands:
    ndiswrapper -m
    echo ndiswrapper >> /etc/modules
  • Load the ndiswrapper module:
    modprobe ndiswrapper
  • I've grown weary of playing with command-line WiFi configuration, and I used the built-in Gnome utilities to join a wireless network. However, you could also set up /etc/network/interfaces and /etc/wpa_supplicant/wpa_supplicant.conf to roam nicely independent of your GUI, but that is beyond the scope of this document.

NVidia drivers for 3D video acceleration

Add non-free to your sources list.

Install the following packages:

  • nvidia-kernel-2.6-amd64
  • nvidia-glx
  • nvidia-settings
  • nvidia-xconfig

Run nvidia-xconfig to reconfigure your xorg.conf to use the new NVidia driver. Restart X (or the entire system, just to be safe.)

Remote Reference

Here's the list of buttons on the remote, and the corresponding keypress events:

Button Key Event(s)
Power Suspend
Windows Alt-Win-Enter
Circular arrow thing keycode 205
Up Up
DVD keycode 237
Left Left
OK Enter
Right Right
right-up Backspace
Down Down
Info Menu
Rewind Ctrl-Shift-B
Play/Pause keycode 162
FF Ctrl-Shift-F
Previous keycode 144
Stop keycode 164
Next keycode 153
Vol dn keycode 174
Mute keycode 160
Vol up

keycode 176

Suspend-to-Disk

Out of the box, suspend-to-disk and suspend-to-RAM do not work reliably. To combat the problems suspending to disk, I tried TuxOnIce. Formerly called suspend2, TuxOnIce is a kernel patch that provides suspend-to-disk functionality in a different fashion than what is included in the stock kernel. I used it before, with my Toshiba Satellite 2800 and my Dell Inspiron 6000, and it worked well. Some people are intimidated by the idea of patching their kernel, but in Debian, it's not really that difficult.

However, TuxOnIce alone was not enough to eliminate the problems. I ended up extensively reconfiguring my kernel, avoiding the initramfs/initrd boot method, compiling in the drivers I needed for the root filesystem, and disabling anything I didn't need.

Reconfigure the kernel with TuxOnIce

Install the following packages:

  • build-essential
  • kernel-kbuid
  • kernel-package
  • linux-source
  • linux-patch-tuxonice
  • tuxonice-userui

Unpack the kernel, and configure it (substitute 2.6.26 with whatever version of the kernel you're using):

  • cd /usr/src/
  • tar -xjvf linux-source-2.6.26
  • cd linux-source-2.6.26

My configuration is posted at the bottom of this page. You can copy it to /usr/usrc/linux-source-2.6.26/.config. Be sure to tweak it to suit your application. It will work if your system uses an ext3 root fs on the internal SATA drive, but that is the only thing compiled in - everything else is modular, and quite a lot of stuff is disabled altogether. This kernel boots old-school, without using an initramfs or initrd - I did this to make troubleshooting and reconfigurating the suspend/resume systems easier. It also decreases the boot time, since the system boots straight to the root filesystem.

The stock configuration file that comes with the Debian kernel source package compiles nearly everything. In addition, this configuration prevents TuxOnIce from working reliably. (The machine will panic or reset itself during resume.) Now's the time to run the "make config" of your choice and pare down the configuration as much as possible. I've attached the configuration I use to the bottom of this page, which works for me. It is minimalistic and does away with the initramfs/initrd boot method, so make sure you have the proper drivers configured in for your root filesystem.

The next thing you're going to want to do is read the section below on CPU Frequency scaling, specifically the section on cpufreqd. Otherwise, your machine may overheat during the compile.

Now run the following command to start the build:

CONCURRENCY_LEVEL=2 PATCH_THE_KERNEL=YES make-kpkg kernel_image modules_image

This will compile a Debian package of the custom kernel, with patches, and packages for all the modules you have in /usr/src/modules. After adding the TuxOnIce patches, there are a couple new config options. I merely accepted the defaults when asked, and the build process got underway.

The build will take some time, longer than it should actually, due to the cooling problems in this laptop. However, it will take even longer if cpufreqd doesn't stay on top of the heating situation and your machine dies.

While the build is progressing, you have time to make some needed modifications to /boot/grub/menu.lst, so that TuxOnIce can find your resume partition after hibernation. Add the following to your kopt line in /boot/grub/menu.lst:

resume=swap:/dev/sda5

Of course, replace /dev/sda5 with your swap partition.

 

Once the compile is done, I had three DEB files in /usr/src, that represented the linux-image, nvidia-kernel, and ndiswrapper-modules packages. I installed this with dpkg -i

At this point, you can reboot into your new kernel, test that everything is working as it should be, and then try hibernating. The TuxOnIce patches replace the original suspend-to-disk functionality, and my system automatically started using TuxOnIce instead of the old method. YMMV.

CPU Frequency scaling

First, to enable users to change the CPU frequency or scaling governor, the cpufreq-selector program needs to be SUID root. You can set this option by running the following command:

dpkg-reconfigure gnome-applets

and answer 'Yes' to the appropriate question.

GNOME sets the default governor to "ondemand", which seems to always want to use the highest frequency. I change my governor to "conservative" using the GNOME applet, which allows the frequency to scale down when the machine is not under load. However, GNOME likes to change this back to "ondemand" from time to time. You have to change GNOME's default, but the UI is not suitable for this task. You have to make the changes in the GNOME Configuration Editor:

  • Start "Configuration Editor" from the "System Tools" menu
  • Navigate to /apps/gnome-power/manager/cpufreq
  • change "policy_ac" and "policy_battery" to "conservative"
  • Close the Configuration Editor

cpufreqd

While doing a kernel compile, I discovered that the tx1000's cooling system is not capable of keeping the CPU happy during a long period of high load. In fact, midway through my compile, the CPU overheated and the machine switched off. To fix this, I installed cpufreqd and modified the configuration to bottom the clock speed when the CPU gets too warm. You can find my custom configuration here. I heartily recommend you set this up before doing anything too strenuous, like building a custom kernel for TuxOnIce.