Posts Tagged ‘development’
N900 Development Part 1
This section shows you how to get started (Your baby steps in N900 development starts by starting up the environment. And gettin some sample codes from the community).
Development for Maemo currently utilizes GTK, so if you’re planning on developing something for Maemo devices I’d recommend you start here and then proceed to the Maemo Wiki.
Step 1 in development is setting up the SDK which can be done by following the guide here or here
If you’ve already done that, then start up Xephyr (and here’s how). From a terminal first startup the SDK
sudo sh -c 'echo 0 > /proc/sys/vm/vdso_enabled' Xephyr :2 -host-cursor -screen 800x480x16 -dpi 96 -ac -kb &
Go into scratchbox
/scratchbox/login
Switch to the x86 environment
sb-conf se FREMANTLE_X86
export the display and start up
export DISPLAY=:2 af-sb-init.sh start
You will get a screen that looks like this
. Remember to click, click + drag and just play with it as much as possible to just make sure you get familiar with the interface
You can then look through this pseudo-maemo-emulator for applications you can install. You can start with the sample widget – the process of which is nicely documented here. Or better yet, write (and compile) your own obligatory Hello World program as documented here
Maemo SDK installation on Linux
There are 3 Options on how to install the Maemo 5 SDK,
1. The GUI Installer (recommended)
2. Script based installer.
Instruction for both can be found here
3. Manual installation
This is a Manual Installation instruction, covering the installation of Scratchbox, Nokia + Maemo binaries and Xephyr X server – which are the prerequisites for development. The host machine here is Debian based machine. so k/ubuntu will work. I’ve tried this on Kubuntu 9.10 with a 32-bit architecture and can confirmt that it works. I can’t guarantee you it will work on a 64-bit machine.
- Install Xephyr
- Download / Install scratchbox
- Setup Scratchbox
- Setup Mamemo Packages
- Log into scratchbox environment
- Configure the scratchbox x86 and armel target as such:
- Now download the rootstraps:
- Now switch to the x86 target and install the binaries,
- Add the nokia repos
- fix the scratchbox symlinks
- repeat the same for armel architecture
- Startup Xephyr, with the x86 targets pointing the output to it
sudo aptitude install xserver-xephyr
Note: before you start, take note that scratchbox installs by default in “/scratchbox” so make sure you have about 4GB’s in your “/” partition.
sudo sh -c 'echo "deb http://scratchbox.org/debian/ maemo5-sdk main" > /etc/apt/sources.list.d/scratchbox.list'
sudo aptitude update
sudo aptitude install scratchbox-core scratchbox-libs scratchbox-devkit-qemu scratchbox-devkit-debian scratchbox-devkit-doctools scratchbox-devkit-perl scratchbox-toolchain-host-gcc scratchbox-toolchain-cs2007q3-glibc2.5-arm7 scratchbox-toolchain-cs2007q3-glibc2.5-i486 scratchbox-devkit-svn scratchbox-devkit-git scratchbox-devkit-apt-https
in the terminal, first make user you are logged in as your default user. Not the root user. And type:
sudo /scratchbox/sbin/sbox_adduser $USER yesThis is optional, But I’d do it anyway just in case :
sudo ln -s /scratchbox/users/$USER/home/$USER /scratchbox/users/$USER/home/user sudo sh -c 'echo "nameserver 8.8.8.8" >> /scratchbox/etc/resolv.conf'
sudo sh -c 'echo "nameserver 8.8.4.4" >> /scratchbox/etc/resolv.conf'
You will need to ensure:
1. your group membership is registered in the current terminal
2. VDSO support is disabled,
to do so run these in the terminal: newgrp sbox
sudo sh -c 'echo 0 > /proc/sys/vm/vdso_enabled'
/scratchbox/login If this works, you will be inside of the scratchbox environment; and you will see something this in the terminal: [sbox->:~]>
sb-conf st FREMANTLE_X86 -c cs2007q3-glibc2.5-i486 -d perl:debian-etch:doctools:svn:git -t noneit is safe to ignore the warnings here.
sb-conf st FREMANTLE_ARMEL -c cs2007q3-glibc2.5-arm7 -d qemu:perl:debian-etch:doctools:svn:git -t qemu-arm-sb
wget http://repository.maemo.org/stable/5.0/armel/maemo-sdk-rootstrap_5.0_armel.tgz http://repository.maemo.org/stable/5.0/i386/maemo-sdk-rootstrap_5.0_i386.tgz
If networking doesn’t work inside of scratchbox, check your DNS server settings. Unfortunately there’s no `ping` inside of scratchbox so the only way to do this is to edit /scratchbox/etc/resolv.conf from OUTSIDE of scratchbox and paste the following:
nameserver 8.8.8.8From inside scratchbox, paste the same lines to “/etc/resolv.conf”
nameserver 8.8.4.4
sb-conf se FREMANTLE_X86
sb-conf rs maemo-sdk-rootstrap_5.0_i386.tgz
sb-conf in -edFL
You’ll need to do some apt trickery here for maemo related items. So first accept the EULA here and copy the URL, paste the it into /etc/apt/sources.list (inside scratchbox) and then:
apt-get updateKeep the url, you will need it later on in this installation
fakeroot apt-get install maemo-sdk-debug nokia-binaries nokia-apps
According to the instructions from maemo you will need to remove a symlink and replace it with a folder so do this in the terminal: rm /targets/FREMANTLE_X86/opt
mkdir /targets/FREMANTLE_X86/opt
At this point the x86 target is setup, you will need to do the same for the armel target.
edit the file /etc/apt/sources.list and paste the URL that you got previously after agreeing to the EULA
sb-conf se FREMANTLE_ARMEL
sb-conf rs maemo-sdk-rootstrap_5.0_armel.tgz
sb-conf in -edFL
apt-get update
fakeroot apt-get install maemo-sdk-debug nokia-binaries nokia-apps
rm /targets/FREMANTLE_ARMEL/opt
mkdir /targets/FREMANTLE_ARMEL/opt
export DISPLAY=:2And from OUTSIDE the scratchbox environment:
af-sb-init.sh start Xephyr :2 -host-cursor -screen 800x480x16 -dpi 96 -ac -kb & And you will be greeted with a very reassuring emulator-like environment emulating the Maemo 5 on a Nokia N900

N900 development Part 2
Before you continue on reading, understand that a prerequisite is for you to start with part 1 and especially Maemo’s Getting Started guide.
For this guide, I’ll be showing how to create multiple widgets in one window. The code from Maemo provides you one window with one widget (the button). You cannot add on more widgets to the example just like that. Adding >1 widget to a HildonWindow will still allow the program to compile, however if you run it you will have to expect an error message that looks something like “… as a GtkBin subclass a HildonWindow can only contain one widget at a time; it already contains a widget of type …”
So the alternative is to create one vBox (or hBox) and pack all other widgets (including other hBox and vBox) inside of it. The end result from the sample should be an applicati
on with an interface that looks like this
3-button hello world app on N900 emulator
The blog formatting makes it a bitch to paste my code here, so just download the code into scratchbox environment with something like this:
You should now be able to compile the program with the following line:
Execute the programe
And voila.
Take note of how the hbox is prepared and then packed into the vbox. Understanding the interaction is key to your own gui development with C, GTK, and Hildon.
Credit where credit’s due, I stole and modified the code from Maemo’s Wiki