Introduction To Uclinux: Michael Opdenacker Free Electrons
Introduction To Uclinux: Michael Opdenacker Free Electrons
Introduction To Uclinux: Michael Opdenacker Free Electrons
VM
Introduction to uClinux
Michael Opdenacker
Free Electrons
http://freeelectrons.com
Created with OpenOffice.org 2.x
Thanks to Nicolas Rougier (Copyright 2003, http://webloria.loria.fr/~rougier/) for the Tux image
Introduction to uClinux
© Copyright 20042008, Free Electrons
Creative Commons AttributionShareAlike 2.5 license
http://freeelectrons.com Oct 16, 2008
1
Rights to copy
Attribution – ShareAlike 2.5
© Copyright 20042007
You are free Free Electrons
to copy, distribute, display, and perform the work feedback@freeelectrons.com
to make derivative works
to make commercial use of the work Document sources, updates and translations:
Under the following conditions http://freeelectrons.com/articles/uclinux
Attribution. You must give the original author credit.
Corrections, suggestions, contributions and
Share Alike. If you alter, transform, or build upon this work,
you may distribute the resulting work only under a license translations are welcome!
identical to this one.
For any reuse or distribution, you must make clear to others the
license terms of this work.
Any of these conditions can be waived if you get permission from
the copyright holder.
Your fair use and other rights are in no way affected by the above.
License text: http://creativecommons.org/licenses/bysa/2.5/legalcode
Introduction to uClinux
© Copyright 20042008, Free Electrons
Creative Commons AttributionShareAlike 2.5 license
http://freeelectrons.com Oct 16, 2008
2
Best viewed with...
This document is best viewed with a recent PDF reader
or with OpenOffice.org itself!
Take advantage of internal or external hyperlinks.
So, don’t hesitate to click on them!
Find pages quickly thanks to automatic search.
Use thumbnails to navigate in the document in a quick way.
If you’re reading a paper or HTML copy, you should get your copy
in PDF or OpenOffice.org format on
http://freeelectrons.com/articles/uclinux!
Introduction to uClinux
© Copyright 20042008, Free Electrons
Creative Commons AttributionShareAlike 2.5 license
http://freeelectrons.com Oct 16, 2008
3
Contents
uClinux project overview
uClinux implementation details
Using uClinux
Introduction to uClinux
© Copyright 20042008, Free Electrons
Creative Commons AttributionShareAlike 2.5 license
http://freeelectrons.com Oct 16, 2008
4
Acronyms
MMU: Memory Management Unit
MPU: Memory Protection Unit
GOT: Global Offset Table Used in executable formats.
ELF: Executable and Linkable Format
A file format describing executables, object code, shared libraries and
core dumps. The OS uses it to know how to load executables and shared
libraries.
PIC: Position Independent Code
Object code without absolute addresses, which can execute at different
locations in memory.
See http://en.wikipedia.org/wiki/Position_independent_code
Introduction to uClinux
© Copyright 20042008, Free Electrons
Creative Commons AttributionShareAlike 2.5 license
http://freeelectrons.com Oct 16, 2008
5
The MMU job
MMUs included in many general purpose processors available today
Virtual to physical address translation.
Allows processes to run in their own virtual contiguous address space. No
need for relocating process addresses. Possible to expand the address
space of a running process.
The MMU raises an exception when no physical address is available,
making it possible to implement swapping to disk.
Address protection
Actually done by the MPU available in most MMUs.
Prevents processes from accessing unauthorized memory addresses.
Note that some systems just have an MPU, but no MMU.
Introduction to uClinux
© Copyright 20042008, Free Electrons
Creative Commons AttributionShareAlike 2.5 license
http://freeelectrons.com Oct 16, 2008
6
Introduction to uClinux
uClinux project overview
Introduction to uClinux
© Copyright 20042008, Free Electrons
Creative Commons AttributionShareAlike 2.5 license
http://freeelectrons.com Oct 16, 2008
7
The uClinux project
http://www.uclinux.org/ Linux for microcontrollers
Deliveries:
Linux kernel supporting MMUless processors
(at least 32 bit) Supported in mainstream sources
or through patches.
Software distribution (source only):
http://www.uclinux.org/pub/uClinux/dist/
uClibc: a lightweight though highly compatible C library.
Now an independent project. Used by Linux too!
Crosscompiling toolchains.
Introduction to uClinux
© Copyright 20042008, Free Electrons
Creative Commons AttributionShareAlike 2.5 license
http://freeelectrons.com Oct 16, 2008
8
uClinux devices
Tiny Single Board Network devices
Just a few examples! Computers
Send us more!
uClinux is often so deeply embedded
that it's difficult to identify SnapGear LITE2 VPN/Router
C Data Solutions
CF computer
Multimedia
Simtec SBCs
Industrial
picotux RJ45 size StarDot NetCam
Apple iPod (not shipped with uClinux) computer
Sigma Designs EM8500 based DVD players Aplio/PRO IP Phone
IntelliCom remote control system
Introduction to uClinux
© Copyright 20042008, Free Electrons
Creative Commons AttributionShareAlike 2.5 license
http://freeelectrons.com Oct 16, 2008
9
uClinux history
First release in 1998 (Linux 2.0),
for the Motorola 68000 processor.
Demonstrated on Palm Pilot III.
1999: Motorola ColdFire support
2001: Linux 2.4 support. ARM7 support
2004: Linux 2.6 support for ARM
2008: You're reading this document
Introduction to uClinux
© Copyright 20042008, Free Electrons
Creative Commons AttributionShareAlike 2.5 license
http://freeelectrons.com Oct 16, 2008
10
Reasons for using uClinux (1)
Linux Cheaper
Builtin IP connectivity, MMUless arm cores are smaller.
reliability, portability, filesystems,
Sufficient
free software...
A large number of embedded
Lightweight systems applications can do
Full Linux 2.6 kernel under 300K, without an MMU.
binaries much smaller with
Faster
uClibc.
Faster context switches: no cache
XIP (Execute In Place) flushes.
Don't have to load executables in
RAM. May run slower though.
Introduction to uClinux
© Copyright 20042008, Free Electrons
Creative Commons AttributionShareAlike 2.5 license
http://freeelectrons.com Oct 16, 2008
11
Reasons for using uClinux (2)
User access to the hardware Full multitasking
User applications can access the Just minor limitations
whole system, including device
Supported on many processors,
registers.
which wouldn't be supported by
Full Linux API Linux otherwise.
Can use most Linux system calls See http://www.uclinux.org/ports/
with minor exceptions. Ported Even running on DSP processors
applications distributed with (ADI Blackfin, TI DM64x)!
uClinux.
Full Linux 2.6 kernel features
stability, preemptible kernel,
drivers...
Introduction to uClinux
© Copyright 20042008, Free Electrons
Creative Commons AttributionShareAlike 2.5 license
http://freeelectrons.com Oct 16, 2008
12
uClinux weaknesses
Less momentum than Linux.
Much smaller community.
Much less online documentation
and resources available
Lack of updates on pages and deliverables on http://uclinux.org. Lots of
links and resources older than 2002.
Lots of projects still using Linux 2.4.
However uClinux development is still active: kernel and distribution.
uClinux releases available for each Linux 2.6.x version,
released just a few weeks after.
Introduction to uClinux
© Copyright 20042008, Free Electrons
Creative Commons AttributionShareAlike 2.5 license
http://freeelectrons.com Oct 16, 2008
13
uClibc
http://www.uclibc.org/ for CodePoet Consulting
Lightweight C library for small embedded systems, with most
features though.
Originally developed for uClinux. Now an independent project.
The whole Debian Woody (thousands of programs) was recently
ported to it... You can assume it satisfied most needs!
Example size (ARM): approx. 400K (vs. 1700 K for glibc)
uClibc vs. glibc size comparison (busybox example, static build):
311 K vs. 843 K!
Introduction to uClinux
© Copyright 20042008, Free Electrons
Creative Commons AttributionShareAlike 2.5 license
http://freeelectrons.com Oct 16, 2008
14
uClinux limitations
In a nutshell
Virtual memory = physical memory
Fixed memory for processes, can't fragment the memory:
more memory consumption
No memory protection
Very useful details (by David McCullough):
http://www.linuxjournal.com/article/7221
Introduction to uClinux
© Copyright 20042008, Free Electrons
Creative Commons AttributionShareAlike 2.5 license
http://freeelectrons.com Oct 16, 2008
15
Introduction to uClinux
uClinux implementation details
Introduction to uClinux
© Copyright 20042008, Free Electrons
Creative Commons AttributionShareAlike 2.5 license
http://freeelectrons.com Oct 16, 2008
16
No memory management
No virtual memory
Programs addresses need to be preprocessed (“relocated”) before
running to obtain unique address spaces.
No ondemand paging
Need to load whole program code in RAM
(instead of just loading pages when they are effectively accessed).
No memory protection
Any program can crash another program or the kernel. Corruption
can go unnoticed and surface later... difficult to track down!
Design your code carefully. Be careful of data from the outside!
No swapping
Not really an issue on the tiny embedded devices
Introduction to uClinux
© Copyright 20042008, Free Electrons
Creative Commons AttributionShareAlike 2.5 license
http://freeelectrons.com Oct 16, 2008
17
Better performance
uClinux can be significantly faster than Linux on the same processor!
MMU operation can represent a significant time overheard. Even when
an MMU is available, it is often turned off in systems with realtime
constraints.
Context switching can be much faster on uClinux. On ARM9, for
example, the VM based cache has to be flushed at each context switch.
No such need when all the processes share the same address space.
See an interesting benchmark from H.S. Choi and H.C. Yun:
http://opensrc.sec.samsung.com/document/uclinux04_sait.pdf
Introduction to uClinux
© Copyright 20042008, Free Electrons
Creative Commons AttributionShareAlike 2.5 license
http://freeelectrons.com Oct 16, 2008
18
Different executable format
Standard formats (such as ELF) rely on VM to create the
address space of a process.
flat format: condensed executable format storing only
executable code and data, plus the relocations needed to load
the executable into any location in memory.
uClinux specific toolchains are needed to create executables
in this format.
Introduction to uClinux
© Copyright 20042008, Free Electrons
Creative Commons AttributionShareAlike 2.5 license
http://freeelectrons.com Oct 16, 2008
19
Different mmap implementation
Unless the file is stored sequentially and contiguously, mmap
needs to allocate memory! Only romfs can guarantee this.
Another condition is that the storage can directly be accessed
in the CPU physical address space. Can work with flash or
ROM, but not with disk storage.
Only readonly mappings can be shared (no copyonwrite)
without allocating memory.
In a nutshell, the mmap system call is available, but
application developers should be aware that it has
performance issues in the cases mentioned above.
Introduction to uClinux
© Copyright 20042008, Free Electrons
Creative Commons AttributionShareAlike 2.5 license
http://freeelectrons.com Oct 16, 2008
20
Other kernel differences
No tmpfs
Cannot use the tmpfs filesystem relying on VM.
Need to use fixed size ramdisks.
Introduction to uClinux
© Copyright 20042008, Free Electrons
Creative Commons AttributionShareAlike 2.5 license
http://freeelectrons.com Oct 16, 2008
21
No dynamic stack (1)
CPU Physical
Linux memory
Virtual
With VM, can grow the stack of a memory
running process whenever needed.
original
stack
MMU
Whenever an application tries to write
stack
extra
beyond the top of its stack, the MMU
raises an exception. This causes some
new memory to be allocated and mapped
original
in at the top of the stack.
stack
stack
extra
Introduction to uClinux
© Copyright 20042008, Free Electrons
Creative Commons AttributionShareAlike 2.5 license
http://freeelectrons.com Oct 16, 2008
22
No dynamic stack (2)
uClinux
Stack size must be allocated at compile time: 4 KB by default.
No exception raised when a process writes beyond the top of its stack!
The consequences of this could surface much later.
If strange crashes happen, try to increase the stack size of programs:
Either recompile:
run export FLTFLAGS=s <stacksize> before recompiling.
Or run flthdr s <stacksize> <executable>
Introduction to uClinux
© Copyright 20042008, Free Electrons
Creative Commons AttributionShareAlike 2.5 license
http://freeelectrons.com Oct 16, 2008
23
Memory allocation
Standard Linux allocator: allocates blocks of 2n size.
If 65 KB are requested, 128KB will be reserved, and the
remaining 63KB won't be reusable in Linux.
uClinux 2.4 memory allocator: kmalloc2 (aka page_alloc2)
Allocates blocks of 2n size until 4KB
Uses 4KB pages for greater requests
Bigger blocks
Stores amounts not greater than 8KB
on the start of the memory, and larger
ones at the end. Reduces fragmentation.
Not available yet for Linux 2.6!
<8KB blocks
Introduction to uClinux
© Copyright 20042008, Free Electrons
Creative Commons AttributionShareAlike 2.5 license
http://freeelectrons.com Oct 16, 2008
24
No dynamic process size (1)
Linux
With VM, can increase or decrease
the process size with the brk() and sbrk() system calls.
malloc() implementation based on brk() and sbrk().
Introduction to uClinux
© Copyright 20042008, Free Electrons
Creative Commons AttributionShareAlike 2.5 license
http://freeelectrons.com Oct 16, 2008
25
No dynamic process size (1)
uCLinux
Memory has to be allocated from a global, shared memory pool
Different malloc() implementation (mallocsimple()), accessing
memory in this pool, managed by the kernel allocator.
Fragmentation: can be unable to allocate enough contiguous memory
Such situations can be detected through /proc/mem_map (kmalloc2)
See http://www.cyberguard.info/snapgear/tb20020530.html for details about
allocating memory in uClinux.
Can't allocate memory for this extra block,
while it's less than half the free memory!
Introduction to uClinux
© Copyright 20042008, Free Electrons
Creative Commons AttributionShareAlike 2.5 license
http://freeelectrons.com Oct 16, 2008
26
Tips for reducing memory fragmentation
Have your programs allocate smaller chunks of memory,
rather that allocating big ones at once.
If possible, stop and restart applications when memory is too
fragmented. Design your applications so that they can be shut
down and restarted.
Introduction to uClinux
© Copyright 20042008, Free Electrons
Creative Commons AttributionShareAlike 2.5 license
http://freeelectrons.com Oct 16, 2008
27
Tips for avoiding memory issues
Memory issues can be very difficult to track in uClinux.
Fortunately, they should only happen with your own
applications, not with widely tested tools from your uClinux
distribution.
Design with care and with a low memory budget in mind.
Idea: first develop and profile your application on Linux
(typically on your i386 desktop). There are several utilities to
detect memory issues: Valgrind, memcheck, ElectricFence.
See http://freeelectrons.com/articles/swdev for details.
Introduction to uClinux
© Copyright 20042008, Free Electrons
Creative Commons AttributionShareAlike 2.5 license
http://freeelectrons.com Oct 16, 2008
28
No fork()
Linux fork()
The child process is a clone of the parent, using the same virtual
memory space. New memory allocation happens for the child only
when it modifies a page (“copy on write”).
uClinux only implements vfork()
The parent execution is stopped and new memory is created before
the child process is executed. Consumes more memory!
Need to replace all fork() calls by vfork()
No significant impact on multitasking though.
Introduction to uClinux
© Copyright 20042008, Free Electrons
Creative Commons AttributionShareAlike 2.5 license
http://freeelectrons.com Oct 16, 2008
29
Execute In Place (XIP)
Allows to start an application without loading it in RAM.
Applies also to multiple instances of the same program.
Saves a lot of RAM!
Only supported by romfs
(need continuous, non compressed storage).
Only supported by the PositionIndependent Code (PIC) flavor of
the flat format (must be supported by the compiler).
Caution: XIP may be much slower if storage access time is high.
Introduction to uClinux
© Copyright 20042008, Free Electrons
Creative Commons AttributionShareAlike 2.5 license
http://freeelectrons.com Oct 16, 2008
30
Shared libraries
Pretty different under uClinux.
Different compiling options...
Making your own won't be familiar.
Must be compiled for XIP. Without XIP, shared libraries result in a
full copy of the library for each application using it, which is worse
than statically linking your applications.
See http://tree.celinuxforum.org/CelfPubWiki/uClinuxSharedLibrary
for implementation details.
Introduction to uClinux
© Copyright 20042008, Free Electrons
Creative Commons AttributionShareAlike 2.5 license
http://freeelectrons.com Oct 16, 2008
31
uClinux and Linux 2.6
Most of uClinux code now merged with mainstream Linux.
Architectures supports in mainstream Linux:
MMUless m68k and arm, Hitachi's H8/300 series, NEC
v850 processor, ADI Blackfin
Linux 2.6 can be built with no virtual memory system
in a few platforms (not supported on x86, for example).
Introduction to uClinux
© Copyright 20042008, Free Electrons
Creative Commons AttributionShareAlike 2.5 license
http://freeelectrons.com Oct 16, 2008
32
Introduction to uClinux
Using uClinux
Introduction to uClinux
© Copyright 20042008, Free Electrons
Creative Commons AttributionShareAlike 2.5 license
http://freeelectrons.com Oct 16, 2008
33
uClinux on m68knommu platforms
http://uclinux.org/ports/coldfire/
Kernel sources with the standard Linux kernel
(arch/m68knommu/)
Supported processors: pretty long list!
(see arch/m68knommu/Kconfig)
Binary filesystem images also available
on http://uclinux.org/ports/coldfire/binary.html
Introduction to uClinux
© Copyright 20042008, Free Electrons
Creative Commons AttributionShareAlike 2.5 license
http://freeelectrons.com Oct 16, 2008
34
uClinux on ARM MMUless platforms
Now supported in mainstream Linux
Used to be available as separate patches until version 2.6.20
(approximately)
No separate armnommu architecture
Supported processors:
Look for !MMU in arch/arm/mm/Kconfig
Introduction to uClinux
© Copyright 20042008, Free Electrons
Creative Commons AttributionShareAlike 2.5 license
http://freeelectrons.com Oct 16, 2008
35
uClinux on ADI Blackfin
http://blackfin.uclinux.org/
Supported in mainstream Linux since 2.6.22
A nice site and an active developer community
Ships binary bootloader, kernel and distribution images.
People from other uClinux ports can learn
from their resources and experience.
Actually, Blackfin has no VM, but some memory protection.
See a nice article on Blackfin specifics:
http://docs.blackfin.uclinux.org/doku.php?id=operating_systems#introduction_to_uclinux
Introduction to uClinux
© Copyright 20042008, Free Electrons
Creative Commons AttributionShareAlike 2.5 license
http://freeelectrons.com Oct 16, 2008
36
uClinux on other architectures
uClinux on the MicroBlaze FPGA processor
http://www.itee.uq.edu.au/~jwilliams/mblazeuclinux/
Nice and active community. Commercial support also available.
More resources available on http://uclinux.org/ports/
(Caution: lots of broken hyperlinks!)
Introduction to uClinux
© Copyright 20042008, Free Electrons
Creative Commons AttributionShareAlike 2.5 license
http://freeelectrons.com Oct 16, 2008
37
Disabling the MMU on CPUs with MMU
arm
Get the latest kernel patch from
http://opensrc.sec.samsung.com/
You can then disable the MMU.
sh
CONFIG_MMU can be disabled. Not tested.
Other platforms: i386, m68k, mips, ppc
Can't configure out MMU usage
with the Vanilla Kernel sources
Introduction to uClinux
© Copyright 20042008, Free Electrons
Creative Commons AttributionShareAlike 2.5 license
http://freeelectrons.com Oct 16, 2008
38
uClinux distributions
uClinux.org distribution
http://uclinux.org/pub/uClinux/dist/
Just distributes toolchains and sources
SnapGear (major contributor to uClinux) distribution
http://www.snapgear.org/snapgear/downloads.html
Just distributes toolchains and sources
A bit less complete, though very similar.
Best places to pick sources for use with uClinux,
even if you don't use the distributions.
Introduction to uClinux
© Copyright 20042008, Free Electrons
Creative Commons AttributionShareAlike 2.5 license
http://freeelectrons.com Oct 16, 2008
39
uClinux toolchains
Need to get uClinux specific toolchains
Available from 2 main locations.
uClinux.org: http://uclinux.org/pub/uClinux/
SnapGear: http://snapgear.org/snapgear/downloads.html
Regular toolchain (compiled to support PIC and XIP),
plus flat format utilities: elf2flt and flthdr.
Introduction to uClinux
© Copyright 20042008, Free Electrons
Creative Commons AttributionShareAlike 2.5 license
http://freeelectrons.com Oct 16, 2008
40
Compiling the uClinux distribution (1)
Add your uClinux crosscompiling toolchain to your PATH:
export PATH=/usr/local/armelf/bin:$PATH
In the toplevel uClinuxdist directory:
make xconfig
Choose your platform
(vendor and product)
Introduction to uClinux
© Copyright 20042008, Free Electrons
Creative Commons AttributionShareAlike 2.5 license
http://freeelectrons.com Oct 16, 2008
41
Compiling the uClinux distribution (2)
Choose your kernel
and C library version
Customize or not
kernel and tool settings
Compile:
make dep
make
This generates binary
images for your target
in the images/ directory.
Introduction to uClinux
© Copyright 20042008, Free Electrons
Creative Commons AttributionShareAlike 2.5 license
http://freeelectrons.com Oct 16, 2008
42
Toolchain installation example
Download the armelftools20030314.sh
file from the SnapGear site.
Make the file executable (self extracting archive):
chmod a+rx armelftools20030314.sh
Switch to the root user:
su
Install the toolchain in /usr/local/armelf:
./armelftools20030314.sh
Caution: toolchains are not relocatable!
They cannot be moved to another location
(unless you create links in the default location)
Introduction to uClinux
© Copyright 20042008, Free Electrons
Creative Commons AttributionShareAlike 2.5 license
http://freeelectrons.com Oct 16, 2008
43
Summary
Worthy to use uClinux (rather than a proprietary RTOS)
on processors without an MMU. Surprisingly, with uClinux,
there are only minor differences with what you can do with a full
Linux kernel.
In some cases, worthy to use uClinux rather than Linux on
processors with an MMU, for performance reasons.
Though a lot of work has already been done and most
applications have already been ported, some uClinux experience
or learning is definitely needed when you start a new project.
Introduction to uClinux
© Copyright 20042008, Free Electrons
Creative Commons AttributionShareAlike 2.5 license
http://freeelectrons.com Oct 16, 2008
44
Resources
uClinux, State Of The Nation, by Greg Ungerer (Apr. 2007)
http://www.linuxdevices.com/files/article078/uclinuxsotn.pdf
uClinux development mailing list
https://mailman.uclinux.org/mailman/listinfo/uclinuxdev
Archives: http://mailman.uclinux.org/pipermail/uclinuxdev/
http://ucdot.org/
A wealth of resources, FAQs, forums for uClinux developers!
Don't miss the very complete FAQ:
http://www.ucdot.org/faq.pl
Introduction to uClinux
© Copyright 20042008, Free Electrons
Creative Commons AttributionShareAlike 2.5 license
http://freeelectrons.com Oct 16, 2008
45
eCos: an alternative to uClinux
eCos: http://ecos.sourceware.org/
Very lightweight realtime embedded system,
originally contributed by Red Hat / Cygnus solutions.
Supported by GNU development tools.
POSIX compliant API (can run standard Unix/Linux tools).
Highly configurable to remove unneeded features.
Highly portable thanks to a Hardware Abstraction Layer.
Also supports 16 bit processors (32 and 64 bit too)
(16 bit CPUs not supported by uClinux and Linux).
Introduction to uClinux
© Copyright 20042008, Free Electrons
Creative Commons AttributionShareAlike 2.5 license
http://freeelectrons.com Oct 16, 2008
46
Related documents
All the technical presentations and training materials created and used by Free Electrons,
available under a free documentation license (more than 1500 pages!).
http://freeelectrons.com/training Linux USB drivers
Introduction to Unix and GNU/Linux Realtime in embedded Linux systems
Embedded Linux kernel and driver development Introduction to uClinux
Free Software tools for embedded Linux systems Linux on TI OMAP processors
Audio in embedded Linux systems Free Software development tools
Multimedia in embedded Linux systems Java in embedded Linux systems
Introduction to GNU/Linux and Free Software
http://freeelectrons.com/articles Linux and ecology
Advantages of Free Software in embedded systems What's new in Linux 2.6?
Embedded Linux optimizations How to port Linux on a new PDA
Embedded Linux from Scratch... in 40 min!
Introduction to uClinux
© Copyright 20042008, Free Electrons
Creative Commons AttributionShareAlike 2.5 license
http://freeelectrons.com Oct 16, 2008
47
How to help
If you support this work, you can help ...
By sending corrections, suggestions, contributions and translations
By asking your organization to order training sessions performed by
the author of these documents (see http://freeelectrons.com/training)
By speaking about it to your friends, colleagues
and local Free Software community.
By adding links to our online materials on your website,
to increase their visibility in search engine results.
Introduction to uClinux
© Copyright 20042008, Free Electrons
Creative Commons AttributionShareAlike 2.5 license
http://freeelectrons.com Oct 16, 2008
48
Thanks
To the uClinux community for their work and
documentation, in particular to David McCullough for his
very useful articles.
To the OpenOffice.org project, for their presentation and
word processor tools which satisfied all my needs.
To the members of the whole Free Software and Open
Source community, for sharing the best of themselves: their
work, their knowledge, their friendship.
Introduction to uClinux
© Copyright 20042008, Free Electrons
Creative Commons AttributionShareAlike 2.5 license
http://freeelectrons.com Oct 16, 2008
49
Embedded Linux Training Free Electrons services
Unix and GNU/Linux basics
Linux kernel and drivers development
Realtime Linux
uClinux Custom Development
Development and profiling tools System integration
Lightweight tools for embedded systems Embedded Linux demos and prototypes
Root filesystem creation System optimization
Audio and multimedia Linux kernel drivers
System optimization Application and interface development
Consulting Technical Support
Help in decision making Development tool and application support
System architecture Issue investigation and solution followup with
Identification of suitable technologies mainstream developers
Managing licensing requirements Help getting started
System design and performance review
http://freeelectrons.com