Showing posts with label HDAPS. Show all posts
Showing posts with label HDAPS. Show all posts

Tuesday, May 19, 2009

Getting HDASP to work on Jaunty

When working on getting the IBM Hard Drive Active Protection System (HDAPS) to work properly on Intrepid (8.10), I found out the newer kernel that would be part of Jaunty would support some things out of the box. As I hate compiling kernels and love to leave that to the more gifted, I decided then I'd sit it out until Jaunty would come out.

Having said that, it turned out it wasn't going to work out of the box on Jaunty either, but... it would not require any kernel compilations either. So I decided to give it a go.

Some things are documented on other blogs as well and I'll be copying/pasting a lot of content from there. However, I still ran into quite some problems that required digging further and further through the internet. Luckily I wasn't the only one, so I was able to find out how to get it to work properly. Please regard this post as summary of information gathered from all kinds of sources on the net. Unfortunately I can't remember all sources I used exactly, there were just too many before I found the ultimate solution, so I won't be giving any credits as I wouldn't like to ommit any (so therefor I give none - but I won't take credits either, it's mostly copy/paste completed with the things I recovered from the xterm history!!!).

How to get it to work:

The HDAPS system consist of two parts. The driver that enables reading the acceleration data and some sort of userspace software that does the actual parking of the harddrive heads, usually hdapsd.

The hdaps driver is part of the kernel but the driver maintainers actually recommend using the tp-smapi driver instead. So that’s what we’ll do.

Start by making sure you have the necessary tools installed

$ sudo apt-get install build-essential module-assistant

Luckily it’s in the package repository (universe)

$ sudo m-a a-i tp-smapi

this will fetch and install the tp-smapi-source package, unpack the source and then compile and install the kernel module. If you ever get the message that it is already compiled and you still want to recompile/reinstall it, throw in the -f (force) option here.

Try loading it:

$ sudo modprobe tp_smapi
$ sudo modprobe hdaps

The kernel log should show something like this (use dmesg):

[ 1546.780684] thinkpad_ec: thinkpad_ec 0.37 loaded.
[ 1546.784125] tp_smapi 0.37 loading...
[ 1546.784406] tp_smapi successfully loaded (smapi_port=0xb2).
[ 1571.445942] hdaps: LENOVO ThinkPad T61 detected, setting orientation 1
[ 1571.446111] hdaps: initial mode latch is 0x05
[ 1571.446265] hdaps: setting ec_rate=250, filter_order=2
[ 1571.446493] hdaps: device successfully initialized.
[ 1571.446607] input: ThinkPad HDAPS joystick emulation as /devices/virtual/input/input13
[ 1571.469284] input: ThinkPad HDAPS accelerometer data as /devices/virtual/input/input14
[ 1571.505138] hdaps: driver successfully loaded.

For some reason some configuration for udev is missing. Fix this by running

echo 'KERNEL=="event[0-9]*", ATTRS{phys}=="hdaps/input1",ATTRS{modalias}=="input:b0019v1014p5054e4801-*",SYMLINK+="input/hdaps/accelerometer-event"' | sudo tee /etc/udev/rules.d/51-hdaps.rules

Now for the userspace stuff. First let us test if APS is actually working.

$ sudo apt-get install hdaps-utils

After installation you can use hdaps-pivot or hdaps-gl to verify that the sensors are working


hdapsd in Jaunty is old. There is a PPA with newer versions.

Add the PPA to your repository list

$ cat | sudo tee /etc/apt/sources.list.d/hdapsd.list <<> deb http://ppa.launchpad.net/jonasped/ppa/ubuntu jaunty main
> deb-src http://ppa.launchpad.net/jonasped/ppa/ubuntu jaunty main
> EOF

And add the PPA key

$ sudo apt-key adv --recv-keys --keyserver keyserver.ubuntu.com 45EA2DEACE74152B61554DE4036A90F2BEFC6EB4

and then update the package list and install the package

$ sudo apt-get update
$ sudo apt-get install hdapsd

Remember to edit /etc/default/hdapsd to match your system. Most likely you will want to change the sensitivity settings. I found '15' to be too sensitive. At the moment I use '50', but you might want another setting...

Now, we're not there just yet. It will work with the above once, but after a reboot it will stop working again. Modprobe'ing will not work anymore either. It'll throw an error like:

thinpad_ec: Unknown parameter 'force_io'

when you try (check with dmesg). It took me 5 hours to find out why and how to resolve this.

It is because there an entry in /etc/modprobe.d/local.conf which explicitly loads the thinkpad_ec module with the option 'force_io=1'.
Open this file as root (sudo) for editing and comment the line which mentions the thinpad_ec module:

$ sudo gedit /etc/modprobe.d/local.conf
The you can restart the HDASP demon with
$ sudo /etc/init.d/hdasp restart

Now you should be fine and it will work over reboots.
There are some pretty cool applets that will show you the status of the HDAPS system. I still use the Avant Window Manager and the latest version has an applet that shows it's status too. With these you can check if it actually works.

Also, the newer HDAPS system you now got implements a joystick device; now you can play Tuxrace by tilting your Thinkpad! Also available: an anti-theft alarm... more on these on the thinkwiki.

Wednesday, March 11, 2009

Enabling Hard Disk Protection (HDAPS) on Intrepid

Having that much success with enabling suspend/resume yesterday I was getting bold tonight: I wanted to have the built Thinkpad hard disk protection working too.

There's a lot to be found on this particular topic through Google and the Thinkpad wiki, with solutions ranging from recompiling the kernel, new HDAPSD code to be compiled yourself, alternate TP_Smapi modules, switching to userspace modules and everything in between.

Fact is that a little thing went wrong when porting kernel modules from previous versions of Ubuntu to Intrepid Ibex; alledgedly some were forgotten in the proces. In particular the hdaps_ec module as reported here.

As Intrepid Ibex is, at the time of writing, using kernel 2.6.27-11-generic there still is a need for modules. However, from kernel 2.6.28 onwards tp_smapi and a correctly working HDAPS should be available in any stock kernel.

Having gotten that far, I decided it was prolly best to forget about hard disk protection for the time being. Ubuntu 9.04 (Jaunty Jackalope) is due in a few weeks - april 23rd is the foreseen due date for the final release - and just go from there on. It really is a can of worms you're opening once you try to get hdasp working...

Bit of a disapointment actually, to be honest. I was quite eager to try the knock-knock script to lock/unlock my Thinkpad (and other commands by just knocking on your TP) or the anti-theft alarm based upon the accelerometer ;-)