Sunday, September 27, 2009

Emulating and Compiling for zubuntu

Emulating Zaurus
Since compiling natively on the Zaurus was slow, I decide looking for other options. Cross-compilation seems to complicated for me to setup (though probably it's not) - for that Poky seemed the easiest way. A compromise I found was to setup an arm system under Qemu. I found some of the solution on this post in the OmegaMoon blog.
First I needed the arm flavour of Qemu, Next, I used the Qemu Manager to setup the virtual machine (it can also create virtual disks).
Qemu needs a kernel to boot, I use this one.
Then I created two empty image disks (one for the operating system and one for swap). The tricky part is to setup the virtual disks. I did it on a linux machine (I use VMware to run a linux machine).
Format the disks,

mke2fs -F -m 0 -b 1024 virtual.disk

then mount it 

sudo mount -t ext2 -o loop virtual.disk mount_point
then extract the Zubuntu rootfs to this virtual disk (this is exactly the same process as setting up zubuntu for the Zaurus). I guess this can be done using one of the prepared virtual machines.
Now I put everything in the Qemu folder and use the following script to start the virutial machine,
qemu-system-arm -kernel zImage-versatile-2.6.24-rc7.armv5tel -append "console=ttyS0,115200n8 console=tty1 noinitrd fbcon=rotate:1 dyntick=enable debug psplash=false root=/dev/sda ip=bootp" -boot c -m 256 -hda virtual.disk -hdb swap.disk -net nic,vlan=0 -net user,vlan=0 -usbdevice tablet -localtime -M versatilepb
Alternatively, I use this virtual machine in the Qemu Manager.
The last is to create the swap partition, after Qemu boot into zubuntu,
mkswap /dev/sdb
and  enable it,
swapon /dev/sdb
For zubuntu to automatically start swap when booting, add to /etc/fstab,
/dev/sdb/        /none       swap       sw       0   0

Now this virtual machine can be used to compile "natively" for the zaurus. From the few tests I made compiling here is about twice as fast as compiling on the zaurus.


OpenTTD

OpenTTD is similar to simutrans, it is less sofisticated, but the performance here is much better than in simutrans (see this post).


OpenTTD with CargDist running on my Zaurus

To compile latest OpenTTD including the CargoDist patch (wikipage, forum thread), I did the following,
First install the prerequisites,
apt-get install git-core
For CargoDest libboost-graph-dev was also required (not sure if it is required by Cargodist)
then, to get the source code,
git clone http://fickzoo.com/fonsinchen/openttd.git
git checkout origin/cargodist

configure,
./configure --enable-debug=0 --prefix-dir=/usr

That (supposedly) disables debug, the prefix dir will set the installation dir to match that of the debian package (binaries under /usr/games and data under /usr/share/games/openttd).
Now compile
make
And with a little luck OpenTTD is compiled. To configure it follow the instruction in OpenTTD's wikipage.

Tuesday, September 22, 2009

Compiling simutrans

Installing prerequisites,

apt-get install zlib1g-dev libpng12-dev libSDL1.2-dev libsdl-mixer1.2-dev subversion make g++
Get the source code,
svn co svn://tron.homeunix.org/simutrans/simutrans/trunk
Username is anon with empty password.
Setup,
Add #include "stdlib.h" to dataobj/koord.h.
Copy config.template to config.default.
Add at the end of config.default,
FLAGS += -DBIG_ENDIAN
FLAGS += -DUSE_C
and set,
BACKEND = sdl
COLOUR_DEPTH = 16
OSTYPE = linux
DEBUG = 0
OPTIMISE = 1
PROFILE=0
SDL_CONFIG = sdl-config
now,
make
On my zaurus the compilation takes about 3 hours. To run simutrans I first install the 102 version from the sid repositories and its dependencies (simutrans-pak64, simutrans-data and simutrans), then I copied the compiled binary (called sim) to /usr/share/games/simutrans and ran it from there, otherwise simutrans doesn't find the data files.
The downside is that apparently the Zaurus is too weak to run simutrans. I got 7fps at most and usually 4fps. I also tried to change to pakHAJO, but it didn't improve the situation much. I also tried pak32, which showed a little better performance.

Friday, September 4, 2009

Setup GPS on Zubuntu

First, to setup the bluetooth connection I need to install bluez,

apt-get install bluez
Next, gpsd,
apt-get install gpsd
And last tangoGPS, to present a moving map using the OpenStreetMap project (or other sources...)
apt-get install tangogps

Next setup the bluetooth connection. I'll be using rfcomm, the configuration file can be found under /etc/bluetooth/rfcomm.conf. I'm using this one. To find the bluetooth address of the device I use (after I turn on the gps, obviously),
hcitool scan
The hcid.conf is missing in Zubuntu for some reason, so I create it (under /etc/bluetooth/hcid.conf). I'm using this hcid.conf.
The pin code is saved under /etc/bluetooth/pin, and can be generated by
echo "0000" > /etc/bluetooth/pin
or any other pin code.
I also need to create the /bin/bluepincat.sh script for hcid, which contains,
#!/bin/sh
echo -n "PIN:"
cat /etc/bluetooth/pin
To bind rfcomm0 with the gps I do
rfcomm bind /dev/rfcomm0

The configuration for gpsd is under /etc/default/gpsd, there START_DAEMON should be set to "true" and DEVICES should point to "/dev/rfcomm0". To start the gpsd daemon,
/etc/init.d/gpsd start

Now I can start using tangoGPS and connect to my bluetooth GPS device.