laforge-slides/2006/oe_simputer-foss.in-2006/oe_simputer.mgp

424 lines
11 KiB
Plaintext

%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 <laforge@gnumonks.org>
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%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/