%include "default.mgp" %default 1 bgrad %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %page %nodefault %back "blue" %center %size 7 OpenEmbedded on the Simputer Nov 26, 2006 FOSS.in, Bangalore %center %size 4 by Harald Welte %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %page OpenEmbedded About the Speaker Who is speaking to you? an independent Free Software developer one of the authors of Linux kernel packet filter busy with enforcing the GPL at gpl-violations.org working on Free Software for smartphones (openezx.org) ...and Free Software for RFID (librfid) ...and Free Software for ePassports (libmrtd) ...among other things ;) who is not a member of the OpenEmbedded project ... but a proud owner of an Amida Simputer %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %page OpenEmbedded The Problem (A) What is the Problem? (Variant A) You build an embedded device You decide to run linux You do your own embedded distribution which is a lot of work in the first place which will cause even more work for maintainance in the end, you will not provide security updates and you end up having a 'one time throw away' product Your users will not get your full build system (if there is such a thing) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %page OpenEmbedded The Problem (B) What is the Problem? (Variant B) You build an embedded device You decide to run linux You license a commercial embedded Linux variant you will most likely end up with something stale like kernel 2.4.x you will have to spend a lot of money on it you will still require quite a bit of porting Your users will never get the source packages ("SRPMS") to it %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %page OpenEmbedded The Problem (Summary) Summary of the situation You exclude the FOSS community from your product You end up with low-quality code and lots of maintenance work Your customers get a suboptimal product with limited feature set Result of that situation Your customers will start their own embedded distributions OpenWRT OpenEZX OpenZaurus Familiar ... %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %page OpenEmbedded Introduction to OE What is OpenEmbedded (OE) Not a distribution, but distribution building framework Not a software program Consists of thousands of rules Rules for definition of a machine type (78) Rules for definition of a distribution (32) Rules for individual packages (4095) Plus a program to interpret those rules bitbake "One system to rule them all" %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %page OpenEmbedded Introduction to OE What does OpenEmbedded (OE) do for you? Build a toolchain specifically for your target device with the optimizations you need for your host platform (I crosscompile from quad G5!) Build a kernel image your preferred version with your patches Build a distribution with the packages you want with the initial configuration / fs layout you want Build distribution images using rootfs of your choice (cramfs, jffs2, ...) matching for direct flash writing optionally in your own firmware update image format Build thousands of individual packages using the package manager of your choice (.ipk, .deb) packages can be later installed package repositories can be published as 'feed' (apt-get like) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %page OpenEmbedded Who uses OpenEmbedded Who uses OpenEmbedded Until 07/2006, only community projects OpenZaurus, OpenEZX, etc. Since 07/2006, the first commercial user FIC-sponsored OpenMoko.org (Linux GSM phone) OpenMoko distribution Neo1973 machie QT2410 machine .. more devices in 2007! Why not more commercial users as usual: not all that much documentation about the system but: OE core team members available for consultancy not many commercial embedded vendors interested in sustainable, long-term development %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %page OpenEmbedded The heart of OE: bitbake What is bitbake Program to interpret local configuration (.conf files) package specification (.bb files) machine/distro configuration (.conf files) Can be used to build individual native (host) and target packages build tasks (task == set of packages) build ready-made firmware images %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %page OpenEmbedded Devices ('machines') Overview of built-in device support Motorola A780 / E680 HTC Blueangel Various Sharp Zaurus models VIA EPIA boards iPAQ H1910, H1940, H2200, H3600, H3900, H4000, H5xxx, H6300 HP Jornada 6xx, 7xx i.MX31 ADS Nokia 770 Linksys NSLU2, WRT54g Asus WL-500g QEMU/ARM (for testing) Samsung SMDK 2440 PC-Engines WRAP Amida Simputer (not yet mainline) ... %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %page OpenEmbedded OE Packages An OE package is... a .bb (bitbake) file containing description license section maintainer dependencies source code + patch URI's (local or remote) so it is basically similar to a RPM spec file or debian 'rules' %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %page OpenEmbedded OE Distributions An OE distribution is a .conf file that indicates name (DISTRO_NAME) version (DISTRO_VERSION) how to build the crosscompiler which package format to use (INHERIT += package_ipk) which images to build by default (IMAGE_FSTYPES) preferred versions of many packages %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %page OpenEmbedded OE Tasks Tasks are virtual packages You can find OE Tasks in openembedded/packages/tasks Commonly used tasks are task-bootstrap (all packages for basic userspace with login) task-xterminal (boostrap + x11 + xterm) gpe-image (xterminal + GPE project) opie-image (OPIE project) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %page OpenEmbedded OE Images An OE Image is a set of OE packages pre-installed into a root filesystem again implemented as virtual package OE Image rules are found in openembedded/packages/images result provided as .tar.gz, .tar.bz2, cramfs or jffs Commonly-used images: bootstrap-image (basic system with console access) xterminal-image (bootstrap + X11 + xterm) e-image (xterminal + enlightenement e11) gpe-image (xterminal + GPE) opie-image (QtEmbedded, OPIE, no X11) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %page OpenEmbedded OE Build Setup OE Build Setup create a 'build/conf/local.conf' file TMPDIR - directory with lots of space (30G) MACHINE - the device you want to build for DISTRO - the distro you want to build BUILD_ARCH - the native architecture of the host PC (optional) install bitbake into %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %page OpenEmbedded OE Build Tree OE Build Tree layout my-oe/openembedded the openembedded rules checked out via monotone (mtn) my-oe/openembedded/packages package rule files my-oe/openembedded/conf/machine machine rule files my-oe/openembedded/conf/distro distro rule files my-oe/build/conf local.conf configuration my-oe/build/tmp/work work directory of build process my-oe/build/tmp/deploy/ipk completed ipk packages my-oe/build/tmp/deploy/images completed filesystem images %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %page OpenEmbedded The Amida Simputer The Amida simputer is a device with Intel SA-1100 StrongARM Processor 64 MB RAM 32 MB Flash USB Host port USB Device port Serial port (console) Smart Card Reader ... %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %page OpenEmbedded OE for the Amida Simputer Adding a new device to OE is extremely easy in most cases, architecture / SoC support already there you just create a "conf/machine/foobar.conf" rule file content of the file size of root flash image which rootfs format to create (jffs2, ...) which kernel to build which compiler architecture + flags to use see following example for Amida 4200 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %page OpenEmbedded OE for the Amida Simputer Which strategy to go oeputer use old compiler use original kernel try to maintain binary compatibility with existing apps this was the initial attempt, now abandoned oeputer-ng use latest toolchain (compiler, ...) use latest versions of libraries, X11 server, ... use current kernel this is the current approach, esp. after Alchemy is becoming Free Software which means we can theoretically re-compile it in practise, there's probably quite a bit of porting needed volunteers? (see next presentation on OpenAlchemy!) %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %page OpenEmbedded OE for the Amida Simputer oeputer create kernel package with original kernel tree from amida see example create bootloader package with original bootloader tree from amida this is optional we could just leave the existing bootloader if we want to do modifications, create pacakge use existing glibc, zlib, ... packages works if the versio is compatible with what simputer uses in most cases, simputer software versions are too old %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %page OpenEmbedded OE for the Amida Simputer oeputer-ng kernel initially, use oeputer kernel package later, port drivers/machine support to mainline and use 2.6.x bootloader just leave as-is or use oeputer package userspace just use most current (stable) versions of everything in OE glibc-2.4 gcc-4.1.1 x11-kdrive from X11R7.1 ... %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %page OpenEmbedded OE Build Timeline OE Build Timeline (bitbake bootstrap-image) Build Order: some native (host) libraries/tools autotools coreutils ipkg libxml m4 fakeroot the cross-toolchain binutils gcc the basic packages (from task-bootstrap) linux-libc-headers, glibc, module-init-tools zlib, ncurses, util-linux, kernel the boostrap-image (from bootstrap-image.bb) all packages from task-bootstrap create jffs / tar.bz2 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %page OpenEmbedded Status of OE on Simputer Status of OE on Simputer Proof-of-concept bootstrap-image exists Project is stalled because of lack of time Did I mention how many projects I'm involved in? Volunteers wanted If there are no volunteers taking it further, it will probably be still-born Talk to Anush Shetty! OpenAlchemy will make the whole project even more interesting the idea is to create bitbake rules for OpenAlchemy which can then be built for 'oeputer-ng' but also for many (all?) other OE supported systems! %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %page OpenEmbedded Links Links The OpenEmbedded project http://openembedded.org/ Getting Started with OpenEmbedded http://www.openembedded.org/wiki/GettingStarted The Amida Simputer http://www.amidasimputer.com/ OE on Simputer project http://simputer.gnumonks.org/ OpenMoko project http://www.openmoko.org/