Building a hello world application
From Openmoko
Contents |
Preparation
This guide assumes that you have performed the steps in Building_OpenMoko_from_scratch
The commandline program
Store the following more or less standard hello world code in hello.c
#include <stdio.h> int main() { printf ("Hello World\n"); return 0; }
Compiling it the wrong / easy way
Assuming your current working directory is /home/moko, and that you stored the code in /home/moko/hello.c
It should now be possible to compile the application using
./build/tmp/cross/arm-linux/bin/gcc -o hello hello.c
Testing it
Assuming you have followed Setting up USB connection and you have a working network connection to either a qemu Neo or a real Neo.
scp hello root@192.168.0.202:/tmp/ ssh root@192.168.0.202 /tmp/hello
This sequence of commands ought to give you a nice Hello World, btw. the default root password is blank, just press return.
Why was it the wrong way?
OpenMoko uses [OpenEmbedded] and they use bitbake when building stuff, but at least you now know that you can cross compile for OpenMoko.
Compiling it using bitbake
If you set your enviroment (I created a small script to do this, you could also add it to you .bashrc)
export OMDIR=/home/moko export BBPATH=$OMDIR/build:$OMDIR/openmoko/trunk/oe:$OMDIR/openembedded
You should be capable of
cd $OMDIR/build bitbake nano
This should auto-magically fetch the recipe for baking nano and baking it.
This results in some ipk packages being created in $OMDIR/build/tmp/deploy/ipk/armv4t/
According to [UsefulTargets | OpenEmbedded] there is a helloworld target, however on my machine it fails with 'ERROR: Nothing provides dependency helloworld'
While this hasn't brought us closer to actually baking a helloworld it demonstrates what we should eventually be capable of doing for our new and revolutionary software for OpenMoko.
An OpenEmbedded guide to creating a hello world
OpenEmbedded has a nice [Wiki page] on creating a hello world, I highly recommend it.
Creating an ipk package
To be written (Perhaps this is done by the do_install() function)