Embedded Linux system development

Embedded Linux  application  development


Michael Opdenacker Thomas Petazzoni Free Electrons





© Copyright 2004­2009, Free Electrons. Creative Commons BY­SA 3.0 license Latest update: Sep 28, 2010,  Document sources, updates and translations: http://free­electrons.com/docs/appdev Corrections, suggestions, contributions and translations are welcome!

Free Electrons. Kernel, drivers and embedded Linux development, consulting, training and support. http//free­electrons.com

Application development Developing applications on embedded Linux Building your applications Source management Integrated development environments (IDEs) Version control systems Debugging and analysis tools Debuggers Static code checkers Memory checkers System analysis Development environments Developing on Windows

Free Electrons. Kernel, drivers and embedded Linux development, consulting, training and support. http//free­electrons.com

Application development

Developing applications on embedded Linux

Free Electrons. Kernel, drivers and embedded Linux development, consulting, training and support. http//free­electrons.com

Application development
An embedded Linux system is just a normal Linux system, with  usually a smaller selection of components In terms of application development, developing on embedded  Linux is exactly the same as developing on a desktop Linux  system All existing skills can be re­used, without any particular  adaptation All existing libraries, either third­party or in­house, can be  integrated into the embedded Linux system
Taking into account, of course, the limitation of the embedded  systems in terms of performance, storage and memory

Free Electrons. Kernel, drivers and embedded Linux development, consulting, training and support. http//free­electrons.com

Programming language
The default programming language for system­level application in  Linux is usually C
The C library is already present on your system, nothing to add

C++ can be used for larger applications
The C++ library must be added to the system Some libraries, including Qt, are developed in C++ so they need the  C++ library on the system anyway

Scripting languages can also be useful for quick application  development, web applications or scripts
But they require an interpreter on the embedded system and have  usually higher memory consumption and slightly lower  performances

Languages: Python, Perl, Lua, Ada, Fortran, etc.
Free Electrons. Kernel, drivers and embedded Linux development, consulting, training and support. http//free­electrons.com

 or in any « Linux system  programming » book However. in the order of a few megabytes 6 Free Electrons. their core is  separate from the graphical part But of course. consulting. drivers and embedded Linux development. http//free­electrons. such as Qt or the Gtk  stack. Kernel.C library or higher­level libraries ? For many applications. might be a good idea These frameworks are not only graphical libraries. training and support.com . the API carries a lot of history and is not necessarily easy  to grasp for new comers Therefore. inter­ process communication Thoroughly described in the glibc manual. threads and synchronization. using a higher level framework. these libraries have some memory and storage  footprint. the C library already provides a relatively  large set of features file and device I/O. networking.

com . or if you want to be able to  run your application on a desktop Linux PC and on the target  device.Building your applications For simple applications that do not need to be really portable or  provide compile­time configuration options. consulting. simpler. using a build system is recommended Look at the autotools (ancient. since it comes with its own build  system for applications. Kernel. drivers and embedded Linux development. http//free­electrons. complicated but very widely used) or  CMake (modern. called qmake 7 Free Electrons. smaller but growing user base) The QT library is a special case. a simple Makefile will  be sufficient For more complicated applications. training and support.

o all: foobar foobar: $(OBJS) $(CC) ­o $@ $^ clean: $(RM) ­f foobar $(OBJS) 8 Free Electrons.o bar. training and support. consulting. contains two  source files and generates a single binary CROSS_COMPILE?=arm­linux­ CC=$(CROSS_COMPILE)gcc OBJS=foo. drivers and embedded Linux development.Simple Makefile (1) Case of an application that only uses the C library.com . http//free­electrons. Kernel.

 http//free­electrons.o bar. training and support.Simple Makefile (2) Case of an application that uses the Glib and the GPS libraries CROSS_COMPILE?=arm­linux­ LIBS=libgps glib­2. consulting. drivers and embedded Linux development.0 OBJS=foo.o CC=$(CROSS_COMPILE)gcc CFLAGS=$(shell pkg­config ­­cflags $(LIBS)) LDFLAGS=$(shell pkg­config ­­libs $(LIBS)) all: foobar foobar: $(OBJS) $(CC) ­o $@ $^ $(LDFLAGS) clean: $(RM) ­f foobar $(OBJS) 9 Free Electrons. Kernel.com .

com . training and support. Kernel. http//free­electrons.Application development Source management Integrated Development Environments (IDE) 10 Free Electrons. consulting. drivers and embedded Linux development.

 drivers and embedded Linux development.Source browsers LXR: Linux Cross Reference Allows to browse code through a web browser. KScope A graphical interface to cscope. cscope Console mode source browsing tool. http//free­electrons.com . training and support. Kernel. Integrates with editors like vi and emacs. 11 Free Electrons. consulting. See our Linux kernel and driver development training materials (http://free­electrons.com/docs/kernel) for more details.

 Shell Supports many kinds of projects: KDE. class  browser.  compiler interface. debugger interface. Java.org A full featured IDE! License: GPL Supports many languages: Ada. Database. C++..KDevelop http://kdevelop. Ruby.com . C.wikipedia. Perl. consulting. syntax highlighting.. Kernel. file manager. code completion. Nice overview: http://en. embedded (Opie). drivers and embedded Linux development.. Python. training and support.org/wiki/Kdevelop 12 Free Electrons. kernel drivers. Many features: editor. but also GTK. Gnome. http//free­electrons.. PHP.

com . http//free­electrons. drivers and embedded Linux development. Kernel.KDevelop screenshot Ruby debugger 13 Free Electrons. consulting. training and support.

org/ Gnome's IDE Less features than KDevelop so far. syntax highlighting. consulting.  wxWindows.anjuta. http//free­electrons. Features: integrated editor. Xlib. GTK. Gnome. drivers and embedded Linux development. License: GPL Supported languages: C and C++ Supported project types: command line. code  completion.Anjuta DevStudio http://www.com . tag browser. 14 Free Electrons. compiler and debugger interface. training and support. Kernel.

 Kernel.Anjuta screenshot Anjuta's class inheritance graph and terminal 15 Free Electrons. training and support. drivers and embedded Linux development. http//free­electrons.com . consulting.

). Zend. 16 Free Electrons. Intel. plugin based software development kit. Windows Extremely popular: created a lot of attraction.org/ An extensible. Supported by the Eclipse foundation. typically used for creating IDEs..com .  Borland. Nokia. drivers and embedded Linux development. training and support. Free Software license (Eclipse Public License). http//free­electrons. Supported platforms: GNU/Linux. Incompatible with the GPL. WindRiver.eclipse. Computer Associates. Unix. Kernel.Eclipse (1) http://www. a non­profit  consortium  of major software industry vendors (IBM. consulting..

com .) The platform is used by major embedded Linux software vendors  for their (proprietary) system development kits: MontaVista DevRocket. Windriver  Workbench. It would require an entire training session! 17 Free Electrons. consulting. TimeSys TimeStorm.Eclipse (2) Eclipse is actually a platform composed of many projects: http://www. training and support. Kernel. Sysgo ELinOS. http//free­electrons.org/projects/ Some projects are dedicated at integrating into Eclipse features  useful for embedded developers (cross­compilation. Eclipse is a huge project. drivers and embedded Linux development.eclipse. remote debugging. etc. remote  development.

 consulting. Kernel.com . drivers and embedded Linux development. http//free­electrons. training and support.Application development Source management Version control systems 18 Free Electrons.

 or choose  to stick with older versions of some components. Allow developers to have their own development branch  (branching) Supposed to help developers resolving conflicts with different  branches (merging) 19 Free Electrons. Allow to keep track of changes. http//free­electrons. drivers and embedded Linux development. Each  developer can see the latest changes from the others. Kernel. consulting. training and support.Version control systems Real projects can't do without them Allow multiple developers to contribute on the same project. and revert them if needed.com .

com .Traditional version control systems Rely on a central repository Only mentioning the most popular ones CVS ­ Concurrent Versions System Still quite popular http://en.wikipedia. drivers and embedded Linux development.  removing many of its  limitations. The user interface is very similar.org/wiki/Subversion_(software) 20 Free Electrons. training and support. Kernel. http://en.org/wiki/Concurrent_Versions_System Subversion Created as a replacement of CVS.wikipedia. http//free­electrons. consulting.

com .Distributed source control systems (1) No longer have a central repository More adapted to the way the Free Software community develops  software and organizes People get working copies from other people's working copies. training and support. drivers and embedded Linux development. http//free­electrons. Make it easier for new developers to join. 21 Free Electrons. Branching and  merging is made easier.  and exchange changes between themselves. Kernel. making their own  experiments without having to apply for  repository access. consulting.

Outstanding performance. Kernel.org/wiki/Git_(software) Mercurial Another system. Used by big projects too.org/wiki/Version_control_systems#Distributed_revision_control 22 Free Electrons.Distributed source control systems (2) Only mentioning the most popular Git Initially designed and developed by Linus Torvalds for Linux kernel development.com .org/wiki/Git_(software) http://en. drivers and embedded Linux development. and used by more and more projects. in particular in big projects. http://en. http//free­electrons. http://en.wikipedia. consulting.wikipedia. training and support.wikipedia. Extremely popular in the community. created with the same goals as Git.

 drivers and embedded Linux development. consulting. training and support. Kernel.com .Software development tools Debugging and analysis tools Debuggers 23 Free Electrons. http//free­electrons.

Can be used to control the execution of a program. Graphical front­ends available. Fortran. drivers and embedded Linux development. C++. See also http://en. training and support. dumped into a core file).org/wiki/Gdb 24 Free Electrons.com .gnu. Objective­C.  Ada. Console interface (useful for remote debugging).GDB The GNU Project Debugger http://www.. consulting. Kernel. set  breakpoints or change internal variables.org/software/gdb/ The debugger on GNU/Linux.wikipedia. You can also use it to  see what a program was doing when it crashed (by loading its  memory image. Pascal. http//free­electrons. Supported languages: C.. available for most embedded architectures.

com .c. Kernel. or a more complicated reference. stepping over function calls step continue to the next line.fd prints the variable var. training and support.GDB crash course A few useful GDB commands break foobar puts a breakpoint at the entry of function foobar() break foobar. entering into subfunctions 25 Free Electrons.c:42 puts a breakpoint in foobar. http//free­electrons. drivers and embedded Linux development. consulting. GDB can  also nicely display structures with all their members continue continue the execution next continue to the next line. line 42 print var or print task­>files[0].

 http//free­electrons. for the K Display Environment.org/software/ddd/ The most popular graphical front­end.GDB graphical front­ends DDD ­ Data Display Debugger http://www. drivers and embedded Linux development.kdbg. GDB/Insight http://sources. with advanced data plotting capabilities.com/insight/ From the GDB maintainers (Red Hat).gnu. 26 Free Electrons. consulting.com .redhat.org/ Another front­end. training and support. Kernel. KDbg http://www.

Introduction to software development tools Debugging and analysis tools Remote debugging 27 Free Electrons. http//free­electrons.com . Kernel. training and support. drivers and embedded Linux development. consulting.

 in an embedded context. However. training and support. gdb has direct access to the binary and libraries compiled with  debugging symbols. the target platform environment is  often too limited to allow direct debugging with gdb (2. Remote debugging is preferred gdb is used on the development workstation. Kernel. consulting. http//free­electrons.4 MB on x86). gdb gdbserver 28 Free Electrons.Remote debugging In a non­embedded environment. debugging takes place using gdb or  one of its front­end. offering all its features. gdbserver is used on the target system (only 100 KB on arm).com . drivers and embedded Linux development.

 http//free­electrons. drivers and embedded Linux development.com . training and support. Kernel. consulting.Remote debugging: architecture Host Target gdbserver Serial or  Ethernet  connection Binaries and libraries with debugging symbols not stripped Running program with binaries and libraries that can be stripped ARCH­linux­gdb 29 Free Electrons.

 attach gdbserver to an already running program: gdbserver ­­attach localhost:<port> <pid> Then. gdbserver localhost:<port> <executable> <args> gdbserver /dev/ttyS0 <executable> <args> Otherwise. run a program through gdbserver.Remote debugging: usage On the target. and use the following gdb commands:  To connect to the target: gdb > target remote <target>:<port> gdb > target remote /dev/ttyS0 To tell gdb where shared libraries are: gdb > set sysroot <library­path> (networking) (serial link) (without lib/) 30 Free Electrons. Kernel. http//free­electrons. run ARCH­linux­gdb program. on the host.com . Program execution will not start immediately. drivers and embedded Linux development. consulting. training and support.

Post mortem analysis When an application crashes due to a segmentation fault and the  application was not under control of a debugger. Kernel. consulting. and  run ARCH­linux­gdb ­c core­file application­binary 31 Free Electrons. http//free­electrons. transfer the core file from the target to the host. drivers and embedded Linux development. and  gdb can use this core file to let us analyze the state of the  crashed application On the target Use ulimit ­c unlimited to enable the generation of a core  file when a crash occurs On the host After the crash. Linux can generate a core file that contains the  image of the application memory at the moment of the crash.com . we get no  informations about the crash Fortunately. training and support.

com . drivers and embedded Linux development. Kernel. http//free­electrons.Software development tools Debugging and analysis tools Static code checkers and memory checkers 32 Free Electrons. training and support. consulting.

 drivers and embedded Linux development. Very complete manual and documentation Doesn't support C++ 33 Free Electrons. consulting. Kernel. The successor of LClint. from the University of Virginia GPL tool for statically checking C programs for security  vulnerabilities and coding mistakes Today's lint program for GNU/Linux. http//free­electrons.Splint http://splint.org/.com . training and support.

Supports most useful CPU architectures.com . drivers and embedded Linux development. Kernel. training and support. 34 Free Electrons. consulting.dnsalias.memcheck http://hald.net/projects/memcheck/ GNU GPL tool for dynamic memory checking Works by replacing glibc's memory management functions  by its own. http//free­electrons.

 Kernel. http//free­electrons. and your  program stops.com . Works on any platform supported by Linux.net/ Fork and replacement for Electric Fence Stops your program on the exact instruction that overruns or  underruns a malloc() memory buffer. whatever the  CPU (provided virtual memory support is available). 35 Free Electrons. training and support. drivers and embedded Linux development.sourceforge. GDB will then display the source­code line that causes the  bug. Works by using the virtual­memory hardware to create a  red­zone at the border of each buffer ­ touch that.DUMA Detect Unintended Memory Access http://duma. consulting.

Valgrind (1) http://valgrind. Supported platforms: Linux on x86. Can detect many memory management and threading bugs. The most popular tool for this usage.org/ GNU GPL Software suite for debugging and profiling programs. Even used by projects with hundreds of programmers. Profiler: provides information helpful to speed up your program  and reduce its memory usage. ppc32. training and support. http//free­electrons. drivers and embedded Linux development. x86_64. Kernel. ppc64 Others: compile your program to these platforms to use Valgrind.com . 36 Free Electrons. consulting.

Example usage valgrind ­­leak­check=yes ls ­la Works by adding its own instrumentation to your code and  then running in on its own virtual x86 (or ppc) core. http//free­electrons. Kernel.org/info/ and http://valgrind.com .Valgrind (2) Can be used to run any program. consulting. training and support. without the need to  recompile it. Significantly slows down execution. drivers and embedded Linux development. but still fine for testing! More details on http://valgrind.org/docs/manual/coregrind_core.html#howworks 37 Free Electrons.

 Kernel. drivers and embedded Linux development. in which memory errors are very difficult to find. http//free­electrons. debug your application with Valgrind. Once bugs are found and fixed.Valgrind on other platforms To check programs on non x86 or non ppc CPU architectures Write portable code (always useful).com . you can get back to your original platform. This is particularly useful with uClinux. and compile it for x86 or ppc Then. consulting. training and support. 38 Free Electrons.

com . Kernel. consulting. training and support. drivers and embedded Linux development. http//free­electrons.Software development tools Debugging and analysis tools System analysis 39 Free Electrons.

net/projects/strace/ Available on all GNU/Linux systems Can be built by your cross­compiling toolchain generator. drivers and embedded Linux development. Kernel. (starting a new process) (tracing an existing process) 40 Free Electrons. allocating memory.strace System call tracer http://sourceforge. consulting.. Allows to see what any of your processes is doing: accessing files.. http//free­electrons. Often sufficient to find simple bugs. training and support.com . Usage: strace <command>  strace ­p<pid>  See man strace for details.

 O_RDONLY) = 3 read(3. PROT_NONE)   = 0 mmap2(0xb7f63000. {st_mode=S_IFREG|0644. {st_mode=S_IFREG|0755.so. MAP_PRIVATE|MAP_FIXED| MAP_ANONYMOUS. st_size=111585.  "\177ELF\1\1\1\0\0\0\0\0\0\0\0\0\3\0\3\0\1\0\0\0\320h\1\0004\0\0\0\344".so. ["cat".}) = 0 mmap2(NULL. R_OK)      = ­1 ENOENT (No such file or directory) open("/etc/ld.}) = 0 mmap2(NULL. ­1. training and support.strace example output > strace cat Makefile  execve("/bin/cat". drivers and embedded Linux development. 111585. PROT_READ|PROT_EXEC.nohwcap". 4096. 3. "Makefile"]..6". 0) =  0xb7e06000 mprotect(0xb7f62000.. 0) = 0xb7f69000 close(3)                                = 0 access("/etc/ld.nohwcap". consulting.. st_size=1442180. PROT_READ|PROT_WRITE.. http//free­electrons. PROT_READ. PROT_READ|PROT_WRITE. 9840.. 12288. 3. PROT_READ|PROT_WRITE. .. MAP_PRIVATE|MAP_FIXED| MAP_DENYWRITE. . 3. 8192. Kernel. MAP_PRIVATE. O_RDONLY)      = 3 fstat64(3.cache". 0x15c) = 0xb7f63000 mmap2(0xb7f66000. 1451632.so..so. 512)  = 512 fstat64(3.preload". MAP_PRIVATE|MAP_DENYWRITE. F_OK)      = ­1 ENOENT (No such file or directory) open("/lib/tls/i686/cmov/libc. MAP_PRIVATE|MAP_ANONYMOUS. F_OK)      = ­1 ENOENT (No such file or directory) mmap2(NULL. 0) =  0xb7f85000 access("/etc/ld.com . ­1. [/* 38 vars */]) = 0 brk(0)                                  = 0x98b4000 access("/etc/ld. 0) = 0xb7f66000 close(3)                                = 0 41 Free Electrons.so.

Manual page: http://linux.com .die. works even if you don't have the sources Allows to filter library calls with regular expressions.wikipedia.ltrace A tool to trace library calls used by a program and all the signals it receives Very useful complement to strace. drivers and embedded Linux development. Kernel.net/man/1/ltrace See http://en. training and support.org/wiki/Ltrace for details 42 Free Electrons. http//free­electrons. consulting. Of course. or just by a list of function names. which shows only system calls.

 http//free­electrons.. 0) = 1 sprintf("const 0". "const %d". "const 0")         = ­1 strcmp("$shell_cmd_status". 0)                = 7 strcmp("startScan". "const 0")                 = ­1 strcmp("$string_dialog_button". "const 0")                   = 1 strcmp("ScanDistance". 0x8248640.com . 43 Free Electrons. "const 0")                = ­1 strcmp("const 200". training and support.. "const 0")                = ­1 strcmp("$search_end".ltrace example output ltrace nedit index. drivers and embedded Linux development. "const 0")                   = 1 strcmp("$list_dialog_button". 0xbfaadfe8. "const 0")              = ­1 strcmp("$calltip_ID". "const 0")                 = ­1 . 0x8132618.html sscanf(0x8274af1. consulting. "const 0")           = ­1 strcmp("$read_status". Kernel. "const 0")       = ­1 strcmp("$rangeset_list".

000000           0         2         2 access   0. training and support.000000           0         3           brk   0.000000           0        18           fstat64 ­­­­­­ ­­­­­­­­­­­ ­­­­­­­­­­­ ­­­­­­­­­ ­­­­­­­­­ ­­­­­­­­­­­­­­­­ 100.000000           0        50        46 stat64   0.00    0.ltrace summary Example summary at the end of the ltrace output (­c option) Process 17019 detached % time     seconds  usecs/call     calls    errors syscall ­­­­­­ ­­­­­­­­­­­ ­­­­­­­­­­­ ­­­­­­­­­ ­­­­­­­­­ ­­­­­­­­­­­­­­­­ 100.00    0.00    0.000000           0         1           execve   0.00    0.00    0.00    0. http//free­electrons.com .00    0.000000           0         1           munmap   0.00    0.000000           0         1           mprotect   0.00    0. consulting. Kernel.000000           0         1           uname   0.000000           0        48           read   0.00    0.00    0.000000           0        44           write   0.000050          50         1           set_thread_area   0.00    0.00    0.00    0. drivers and embedded Linux development.000000           0        19           close   0.00    0.000050                   288       111 total 44 Free Electrons.000000           0        19           mmap2   0.000000           0        80        63 open   0.

sourceforge. http//free­electrons. drivers and embedded Linux development.Oprofile http://oprofile. oprofile­gui 45 Free Electrons. Requires a kernel patch to access all features. but is already available in a standard kernel. training and support. Kernel. Requires more investigation to see how it works. Works without having the sources. Ubuntu/Debian packages: oprofile.com . consulting.net A system­wide profiling tool Can collect statistics like the top users of the CPU.

 drivers and embedded Linux development. Kernel. Perl  and PHP.sourceforge. consulting.net/ An amazing visualizer for Cachegrind / Callgrind data. 46 Free Electrons. KCachegrind: http://kcachegrind. and from profiling output from Python.Callgrind / KCachegrind Cachegrind / Callgrind: part of the Valgrind tool suite Collects function call statistics and call graphs. training and support. KCachegrind can also import data from other profilers (such as OProfile). Useful to know in which functions most time is spent.com . http//free­electrons.

com . consulting.KCachegrind screenshot 47 Free Electrons. training and support. Kernel. http//free­electrons. drivers and embedded Linux development.

 Kernel. http//free­electrons. Debug a simple application  running on the target using  remote debugging 48 Free Electrons. ltrace and gdbserver. training and support.Practical lab – Remote debugging Time to start Lab! Set up remote debugging tools  on the target: strace.com . drivers and embedded Linux development. consulting.

 drivers and embedded Linux development. Kernel.Software development tools Developing on Windows 49 Free Electrons.com . training and support. consulting. http//free­electrons.

 Kernel. Much fewer issues you are the only one to  face. However. some developers have no choice: Windows is the only desktop OS allowed in their company. You get familiar with the system.Developing on Windows!? Using a GNU/Linux workstation is the easiest way to create  software for GNU/Linux or embedded Linux You use the same tools and environment as all community  developers do. training and support. Essential for understanding issues. drivers and embedded Linux development.com . http//free­electrons. consulting. 50 Free Electrons.

For embedded Linux system developers: makes it possible to use GNU toolchains (compiled for Windows)  required to build Linux binaries (kernel. training and support. http//free­electrons. GTK. libraries or applications). 51 Free Electrons.. Very easy to install.com/ Linux (POSIX)­like environment for Windows 2 components: Linux API emulation layer: cygwin1.Cygwin http://cygwin. Kernel.dll A collection of tools originally found in GNU/Linux Allows to compile and run many GNU/Linux programs on Windows:  shells.. Can choose which tools to download and install. consulting.com . http servers. X Window. drivers and embedded Linux development. compiler.

 drivers and embedded Linux development. Kernel.com . consulting. training and support. http//free­electrons.Cygwin screenshot 52 Free Electrons.

Cygwin limitations Cygwin is not a complete substitute for a real GNU/Linux system. Kernel. Don't expect them to test that their  tools build on Windows with Cygwin. The number of Cygwin users is quite small. Almost all developers work on GNU/Linux or on another Unix  platform (typically BSD). the best solution is to run Linux inside Windows! 53 Free Electrons.com . consulting. drivers and embedded Linux development. training and support. So. http//free­electrons. You may be the first to face or report building issues on this  platform for a given compiler or tool version.

VMware Player is now available free of charge. 54 Free Electrons. Kernel. training and support. The most popular solution in the corporate world.wikipedia.com . almost at the host speed. http//free­electrons. drivers and embedded Linux development. consulting.VMware http://en.org/wiki/VMware License: proprietary Can run a GNU/Linux PC from Windows. Many Free Software system images available for download.

 Kernel. drivers and embedded Linux development. Open Source Edition (OSE): GPL license. See http://en.VirtualBox http://virtualbox. consulting. training and support.org from Sun Microsystems PC emulation solution available on both Windows and GNU/Linux 2 licenses: Proprietary: free of cost for personal use and evaluation.com . Most features (except in particular USB support). Performance similar to that of VMware.org/wiki/VirtualBox 55 Free Electrons. Binaries available for Windows.wikipedia. No binaries released for Windows so far (but possible). http//free­electrons. Based on QEMU's core engine. Full features.

 consulting. Kernel.com . drivers and embedded Linux development.com/docs Linux kernel Device drivers Architecture specifics Embedded Linux system development Free Electrons. training and support. http//free­electrons.Related documents All our technical presentations on http://free­electrons.

. drivers and embedded Linux development. By adding links on your website to our on­line materials. consulting.. By sharing this document with your friends. training and support. consulting  and training services performed by the authors of these  documents (see http://free­electrons. to increase their visibility in search engine results.How to help You can help us to improve and maintain this document. contributions and  translations By asking your organization to order development. By sending corrections. http//free­electrons. Kernel. Free Electrons. suggestions.com/).com . colleagues and with the local Free Software community.

Linux kernel Linux device drivers Board support code Mainstreaming kernel code Kernel debugging Embedded Linux Training All materials released with a free license! Unix and GNU/Linux basics Linux kernel and drivers development Real­time Linux. uClinux Development and profiling tools Lightweight tools for embedded systems Root filesystem creation Audio and multimedia System optimization Free Electrons Our services Custom Development System integration Embedded Linux demos and prototypes System optimization Application and interface development Consulting and technical support Help in decision making System architecture System design and performance review Development tool and application support Investigating issues and fixing tool bugs .

Sign up to vote on this title
UsefulNot useful