View stunning SlideShares in full-screen with the new iOS app!Introducing SlideShare for AndroidExplore all your favorite topics in the SlideShare appGet the SlideShare app to Save for Later — even offline
View stunning SlideShares in full-screen with the new Android app!View stunning SlideShares in full-screen with the new iOS app!
Module-4 Introduction Embedded
Tushar B Kute
What is Embedded Linux?
porting the Linux kernel to run on a particular
CPU and board which will be put into an
There are many companies that sell embedded
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
Why Embedded Linux?
Strong networking support
Has already been ported to many different CPU
Relatively small for its feature set
Easy to configure
Huge application base
Modern OS (eg. memory management, kernel
– BlueCat Linux
Hard Real-time support
Embedded Linux System
– Many types
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
Choose C library
Use the toolchain to create
– User space applications
– Kernel modules (drivers)
Many free tools
Root file systems
C library from the GNU project
Designed for performance, standards compliance and
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
http://www.uclibc.org/ for CodePoet Consulting
Lightweight C library for small embedded systems, with most
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.
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.
“Kernel C library”
Tiny and minimalistic C library designed for use in an
initramfs at boot time (alternative to initrds).
Fine for the creation of simple shell scripts.
Not elaborate enough to support BusyBox
Platform specific toolchains
Code Sourcery (glibc only, used by many):
Also available for Solaris and Windows workstations.
ftp://ftp.handhelds.org/projects/toolchain/ (glibc only)
http://www.linux-mips.org/wiki/Toolchains (useful links)
Toolchain building utilities
Dedicated Makefile to build uClibc based toolchains
and even entire root filesystems.
Downloads sources and applies patches.
Dedicated script to build glibc based toolchains
Doesn’t support uClibc yet.
Downloads sources and applies patches.
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
Experimental support for ppc, mips and cris.
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!).
Only Free Software, of course!
Emulates several ARM platforms (AT91, Xscale...) and
can boot several operating systems (Linux, uClinux, and
Virtual ARM system with many virtual on-board
peripherals. Boots Linux.
SWARM - Software ARM - arm7 emulator
Can run uClinux
Can boot uClinux
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
General purpose toolbox: BusyBox
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
for a nice introduction.
ssh server and client: dropbear
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)
– Get a remote console on the target device
– Copy files to and from the target device (scp or rsync
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
Just need to develop static or dynamic HTML pages
Easy way of providing access to device information and
Reduced hardware costs (no LCD, very little storage space
Linux porting projects
Useful to find patches, binaries, documentation,
Only ports for embedded systems are listed
See also http://www.linux-arm.org/ (from ARM Limited)
Useful web sites
Weekly newsletter with news and announcements
about embedded devices running Linux.
Articles, whitepapers, and Linux embedded devices
An excellent site to follow industry news!
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