2. What is Embedded Linux?
●
porting the Linux kernel to run on a particular
CPU and board which will be put into an
embedded device.
●
There are many companies that sell embedded
Linux solutions.
●
These usually include a ported Linux kernel with
cross-development tools, and sometimes with
real time extensions.
●
the APIs and kernel codebase are the same for
embedded Linux as desktop Linux
2
3. Why Embedded Linux?
●
Royalty-free
●
Strong networking support
●
Has already been ported to many different CPU
architectures
●
Relatively small for its feature set
●
Easy to configure
●
Huge application base
●
Modern OS (eg. memory management, kernel
modules, etc.)
3
6. Building system
●
Configure and compile Toolchain
– Better idea: use already made
●
Configure and make the boot-loader
●
Install the boot loader on the target
– Use special hardware or older board boot loader
●
Configure and compile the kernel
●
Build file system
6
9. C library
http://www.gnu.org/software/libc/
●
License: LGPL
●
C library from the GNU project
●
Designed for performance, standards compliance and
portability
●
Found on all GNU / Linux host systems
●
Quite big for small embedded systems: about 1.7 MB
on Familiar Linux iPAQs (libc: 1.2 MB, libm: 500
KB)
10. uClibc
http://www.uclibc.org/ for CodePoet Consulting
License: LGPL
Lightweight C library for small embedded systems, with most
features though.
The whole Debian Woody was ported to it...
You can assume it satisfied most needs!
Size (arm): 4 times smaller than glibc!
uClibc: approx. 400 KB (libuClibc: 300 KB, libm: 55KB)
glibc: approx 1700 KB (libc: 1.2 MB, libm: 500 KB)
Now supported by MontaVista and TimeSys.
11. newlib
http://sources.redhat.com/newlib/
Minimal C library for very small embedded systems
●
Lets you remove floating point support wherever you
don't need it. Also provides an integer only
iprintf() function. Much smaller!
●
Provides single precision math library functions. Much
faster than the standard IEEE compliant ones.
14. Platform specific toolchains
ARM
●
Code Sourcery (glibc only, used by many):
http://www.codesourcery.com/gnu_toolchains/arm/
Also available for Solaris and Windows workstations.
●
ftp://ftp.handhelds.org/projects/toolchain/ (glibc only)
MIPS
●
http://www.linux-mips.org/wiki/Toolchains (useful links)
15. Toolchain building utilities
Buildroot: http://buildroot.uclibc.org/
●
Dedicated Makefile to build uClibc based toolchains
and even entire root filesystems.
●
Downloads sources and applies patches.
Crosstool: http://www.kegel.com/crosstool/
●
Dedicated script to build glibc based toolchains
Doesn’t support uClibc yet.
●
Downloads sources and applies patches.
16. Scratchbox
http://scratchbox.org/ - A cross-compiling toolkit project
Makes it easier to cross-compile
a complete embedded Linux system.
Works by allowing tools to be cross-compiled in a
transparent way, making building tools believe they are
doing a native compile job.
Supported platforms: arm, x86
Uses the qemu emulator to transparently run built arm
binaries.
Experimental support for ppc, mips and cris.
17. qemu
http://qemu.org
Fast processor emulator
using a portable dynamic translator.
Full system emulation
Emulates the processor and various peripherals
Supported: x86, x86_64, ppc, arm, sparc, mips
To know which machine types are supported:
qemusystemarm M ?
i386, x86_64 system emulation: now close to native speeds
thanks to the kqemu kernel module (now GPL v2!).
18. ARM emulators
Only Free Software, of course!
●
SkyEye: http://skyeye.sourceforge.net
Emulates several ARM platforms (AT91, Xscale...) and
can boot several operating systems (Linux, uClinux, and
others)
●
Softgun: http://softgun.sourceforge.net
Virtual ARM system with many virtual on-board
peripherals. Boots Linux.
●
SWARM - Software ARM - arm7 emulator
http://www.cl.cam.ac.uk/~mwd24/phd/swarm.html
Can run uClinux
20. Minicom
●
Definition: serial communication program
●
Available in all GNU / Linux distributions
●
Capabilities (all through a serial link):
– Serial console to a remote Unix system
– File transfer
– Modem control and dial-up
– Serial port configuration
21. General purpose toolbox: BusyBox
http://www.busybox.net/
Most Unix command line utilities within a single executable!
It even includes a web server!
Sizes less than < 500 KB (statically compiled with uClibc) or less
than 1 MB (statically compiled with glibc).
Easy to configure which features to include.
The best choice for
Initramfs / initrd with complex scripts
Small and medium size embedded systems
See http://www-128.ibm.com/developerworks/linux/library/l-busybox/
for a nice introduction.
22. ssh server and client: dropbear
http://matt.ucc.asn.au/dropbear/dropbear.html
Very small memory footprint ssh server for embedded systems
Satisfies most needs. Both client and server!
Size: 110 KB, statically compiled with uClibc on i386.
(OpenSSH client and server: approx 1200 KB,
dynamically compiled with glibc on i386)
Useful to:
– Get a remote console on the target device
– Copy files to and from the target device (scp or rsync
e ssh).
23. Benefits of a web server interface
Many network enabled devices can just have a network interface
Examples: modems / routers, IP cameras, printers...
No need to develop drivers and applications for computers
connected to the device. No need to support multiple operating
systems!
Just need to develop static or dynamic HTML pages
(possibly with powerful client-side JavaScript).
Easy way of providing access to device information and
parameters.
Reduced hardware costs (no LCD, very little storage space
needed)
24. Linux porting projects
Useful to find patches, binaries, documentation,
toolchains...
Only ports for embedded systems are listed
arm: http://www.arm.linux.org.uk/
See also http://www.linux-arm.org/ (from ARM Limited)
m68k: http://www.linux-m68k.org/
mips: http://www.linux-mips.org/
ppc: http://penguinppc.org/embedded/
sh: http://linuxsh.sourceforge.net/
xtensa: http://xtensa.sourceforge.net/
25. Useful web sites
LinuxDevices.com: http://linuxdevices.com
●
Weekly newsletter with news and announcements
about embedded devices running Linux.
●
Articles, whitepapers, and Linux embedded devices
catalog.
●
An excellent site to follow industry news!
26. Example:
●
Download CodeSourcery's toolchain installer for
GNU/Linux target for IA32 host
●
Install it: sh arm-2008q3-72-arm-none-linux-gnueabi.bin
●
The toolchain provides the cross compiler
arm-none-linux-gnueabi-gcc. You need to put it's
directory in your $PATH. Once you have the toolchain,
you can easily compile your hello world program:
arm-none-linux-gnueabi-gcc -o hello -static hello.c
●
Copy the binary to your phone and run it from an adb
shell prompt: ./hello