Upload
jean-michel-bouffard
View
1.400
Download
2
Tags:
Embed Size (px)
DESCRIPTION
Tutorial presentation about embedded development on the Openmoko platform. Presented at the fosslc.org event "Free/Open Source Mobile Development: An Introduction" in Waterloo, Canada
Citation preview
Getting started withopen mobiledevelopment on theOpenmoko platformPresented at osbootcamp YYZ1 (Mobile embedded development conference Waterloo, Canada)
by JeanMichel Bouffard
<jean[email protected]>
2
Summary
✔ Setting up the development environment✔ OM toolchain✔ OpenEmbedded build system
✔ Creating a simple first project for the platform✔ Running the application
✔ Openmoko emulator✔ FreeRunner device
✔ Packaging a custom distribution✔ Adding new hardware components
3
Introduction
✔ Openmoko OM2008.x distribution build environment is using:
✔ OpenEmbedded (http://wiki.openembedded.net)✔ Examples from this tutorial are done using:
✔ Ubuntu 8.10 i686 host system✔ Official OM2008.x Openmoko distributions
4
Introduction
✔ Choose your development toolkit
5
Introduction
✔ Choose your build system✔ Toolchain
✔ Installs only a crosscompiler and basic libraries for application development
✔ Can build applications only✔ Unstable and less recommended
✔ OpenEmbedded✔ Install the complete build system for Openmoko
distributions✔ Can build applications and full OS images✔ More stable and recommended
6
Setting up the development environment Toolchain
✔ Requirements✔ autotools build system✔ default packages:
✔ autoconf, automake, binutils, gcc, gccc++, libtool, ccache, intltool
✔ distro dependent packages (Ex. Ubuntu 8.10):✔ libglib2.0dev libxrenderdev libmokoui2dev libgconf2dev
mtools fakeroot alien check ubootmkimage✔ Complete list available on the openmoko wiki at
http://wiki.openmoko.org/wiki/Toolchain
7
Setting up the development environment Toolchain
✔ Installation✔ download toolchain archive from
http://downloads.openmoko.org/toolchains✔ extract archive to /
✔ Prepare environment variables✔ use “setupenv” script
> wget http://downloads.openmoko.org/toolchains/openmokoi686armlinuxgnueabitoolchain.tar.bz2
> cd /> tar xjvf ~/openmokoi686armlinuxgnueabitoolchain.tar.bz2> . /usr/local/openmoko/arm/setupenv
8
Setting up the development environment Toolchain
✔ The clean toolchain is like a Linux system without any development libraries, so dependencies related to the new software project must be installed
✔ Preparation of environment✔ Modifications of the toolchain must be done as a “super user”✔ Set environment with the “setupenv” script
✔ Installation of libraries✔ Update packages list with “opkgtarget”✔ Search and install packages with “opkgtarget”
> sudo bash> . /usr/local/openmoko/arm/environmentsetup> opkgtarget update> opkgtarget list | grep gtk+dev> opkgtarget install gtk+dev
9
Setting up the development environment Toolchain
✔ Application development can be done on the host system with desktop development tools
✔ Building for the target platform using the toolchain✔ Preparation of environment
✔ Application development can be done as a “normal user”✔ Set environment with the “setupenv” script
✔ Building applications✔ Configure application with “omconf”✔ Build application as usual with “make”
> . /usr/local/openmoko/arm/environmentsetup> cp r /usr/local/openmoko/source/openmokosample2 ~/> omconf openmokosample2> cd openmokosample2> make
10
Setting up the development environment OpenEmbedded
✔ Install required packages✔ Default packages:
✔ subversion, texi2html, texinfo, help2man✔ ncurses, zlib (or libz), OpenSSL, GTK++
✔ Complete list can be found at http://wiki.openmoko.org/wiki/MokoMakeFile#Required_software
✔ Download MokoMakefile✔ http://www.rwhitby.net/files/openmoko/Makefile
> mkdir ~/moko; cd ~/moko> wget http://www.rwhitby.net/files/openmoko/Makefile
11
Setting up the development environment OpenEmbedded
✔ Start build:✔ make setup✔ To accelerate the build on a multicore computer, add these two
lines in the file “build/conf/local.conf”✔ PARALLEL_MAKE = "j 4"✔ BB_NUMBER_THREADS = "4"
✔ make setupmachineomgta02✔ make image
✔ Wait (6220 steps generate 10GB of data in ~10 hours!)> make setup> make setupmachineomgta02> make image
12
Setting up the development environment OpenEmbedded
✔ You will encounter build errors✔ Check errors in log files
✔ For instance, compilation log files for the alsautils package can be found in ~/moko/build/tmp/work/armv4tangstromlinuxgnueabi/alsautils1.0.15r1/temp/log.do_compile.xxxx
✔ Correct errors if any✔ Update environment, clean package and restart build
✔ make updatemakefile setup update✔ make cleanpackage<pkg_error>; make image
> tail ~/moko/build/tmp/work/armv4tangstromlinuxgnueabi/alsautils1.0.15r1/temp/log.do_compile.25688
> make updatemakefile > make setup update> make cleanpackagealsautils> make image
13
Setting up the development environment OpenEmbedded
✔ Add additional requirements for the development✔ make buildpackage<pkg_req>
✔ Newly built packages will be written to the deployment folder
✔ ~/moko/build/tmp/deploy/glibc/opk/armv4t/✔ Missing packages are not part of the generated
OM2008.x image, they need to be installed along with the new application
> make buildpackagelibglade
14
Creating a simple first project for the platform
✔ For this example, we will build a GTK+ application✔ Anjuta development environment✔ Glade Interface Designer
15
Creating a simple first project for the platform
16
Creating a simple first project for the platform
17
Creating a simple first project for the platform
✔ Glade interface designer lets you create an interface easily for your new application
✔ Follow UI design recommendations✔ Instantaneous save, finger usage, efficient layout, etc
18
Creating a simple first project for the platform
✔ An icon and desktop item must beadded
✔ /data/openmokocalc.png✔ /data/openmokocalc.desktop✔ /data/Makefile.am
[Desktop Entry]Encoding=UTF8Name=Openmoko CalcComment=Simple calculator applicationExec=openmokocalcIcon=openmokocalcTerminal=falseType=ApplicationCategories=Application;Utilities;MimeType=text/xvcard;SingleInstance=trueStartupNotify=true
## desktop integration: .desktop file#desktopdir = $(datadir)/applicationsdist_desktop_DATA = openmokocalc.desktop
## desktop integration: application icon#appicondir = $(datadir)/pixmapsdist_appicon_DATA = openmokocalc.png
/data/Makefile.am/data/openmokocalc.desktop
/data/openmokocalc.png
19
Creating a simple first project for the platform
✔ Build the application for the host computer
20
Creating a simple first project for the platform
✔ Test the application...
✔ ...then create a source tarball
21
Creating a simple first project for the platform
✔ BitBake is used to manage builds in OpenEmbedded✔ A BitBake recipe is needed to identify how to build a
packageDESCRIPTION = "Openmoko Calculator"AUTHOR = "JeanMichel Bouffard <jean[email protected]>"HOMEPAGE = "http://www.crc.ca/mmb"SECTION = "console/applications"PRIORITY = "optional"LICENSE = "GPL"DEPENDS = ""RDEPENDS = ""PN = "openmokocalc"PV = "0.1"PR = "r0"EXTRA_OECONF += ""
SRC_URI = "file://openmokocalc0.1.tar.gz"
inherit autotools
/openmokocalc.bb
22
Creating a simple first project for the platform
✔ Build application for Openmoko using the “bitbake” command
✔ configuration script is executed with flags for crosscompiler✔ compiler and linker are executed✔ application installation is validated✔ ipk package is created
✔ application can be found in:✔ ~/moko/build/tmp/deploy/glibc/opk/armv4t/
> cd ~/moko/build> . ../setupenv> bitbake b ~/workspace/openmoko_calc/openmokocalc.bb> cp ~/moko/build/tmp/deploy/glibc/opk/armv4t/openmokocalc_0.1r0_arm4t.ipk ~/.
23
Running the application Emulator
✔ An emulator base on the QEMU project is available✔ The use of the emulator is not recommended
✔ The emulator supports the Neo 1973 only✔ The latest ON2008.x distributions do not support the Neo
1973✔ To use the emulator anyway:
✔ The MokoMakefile can build and install the emulator automatically
> cd ~/moko> make qemu
24
Running the application Device
✔ Flashing the operating system into the device✔ Two main partitions must be written into internal flash memory
✔ The Linux kernel (kernel)✔ The OS and applications files (rootfs)
✔ Start the phone in flashing mode by holding the option button while pressing the power button
✔ Use “dfuutil” (distributed with OpenEmbedded)✔ “dfuutil l“ confirms that the phone is working if listed✔ “dfuutil a <partition> R D <image>” starts flashing
> ./dfuutil l> sudo ./dfuutil a kernel R D ./uImage2.6.24+gitr0r2.01omgta02.bin (takes 12
minutes)> sudo ./dfuutil a rootfs R D ./openMokoasuimageomgta02.jffs2 (takes 1015 minutes)
25
Running the application Device
✔ Boot Neo FreeRunner by pressing the power button✔ Connect USB connector✔ Activate networking
✔ By default, the usb0 interface is enabled on the FreeRunner at address 192.168.0.202
✔ Use “ifconfig” to enable usb0 interface on host✔ Add “route” to usb0 if host main address is 192.168.0.x
> sudo ifconfig usb0 192.168.0.200 netmask 255.255.255.0> sudo route add host 192.168.0.202 dev usb0 (required if host address is in 192.168.0.x
range)
26
Running the application Device
✔ Transfer application package to device✔ Use Secure copy (scp) to [email protected]
✔ Connect to device✔ Use secure shell (ssh) connection [email protected]
✔ Install application✔ Use opkg package manager to install .ipk files
host> scp *.ipk [email protected]:.host> ssh [email protected] (no password)freerunner> opkg install libglade2.00_2.6.2r2_arm4t.ipkfreerunner> opkg install openmokocalc_0.1r0_arm4t.ipkfreerunner> exit
27
Running the application Device
✔ Run application from OM2008.x menu using the installed icon
28
Packaging a custom distribution
✔ Custom distribution can be generated by using the “local overlay” option from OpenEmbedded
✔ Provides a local structure for custom code and build configurations
✔ Create the following file structure in ~/moko✔ local local/conf local/classes local/packages
local/packages/images local/packages/tasks
> mkdir local local/conf local/classes local/packages local/packages/images local/packages/tasks p
29
Packaging a custom distribution
✔ Copy the main configuration file into the local overlay✔ from “build/conf/site.conf” to “local/conf/site.conf”
✔ Edit these lines✔ BBFILES := "${OMDIR}/openembedded/packages/*/*.bb $
{OMDIR}/oe/packages/*/*.bb ${OMDIR}/local/packages/*/*.bb"✔ BBFILE_COLLECTIONS = "upstream local overlay"
✔ Add these lines✔ BBFILE_PATTERN_overlay = " ^ ${OMDIR}/local/"✔ BBFILE_PRIORITY_overlay = "20"
> cp build/conf/site.conf local/conf/site.conf> vi local/conf/site.conf
30
Packaging a custom distribution
✔ Modify “~/moko/setupenv” script to take into account the new local overlay
✔ export BBPATH="${OMDIR}/local:${OMDIR}/build:${OMDIR}/openembedded"
✔ The local overlay will now be taken into account when building packages
> vi ~/moko/setupenv
31
Packaging a custom distribution
✔ Generate the new build configuration files✔ local/packages/images/exampleopenmokodevelimage.bb
require creatoropenmokoimage.bbIMAGE_INSTALL += "taskopenmokodebug"
## OpenMoko Image Recipe#export IMAGE_BASENAME = "${PN}"export IMAGE_LINGUAS = ""export IMAGE_INSTALL = "\${MACHINE_TASK_PROVIDER} \taskopenmokolinux \taskopenmokonet \taskopenmokoui \taskopenmokobase \taskopenmokophone \taskopenmokogames \taskopenmokopim \taskopenmokoexample \"inherit imageLICENSE = MITROOTFS_POSTPROCESS_COMMAND += 'date "+%m%d%H%M%Y" >${IMAGE_ROOTFS}/etc/timestamp'
✔ local/packages/images/exampleopenmokoimage.bb
32
Packaging a custom distribution
✔ local/packages/tasks/taskopenmokocreator.bb
✔ Start build operation✔ Using the “bitbake” command
DESCRIPTION = "OpenMoko: Example of a custom configuration"SECTION = "openmoko/base"LICENSE = "original"PR = "r0"inherit taskRDEPENDS_taskopenmokoexample = "\libglade \openmokocalc \"
> cd ~/moko/build> . ../setupenv> bitbake exampleopenmokodevelimage
33
Adding new hardware components
✔ Different connections are available to extend hardware capabilities:
✔ USB✔ SDIO✔ Bluetooth✔ I2C✔ Serial interfaces
✔ USB port is available outside the case. Other connections would require further modifications
34
Adding new hardware components USB peripherals
✔ Internal USB test points can be used to integrate a USB component
✔ Schematics available from http://openmoko.com
✔ Marked on FreeRunner schematic as HTP4901, HTP4902, HTP4903, HTP4904
✔ Configuration✔ USB port must be switched from
device to host mode of operation✔ USB power mode can be selected to
provide power to the device from the FreeRunner battery
35
Conclusion
✔ Application development for the Openmoko platform is comparable to desktop development
✔ Many new improvements of the operating system and the available software are expected in the next months
✔ Development tools need to be improved to offer better stability and ease of use
✔ The toolchain should be the way to go for easy software development, but configuration issues make it difficult to use
✔ The OpenEmbedded environment is not practical because of the large disk space and build time requirements
36
Conclusion
✔ More information at:✔ Openmoko Open. Mobile. Free.
http://wiki.openmoko.org✔ Openmoko developer guide
http://wiki.openmoko.org/wiki/Openmoko_developer_guide✔ OpenEmbedded Crosscompile environment to create a
complete Linux Distribution for embedded systems.http://wiki.openembedded.net/index.php/Main_Page
✔
37
THANK YOU