SlideShare a Scribd company logo
1 of 526
Download to read offline
Embedded Linux system development 
Embedded Linux system 
development 
Free Electrons 
©Copyright 2004-2014, Free Electrons. 
Creative Commons BY-SA 3.0 license. 
Latest update: October 20, 2014. 
Document updates and sources: 
http://free-electrons.com/doc/training/embedded-linux 
Corrections, suggestions, contributions and translations are welcome! 
Embedded Linux 
Developers 
Free Electrons 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 1/526
Rights to copy 
© Copyright 2004-2014, Free Electrons 
License: Creative Commons Attribution - Share Alike 3.0 
http://creativecommons.org/licenses/by-sa/3.0/legalcode 
You are free: 
I to copy, distribute, display, and perform the work 
I to make derivative works 
I to make commercial use of the work 
Under the following conditions: 
I Attribution. You must give the original author credit. 
I Share Alike. If you alter, transform, or build upon this work, you may distribute 
the resulting work only under a license identical to this one. 
I For any reuse or distribution, you must make clear to others the license terms of 
this work. 
I 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 aected by the above. 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 2/526
Electronic copies of these documents 
I Electronic copies of your particular version of the materials are 
available on: 
http://free-electrons.com/doc/training/embedded-linux 
I Open the corresponding documents and use them throughout 
the course to look for explanations given earlier by the 
instructor. 
I You will need these electronic versions because we neither 
print any index nor any table of contents (quite high 
environmental cost for little added value) 
I For future reference, see the
rst slide to see where document 
updates will be available. 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 3/526
Hyperlinks in the document 
There are many hyperlinks in the document 
I Regular hyperlinks: 
http://kernel.org/ 
I Kernel documentation links: 
Documentation/kmemcheck.txt 
I Links to kernel source
les and directories: 
drivers/input 
include/linux/fb.h 
I Links to the declarations, de
nitions and instances of kernel 
symbols (functions, types, data, structures): 
platform_get_irq() 
GFP_KERNEL 
struct file_operations 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 4/526
Free Electrons at a glance 
I Engineering company created in 2004 
(not a training company!) 
I Locations: Orange, Toulouse, Lyon (France) 
I Serving customers all around the world 
See http://free-electrons.com/company/customers/ 
I Head count: 9 
Only Free Software enthusiasts! 
I Focus: Embedded Linux, Linux kernel, Android Free Software 
/ Open Source for embedded and real-time systems. 
I Activities: development, training, consulting, technical 
support. 
I Added value: get the best of the user and development 
community and the resources it oers. 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 5/526
Free Electrons on-line resources 
I All our training materials: 
http://free-electrons.com/docs/ 
I Technical blog: 
http://free-electrons.com/blog/ 
I Quarterly newsletter: 
http://lists.free-electrons. 
com/mailman/listinfo/newsletter 
I News and discussions (Google +): 
https://plus.google.com/+FreeElectronsDevelopers 
I News and discussions (LinkedIn): 
http://linkedin.com/groups/Free-Electrons-4501089 
I Quick news (Twitter): 
http://twitter.com/free_electrons 
I Linux Cross Reference - browse Linux kernel sources on-line: 
http://lxr.free-electrons.com 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 6/526
Mailing lists for session participants 
If you participated to a course taught by Free Electrons, you can 
subscribe to our mailing lists dedicated to our training customers: 
I To ask questions about the topics covered by the courses, and 
to get a
rst level of technical support for issues that your are 
facing in real life or with your own hardware. 
I To share your experience with other people having taken the 
same course and done the same practical labs. 
I To share further comments and suggestions about course 
contents. 
I To get news about important updates to the course materials. 
See http://free-electrons.com/training/mailing-lists 
A simple way to register:
ll the form on http://j.mp/1r1HhkZ 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 7/526
Generic course information 
Generic course 
information 
Free Electrons 
©Copyright 2004-2014, Free Electrons. 
Creative Commons BY-SA 3.0 license. 
Corrections, suggestions, contributions and translations are welcome! 
Embedded Linux 
Developers 
Free Electrons 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 8/526
Hardware used in this training session 
Using Atmel SAMA5D3 Xplained boards in all practical labs 
I SAMA5D36 (Cortex A5) CPU from Atmel 
I USB powered! 
I 256 MB DDR2 RAM, 256 MB NAND 

ash 
I 2 Ethernet ports (Gigabit + 100 Mbit) 
I 2 USB 2.0 host, 1 USB device 
I 1 MMC/SD slot 
I 3.3 V serial port (like Beaglebone Black) 
I Misc: Arduino R3-compatible header, 
JTAG, buttons, LEDs 
I Currently sold at 69 EUR by Mouser 
(V.A.T. not included) 
Board and CPU documentation, design
les, software: 
http://www.atmel.com/sama5d3xplained 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 9/526
Participate! 
During the lectures... 
I Don't hesitate to ask questions. Other people in the audience 
may have similar questions too. 
I This helps the trainer to detect any explanation that wasn't 
clear or detailed enough. 
I Don't hesitate to share your experience, for example to 
compare Linux / Android with other operating systems used 
in your company. 
I Your point of view is most valuable, because it can be similar 
to your colleagues' and dierent from the trainer's. 
I Your participation can make our session more interactive and 
make the topics easier to learn. 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 10/526
Practical lab guidelines 
During practical labs... 
I We cannot support more than 8 workstations at once (each 
with its board and equipment). Having more would make the 
whole class progress slower, compromising the coverage of the 
whole training agenda (exception for public sessions: up to 10 
people). 
I So, if you are more than 8 participants, please form up to 8 
working groups. 
I Open the electronic copy of your lecture materials, and use it 
throughout the practical labs to
nd the slides you need again. 
I Don't copy and paste from the PDF slides. 
The slides contain UTF-8 characters that look the same as 
ASCII ones, but won't be understood by shells or compilers. 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 11/526
Cooperate! 
As in the Free Software and Open Source community, cooperation 
during practical labs is valuable in this training session: 
I If you complete your labs before other people, don't hesitate 
to help other people and investigate the issues they face. The 
faster we progress as a group, the more time we have to 
explore extra topics. 
I Explain what you understood to other participants when 
needed. It also helps to consolidate your knowledge. 
I Don't hesitate to report potential bugs to your instructor. 
I Don't hesitate to look for solutions on the Internet as well. 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 12/526
Command memento sheet 
I This memento sheet gives 
command examples for the most 
typical needs (looking for
les, 
extracting a tar archive...) 
I It saves us 1 day of UNIX / Linux 
command line training. 
I Our best tip: in the command line 
shell, always hit the Tab key to 
complete command names and
le 
paths. This avoids 95% of typing 
mistakes. 
I Get an electronic copy on 
http://free-electrons.com/ 
doc/training/embedded-linux/ 
command_memento.pdf 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 13/526
vi basic commands 
I The vi editor is very useful to 
make quick changes to
les in an 
embedded target. 
I Though not very user friendly at
rst, vi is very powerful and its 
main 15 commands are easy to 
learn and are sucient for 99% of 
everyone's needs! 
I Get an electronic copy on 
http://free-electrons.com/ 
doc/training/embedded-linux/ 
vi_memento.pdf 
I You can also take the quick tutorial 
by running vimtutor. This is a 
worthy investment! 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 14/526
Introduction to Embedded Linux 
Introduction to 
Embedded Linux 
Free Electrons 
©Copyright 2004-2014, Free Electrons. 
Creative Commons BY-SA 3.0 license. 
Corrections, suggestions, contributions and translations are welcome! 
Embedded Linux 
Developers 
Free Electrons 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 15/526
Birth of free software 
I 1983, Richard Stallman, GNU project and the free software 
concept. Beginning of the development of gcc, gdb, glibc and 
other important tools 
I 1991, Linus Torvalds, Linux kernel project, a Unix-like 
operating system kernel. Together with GNU software and 
many other open-source components: a completely free 
operating system, GNU/Linux 
I 1995, Linux is more and more popular on server systems 
I 2000, Linux is more and more popular on embedded 
systems 
I 2008, Linux is more and more popular on mobile devices 
I 2010, Linux is more and more popular on phones 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 16/526
Free software? 
I A program is considered free when its license oers to all its 
users the following four freedoms 
I Freedom to run the software for any purpose 
I Freedom to study the software and to change it 
I Freedom to redistribute copies 
I Freedom to distribute copies of modi
ed versions 
I These freedoms are granted for both commercial and 
non-commercial use 
I They imply the availability of source code, software can be 
modi
ed and distributed to customers 
I Good match for embedded systems! 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 17/526
What is embedded Linux? 
Embedded Linux is the usage of the 
Linux kernel and various 
open-source components in 
embedded systems 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 18/526
Introduction to Embedded Linux 
Advantages of Linux and open-source 
for embedded systems 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 19/526
Re-using components 
I The key advantage of Linux and open-source in embedded 
systems is the ability to re-use components 
I The open-source ecosystem already provides many 
components for standard features, from hardware support to 
network protocols, going through multimedia, graphic, 
cryptographic libraries, etc. 
I As soon as a hardware device, or a protocol, or a feature is 
wide-spread enough, high chance of having open-source 
components that support it. 
I Allows to quickly design and develop complicated products, 
based on existing components. 
I No-one should re-develop yet another operating system kernel, 
TCP/IP stack, USB stack or another graphical toolkit library. 
I Allows to focus on the added value of your product. 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 20/526
Low cost 
I Free software can be duplicated on as many devices as you 
want, free of charge. 
I If your embedded system uses only free software, you can 
reduce the cost of software licenses to zero. Even the 
development tools are free, unless you choose a commercial 
embedded Linux edition. 
I Allows to have a higher budget for the hardware or to 
increase the company's skills and knowledge 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 21/526
Full control 
I With open-source, you have the source code for all 
components in your system 
I Allows unlimited modi
cations, changes, tuning, debugging, 
optimization, for an unlimited period of time 
I Without lock-in or dependency from a third-party vendor 
I To be true, non open-source components must be avoided 
when the system is designed and developed 
I Allows to have full control over the software part of your 
system 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 22/526
Quality 
I Many open-source components are widely used, on millions of 
systems 
I Usually higher quality than what an in-house development can 
produce, or even proprietary vendors 
I Of course, not all open-source components are of good 
quality, but most of the widely-used ones are. 
I Allows to design your system with high-quality 
components at the foundations 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 23/526
Eases testing of new features 
I Open-source being freely available, it is easy to get a piece of 
software and evaluate it 
I Allows to easily study several options while making a choice 
I Much easier than purchasing and demonstration procedures 
needed with most proprietary products 
I Allows to easily explore new possibilities and solutions 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 24/526
Community support 
I Open-source software components are developed by 
communities of developers and users 
I This community can provide a high-quality support: you can 
directly contact the main developers of the component you 
are using. The likelyhood of getting an answer doesn't depend 
what company you work for. 
I Often better than traditional support, but one needs to 
understand how the community works to properly use the 
community support possibilities 
I Allows to speed up the resolution of problems when 
developing your system 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 25/526
Taking part into the community 
I Possibility of taking part into the development community of 
some of the components used in the embedded systems: bug 
reporting, test of new versions or features, patches that
x 
bugs or add new features, etc. 
I Most of the time the open-source components are not the 
core value of the product: it's the interest of everybody to 
contribute back. 
I For the engineers: a very motivating way of being recognized 
outside the company, communication with others in the same
eld, opening of new possibilities, etc. 
I For the managers: motivation factor for engineers, allows 
the company to be recognized in the open-source community 
and therefore get support more easily and be more attractive 
to open-source developers 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 26/526
Introduction to Embedded Linux 
A few examples of embedded systems 
running Linux 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 27/526
Personal routers 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 28/526
Television 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 29/526
Point of sale terminal 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 30/526
Laser cutting machine 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 31/526
Viticulture machine 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 32/526
Introduction to Embedded Linux 
Embedded hardware for Linux 
systems 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 33/526
Processor and architecture (1) 
I The Linux kernel and most other architecture-dependent 
component support a wide range of 32 and 64 bits 
architectures 
I x86 and x86-64, as found on PC platforms, but also embedded 
systems (multimedia, industrial) 
I ARM, with hundreds of dierent SoC (multimedia, industrial) 
I PowerPC (mainly real-time, industrial applications) 
I MIPS (mainly networking applications) 
I SuperH (mainly set top box and multimedia applications) 
I Black
n (DSP architecture) 
I Microblaze (soft-core for Xilinx FPGA) 
I Cold
re, SCore, Tile, Xtensa, Cris, FRV, AVR32, M32R 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 34/526
Processor and architecture (2) 
I Both MMU and no-MMU architectures are supported, even 
though no-MMU architectures have a few limitations. 
I Linux is not designed for small microcontrollers. 
I Besides the toolchain, the bootloader and the kernel, all other 
components are generally architecture-independent 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 35/526
RAM and storage 
I RAM: a very basic Linux system can work within 8 MB of 
RAM, but a more realistic system will usually require at least 
32 MB of RAM. Depends on the type and size of applications. 
I Storage: a very basic Linux system can work within 4 MB of 
storage, but usually more is needed. 
I Flash storage is supported, both NAND and NOR 
ash, with 
speci
c
lesystems 
I Block storage including SD/MMC cards and eMMC is 
supported 
I Not necessarily interesting to be too restrictive on the amount 
of RAM/storage: having 
exibility at this level allows to 
re-use as many existing components as possible. 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 36/526
Communication 
I The Linux kernel has support for many common 
communication buses 
I I2C 
I SPI 
I CAN 
I 1-wire 
I SDIO 
I USB 
I And also extensive networking support 
I Ethernet, Wi
, Bluetooth, CAN, etc. 
I IPv4, IPv6, TCP, UDP, SCTP, DCCP, etc. 
I Firewalling, advanced routing, multicast 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 37/526
Types of hardware platforms 
I Evaluation platforms from the SoC vendor. Usually 
expensive, but many peripherals are built-in. Generally 
unsuitable for real products. 
I Component on Module, a small board with only 
CPU/RAM/
ash and a few other core components, with 
connectors to access all other peripherals. Can be used to 
build end products for small to medium quantities. 
I Community development platforms, a new trend to make a 
particular SoC popular and easily available. These are 
ready-to-use and low cost, but usually have less peripherals 
than evaluation platforms. To some extent, can also be used 
for real products. 
I Custom platform. Schematics for evaluation boards or 
development platforms are more and more commonly freely 
available, making it easier to develop custom platforms. 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 38/526
Criteria for choosing the hardware 
I Make sure the hardware you plan to use is already supported 
by the Linux kernel, and has an open-source bootloader, 
especially the SoC you're targeting. 
I Having support in the ocial versions of the projects (kernel, 
bootloader) is a lot better: quality is better, and new versions 
are available. 
I Some SoC vendors and/or board vendors do not contribute 
their changes back to the mainline Linux kernel. Ask them to 
do so, or use another product if you can. A good measurement 
is to see the delta between their kernel and the ocial one. 
I Between properly supported hardware in the ocial 
Linux kernel and poorly-supported hardware, there will 
be huge dierences in development time and cost. 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 39/526
Introduction to Embedded Linux 
Embedded Linux system architecture 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 40/526
Global architecture 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 41/526
Software components 
I Cross-compilation toolchain 
I Compiler that runs on the development machine, but generates 
code for the target 
I Bootloader 
I Started by the hardware, responsible for basic initialization, 
loading and executing the kernel 
I Linux Kernel 
I Contains the process and memory management, network stack, 
device drivers and provides services to user space applications 
I C library 
I The interface between the kernel and the user space 
applications 
I Libraries and applications 
I Third-party or in-house 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 42/526
Embedded Linux work 
Several distinct tasks are needed when deploying embedded Linux 
in a product: 
I Board Support Package development 
I A BSP contains a bootloader and kernel with the suitable 
device drivers for the targeted hardware 
I Purpose of our Kernel Development training 
I System integration 
I Integrate all the components, bootloader, kernel, third-party 
libraries and applications and in-house applications into a 
working system 
I Purpose of this training 
I Development of applications 
I Normal Linux applications, but using speci
cally chosen 
libraries 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 43/526
Embedded Linux development environment 
Embedded Linux 
development 
environment 
Free Electrons 
©Copyright 2004-2014, Free Electrons. 
Creative Commons BY-SA 3.0 license. 
Corrections, suggestions, contributions and translations are welcome! 
Embedded Linux 
Developers 
Free Electrons 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 44/526
Embedded Linux solutions 
I Two ways to switch to embedded Linux 
I Use solutions provided and supported by vendors like 
MontaVista, Wind River or TimeSys. These solutions come 
with their own development tools and environment. They use 
a mix of open-source components and proprietary tools. 
I Use community solutions. They are completely open, 
supported by the community. 
I In Free Electrons training sessions, we do not promote a 
particular vendor, and therefore use community solutions 
I However, knowing the concepts, switching to vendor solutions 
will be easy 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 45/526
OS for Linux development 
I We strongly recommend to use Linux as the desktop operating 
system to embedded Linux developers, for multiple reasons. 
I All community tools are developed and designed to run on 
Linux. Trying to use them on other operating systems 
(Windows, Mac OS X) will lead to trouble, and their usage on 
these systems is generally not supported by community 
developers. 
I As Linux also runs on the embedded device, all the knowledge 
gained from using Linux on the desktop will apply similarly to 
the embedded device. 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 46/526
Desktop Linux distribution 
I Any good and suciently recent Linux 
desktop distribution can be used for the 
development workstation 
I Ubuntu, Debian, Fedora, openSUSE, 
Red Hat, etc. 
I We have chosen Ubuntu, as it is a widely 
used and easy to use desktop Linux 
distribution 
I The Ubuntu setup on the training laptops 
has intentionally been left untouched after 
the normal installation process. Learning 
embedded Linux is also about learning the 
tools needed on the development 
workstation! 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 47/526
Linux root and non-root users 
I Linux is a multi-user operating system 
I The root user is the administrator, and it can do privileged 
operations such as: mounting
lesystems, con
guring the 
network, creating device
les, changing the system 
con
guration, installing or removing software 
I All other users are unprivileged, and cannot perform these 
administrator-level operations 
I On an Ubuntu system, it is not possible to log in as root, 
only as a normal user. 
I The system has been con
gured so that the user account 
created
rst is allowed to run privileged operations through a 
program called sudo. 
I Example: sudo mount /dev/sda2 /mnt/disk 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 48/526
Software packages 
I The distribution mechanism for software in GNU/Linux is 
dierent from the one in Windows 
I Linux distributions provides a central and coherent way of 
installing, updating and removing applications and libraries: 
packages 
I Packages contains the application or library
les, and 
associated meta-information, such as the version and the 
dependencies 
I .deb on Debian and Ubuntu, .rpm on Red Hat, Fedora, 
openSUSE 
I Packages are stored in repositories, usually on HTTP or FTP 
servers 
I You should only use packages from ocial repositories for 
your distribution, unless strictly required. 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 49/526
Managing software packages (1) 
Instructions for Debian based GNU/Linux systems 
(Debian, Ubuntu...) 
I Package repositories are speci
ed in 
/etc/apt/sources.list 
I To update package repository lists: 
sudo apt-get update 
I To
nd the name of a package to install, the best is to use the 
search engine on http://packages.debian.org or on 
http://packages.ubuntu.com. You may also use: 
apt-cache search keyword 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 50/526
Managing software packages (2) 
I To install a given package: 
sudo apt-get install package 
I To remove a given package: 
sudo apt-get remove package 
I To install all available package updates: 
sudo apt-get dist-upgrade 
I Get information about a package: 
apt-cache show package 
I Graphical interfaces 
I Synaptic for GNOME 
I KPackageKit for KDE 
Further details on package management: 
http://www.debian.org/doc/manuals/apt-howto/ 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 51/526
Host vs. target 
I When doing embedded development, there is always a split 
between 
I The host, the development workstation, which is typically a 
powerful PC 
I The target, which is the embedded system under development 
I They are connected by various means: almost always a serial 
line for debugging purposes, frequently an Ethernet 
connection, sometimes a JTAG interface for low-level 
debugging 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 52/526
Serial line communication program 
I An essential tool for embedded development is a serial line 
communication program, like HyperTerminal in Windows. 
I There are multiple options available in Linux: Minicom, 
Picocom, Gtkterm, Putty, etc. 
I In this training session, we recommend using the simplest of 
them: picocom 
I Installation with sudo apt-get install picocom 
I Run with picocom -b BAUD_RATE /dev/SERIAL_DEVICE 
I Exit with Control-A Control-X 
I SERIAL_DEVICE is typically 
I ttyUSBx for USB to serial converters 
I ttySx for real serial ports 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 53/526
Command line tips 
I Using the command line is mandatory for many operations 
needed for embedded Linux development 
I It is a very powerful way of interacting with the system, with 
which you can save a lot of time. 
I Some useful tips 
I You can use several tabs in the Gnome Terminal 
I Remember that you can use relative paths (for example: 
../../linux) in addition to absolute paths (for example: 
/home/user) 
I In a shell, hit [Control] [r], then a keyword, will search 
through the command history. Hit [Control] [r] again to 
search backwards in the history 
I You can copy/paste paths directly from the
le manager to the 
terminal by drag-and-drop. 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 54/526
Practical lab - Training Setup 
Prepare your lab environment 
I Download the lab archive 
I Enforce correct permissions 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 55/526
Cross-compiling toolchains 
Cross-compiling 
toolchains 
Free Electrons 
©Copyright 2004-2014, Free Electrons. 
Creative Commons BY-SA 3.0 license. 
Corrections, suggestions, contributions and translations are welcome! 
Embedded Linux 
Developers 
Free Electrons 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 56/526
Cross-compiling toolchains 
De
nition and Components 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 57/526
De
nition (1) 
I The usual development tools available on a GNU/Linux 
workstation is a native toolchain 
I This toolchain runs on your workstation and generates code 
for your workstation, usually x86 
I For embedded system development, it is usually impossible or 
not interesting to use a native toolchain 
I The target is too restricted in terms of storage and/or memory 
I The target is very slow compared to your workstation 
I You may not want to install all development tools on your 
target. 
I Therefore, cross-compiling toolchains are generally used. 
They run on your workstation but generate code for your 
target. 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 58/526
De
nition (2) 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 59/526
Machines in build procedures 
I Three machines must be distinguished when discussing 
toolchain creation 
I The build machine, where the toolchain is built. 
I The host machine, where the toolchain will be executed. 
I The target machine, where the binaries created by the 
toolchain are executed. 
I Four common build types are possible for toolchains 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 60/526
Dierent toolchain build procedures 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 61/526
Components 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 62/526
Binutils 
I Binutils is a set of tools to generate and manipulate binaries 
for a given CPU architecture 
I as, the assembler, that generates binary code from assembler 
source code 
I ld, the linker 
I ar, ranlib, to generate .a archives, used for libraries 
I objdump, readelf, size, nm, strings, to inspect binaries. 
Very useful analysis tools! 
I strip, to strip useless parts of binaries in order to reduce their 
size 
I http://www.gnu.org/software/binutils/ 
I GPL license 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 63/526
Kernel headers (1) 
I The C library and compiled 
programs needs to interact with 
the kernel 
I Available system calls and their 
numbers 
I Constant de
nitions 
I Data structures, etc. 
I Therefore, compiling the C library 
requires kernel headers, and many 
applications also require them. 
I Available in linux/... and 
asm/... and a few other 
directories corresponding to the 
ones visible in include/ in the 
kernel sources 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 64/526
Kernel headers (2) 
I System call numbers, in asm/unistd.h 
#define __NR_exit 1 
#define __NR_fork 2 
#define __NR_read 3 
I Constant de
nitions, here in asm-generic/fcntl.h, 
included from asm/fcntl.h, included from 
linux/fcntl.h 
#define O_RDWR 00000002 
I Data structures, here in asm/stat.h 
struct stat { 
unsigned long st_dev; 
unsigned long st_ino; 
[...] 
}; 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 65/526
Kernel headers (3) 
I The kernel to user space ABI is backward compatible 
I Binaries generated with a toolchain using kernel headers older 
than the running kernel will work without problem, but won't 
be able to use the new system calls, data structures, etc. 
I Binaries generated with a toolchain using kernel headers newer 
than the running kernel might work on if they don't use the 
recent features, otherwise they will break 
I Using the latest kernel headers is not necessary, unless access 
to the new kernel features is needed 
I The kernel headers are extracted from the kernel sources using 
the headers_install kernel Make
le target. 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 66/526
GCC 
I GNU Compiler Collection, the famous free 
software compiler 
I Can compile C, C++, Ada, Fortran, Java, 
Objective-C, Objective-C++, and generate code 
for a large number of CPU architectures, 
including ARM, AVR, Black
n, CRIS, FRV, 
M32, MIPS, MN10300, PowerPC, SH, v850, 
i386, x86 64, IA64, Xtensa, etc. 
I http://gcc.gnu.org/ 
I Available under the GPL license, libraries under 
the LGPL. 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 67/526
C library 
I The C library is an essential component of 
a Linux system 
I Interface between the applications and 
the kernel 
I Provides the well-known standard C API 
to ease application development 
I Several C libraries are available: 
glibc, uClibc, eglibc, dietlibc, newlib, etc. 
I The choice of the C library must be made 
at the time of the cross-compiling 
toolchain generation, as the GCC compiler 
is compiled against a speci
c C library. 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 68/526
Cross-compiling toolchains 
C Libraries 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 69/526
glibc 
I License: LGPL 
I C library from the GNU project 
I Designed for performance, standards 
compliance and portability 
I Found on all GNU / Linux host systems 
I Of course, actively maintained 
I Quite big for small embedded systems: 
approx 2.5 MB on ARM (version 2.9 - 
libc: 1.5 MB, libm: 750 KB) 
I http://www.gnu.org/software/libc/ 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 70/526
uClibc 
I License: LGPL 
I Lightweight C library for small embedded systems 
I High con
gurability: many features can be enabled or disabled 
through a menucon
g interface 
I Works only with Linux/uClinux, works on most embedded 
architectures 
I No guaranteed binary compatibility. May need to recompile 
applications when the library con
guration changes. 
I Focus on size rather than performance 
I Small compile time 
I http://www.uclibc.org/ 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 71/526
uClibc (2) 
I Most of the applications compile with uClibc. This applies to 
all applications used in embedded systems. 
I Size (arm): 4 times smaller than glibc! 
I uClibc 0.9.30.1: approx. 600 KB (libuClibc: 460 KB, libm: 
96KB) 
I glibc 2.9: approx 2.5 MB 
I Some features not available or limited: priority-inheritance 
mutexes, NPTL support is very new,
xed Name Service 
Switch functionality, etc. 
I Used on a large number of production embedded products, 
including consumer electronic devices 
I Supported by all commercial embedded Linux providers (proof 
of maturity). 
I Warning: though some development is still happening, the 
maintainers have stopped making releases since May 2012. 
The project is in trouble. 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 72/526
eglibc 
I Embedded glibc, LGPL license too 
I Was a variant of glibc, better adapted to the 
needs of embedded systems, because of past 
disagreement with glibc maintainers. 
I eglibc's goals included reduced footprint, 
con
gurable components, better support for 
cross-compilation and cross-testing. 
I Could be built without support for NIS, locales, 
IPv6, and many other features. 
I Fortunately for eglibc, the glibc maintainer has 
changed and its features are now included in 
glibc. Version 2.19 (Feb. 2014) was the last 
release. 
I http: 
//en.wikipedia.org/wiki/Embedded_GLIBC 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 73/526
Honey, I shrunk the programs! 
I Executable size comparison on ARM, tested with eglibc 2.15 
and uClibc 0.9.33.2 
I Plain hello world program (stripped): 
helloworld static dynamic 
uClibc 18kB 2.5kB 
uClibc with Thumb-2 14kB 2.4kB 
eglibc with Thumb-2 361kB 2.7kB 
I Busybox (stripped): 
busybox static dynamic 
uClibc 750kB 603kB 
uClibc with Thumb-2 533kB 439kB 
eglibc with Thumb-2 934kB 444kB 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 74/526
Other smaller C libraries 
I Several other smaller C libraries have been developed, but 
none of them have the goal of allowing the compilation of 
large existing applications 
I They need specially written programs and applications 
I Choices: 
I Dietlibc, http://www.fefe.de/dietlibc/. Approximately 
70 KB. 
I Newlib, http://sourceware.org/newlib/ 
I Klibc, http://www.kernel.org/pub/linux/libs/klibc/, 
designed for use in an initramfs or initrd at boot time. 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 75/526
Cross-compiling toolchains 
Toolchain Options 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 76/526
ABI 
I When building a toolchain, the ABI used to generate binaries 
needs to be de
ned 
I ABI, for Application Binary Interface, de
nes the calling 
conventions (how function arguments are passed, how the 
return value is passed, how system calls are made) and the 
organization of structures (alignment, etc.) 
I All binaries in a system must be compiled with the same ABI, 
and the kernel must understand this ABI. 
I On ARM, two main ABIs: OABI and EABI 
I Nowadays everybody uses EABI 
I On MIPS, several ABIs: o32, o64, n32, n64 
I http://en.wikipedia.org/wiki/Application_Binary_ 
Interface 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 77/526
Floating point support 
I Some processors have a 
oating point unit, some others do 
not. 
I For example, many ARMv4 and ARMv5 CPUs do not have a 

oating point unit. Since ARMv7, a VFP unit is mandatory. 
I For processors having a 
oating point unit, the toolchain 
should generate hard 
oat code, in order to use the 
oating 
point instructions directly 
I For processors without a 
oating point unit, two solutions 
I Generate hard 
oat code and rely on the kernel to emulate the 

oating point instructions. This is very slow. 
I Generate soft 
oat code, so that instead of generating 
oating 
point instructions, calls to a user space library are generated 
I Decision taken at toolchain con
guration time 
I Also possible to con
gure which 
oating point unit should be 
used 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 78/526
CPU optimization 
ags 
I A set of cross-compiling tools is speci
c to a CPU 
architecture (ARM, x86, MIPS, PowerPC) 
I However, with the -march=, -mcpu=, -mtune= options, one 
can select more precisely the target CPU type 
I For example, -march=armv7 -mcpu=cortex-a8 
I At the toolchain compilation time, values can be chosen. 
They are used: 
I As the default values for the cross-compiling tools, when no 
other -march, -mcpu, -mtune options are passed 
I To compile the C library 
I Even if the C library has been compiled for armv5t, it doesn't 
prevent from compiling other programs for armv7 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 79/526
Cross-compiling toolchains 
Obtaining a Toolchain 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 80/526
Building a toolchain manually 
Building a cross-compiling toolchain by yourself is a dicult and 
painful task! Can take days or weeks! 
I Lots of details to learn: many components to build, 
complicated con
guration 
I Lots of decisions to make (such as C library version, ABI, 

oating point mechanisms, component versions) 
I Need kernel headers and C library sources 
I Need to be familiar with current gcc issues and patches on 
your platform 
I Useful to be familiar with building and con
guring tools 
I See the Crosstool-NG docs/ directory for details on how 
toolchains are built. 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 81/526
Get a pre-compiled toolchain 
I Solution that many people choose 
I Advantage: it is the simplest and most convenient solution 
I Drawback: you can't
ne tune the toolchain to your needs 
I Determine what toolchain you need: CPU, endianism, C 
library, component versions, ABI, soft 
oat or hard 
oat, etc. 
I Check whether the available toolchains match your 
requirements. 
I Possible choices 
I Sourcery CodeBench toolchains 
I Linaro toolchains 
I More references at http://elinux.org/Toolchains 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 82/526
Sourcery CodeBench 
I CodeSourcery was a company with an extended expertise on 
free software toolchains: gcc, gdb, binutils and glibc. It has 
been bought by Mentor Graphics, which continues to provide 
similar services and products 
I They sell toolchains with support, but they also provide a 
Lite version, which is free and usable for commercial 
products 
I They have toolchains available for 
I ARM 
I MIPS 
I PowerPC 
I SuperH 
I x86 
I Be sure to use the GNU/Linux versions. The EABI versions 
are for bare-metal development (no operating system) 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 83/526
Linaro toolchains 
I Linaro contributes to improving mainline gcc on ARM, 
in particular by hiring CodeSourcery developers. 
I For people who can't wait for the next releases of gcc, 
Linaro releases modi
ed sources of stable releases of 
gcc, with these optimizations for ARM (mainly for 
recent Cortex A CPUs). 
I As any gcc release, these sources can be used by build 
tools to build their own binary toolchains (Buildroot, 
OpenEmbedded...) This allows to support glibc, uClibc 
and eglibc. 
I https://wiki.linaro.org/WorkingGroups/ToolChain 
I Binary packages are available for Ubuntu users, 
https://launchpad.net/~linaro-maintainers/+ 
archive/toolchain 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 84/526
Installing and using a pre-compiled toolchain 
I Follow the installation procedure proposed by the vendor 
I Usually, it is simply a matter of extracting a tarball wherever 
you want. 
I Then, add the path to toolchain binaries in your PATH: 
export PATH=/path/to/toolchain/bin/:$PATH 
I Finally, compile your applications 
PREFIX-gcc -o foobar foobar.c 
I PREFIX depends on the toolchain con
guration, and allows to 
distinguish cross-compilation tools from native compilation 
utilities 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 85/526
Toolchain building utilities 
Another solution is to use utilities that automate the process of 
building the toolchain 
I Same advantage as the pre-compiled toolchains: you don't 
need to mess up with all the details of the build process 
I But also oers more 
exibility in terms of toolchain 
con
guration, component version selection, etc. 
I They also usually contain several patches that
x known 
issues with the dierent components on some architectures 
I Multiple tools with identical principle: shell scripts or Make
le 
that automatically fetch, extract, con
gure, compile and 
install the dierent components 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 86/526
Toolchain building utilities (2) 
I Crosstool-ng 
I Rewrite of the older Crosstool, with a menucon
g-like 
con
guration system 
I Feature-full: supports uClibc, glibc, eglibc, hard and soft 
oat, 
many architectures 
I Actively maintained 
I http://crosstool-ng.org/ 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 87/526
Toolchain building utilities (3) 
Many root
lesystem build systems also allow the construction of a 
cross-compiling toolchain 
I Buildroot 
I Make
le-based, has a Crosstool-NG back-end, maintained by 
the community 
I http://www.buildroot.net 
I PTXdist 
I Make
le-based, uClibc or glibc, maintained mainly by 
Pengutronix 
I http://pengutronix.de/software/ptxdist/ 
I OpenEmbedded / Yocto 
I A featureful, but more complicated build system 
I http://www.openembedded.org/ 
I https://www.yoctoproject.org/ 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 88/526
Crosstool-NG: installation and usage 
I Installation of Crosstool-NG can be done system-wide, or just 
locally in the source directory. For local installation: 
./configure --enable-local 
make 
make install 
I Some sample con
gurations for various architectures are 
available in samples, they can be listed using 
./ct-ng list-samples 
I To load a sample con
guration 
./ct-ng sample-name 
I To adjust the con
guration 
./ct-ng menuconfig 
I To build the toolchain 
./ct-ng build 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 89/526
Toolchain contents 
I The cross compilation tool binaries, in bin/ 
I This directory can be added to your PATH to ease usage of the 
toolchain 
I One or several sysroot, each containing 
I The C library and related libraries, compiled for the target 
I The C library headers and kernel headers 
I There is one sysroot for each variant: toolchains can be 
multilib if they have several copies of the C library for dierent 
con
gurations (for example: ARMv4T, ARMv5T, etc.) 
I CodeSourcery ARM toolchain are multilib, the sysroots are in 
arm-none-linux-gnueabi/libc/, 
arm-none-linux-gnueabi/libc/armv4t/, 
arm-none-linux-gnueabi/libc/thumb2 
I Crosstool-NG toolchains can be multilib too (still 
experimental), otherwise the sysroot is in 
arm-unknown-linux-uclibcgnueabi/sysroot 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 90/526
Practical lab - Using Crosstool-NG 
Time to build your toolchain 
I Con
gure Crosstool-NG 
I Run it to build your own 
cross-compiling toolchain 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 91/526
Bootloaders 
Bootloaders 
Free Electrons 
©Copyright 2004-2014, Free Electrons. 
Creative Commons BY-SA 3.0 license. 
Corrections, suggestions, contributions and translations are welcome! 
Embedded Linux 
Developers 
Free Electrons 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 92/526
Bootloaders 
Boot Sequence 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 93/526
Bootloaders 
I The bootloader is a piece of code responsible for 
I Basic hardware initialization 
I Loading of an application binary, usually an operating system 
kernel, from 
ash storage, from the network, or from another 
type of non-volatile storage. 
I Possibly decompression of the application binary 
I Execution of the application 
I Besides these basic functions, most bootloaders provide a shell 
with various commands implementing dierent operations. 
I Loading of data from storage or network, memory inspection, 
hardware diagnostics and testing, etc. 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 94/526
Bootloaders on x86 (1) 
I The x86 processors are typically bundled on a 
board with a non-volatile memory containing a 
program, the BIOS. 
I This program gets executed by the CPU after 
reset, and is responsible for basic hardware 
initialization and loading of a small piece of code 
from non-volatile storage. 
I This piece of code is usually the
rst 512 bytes 
of a storage device 
I This piece of code is usually a 1st stage 
bootloader, which will load the full bootloader 
itself. 
I The bootloader can then oer all its features. It 
typically understands
lesystem formats so that 
the kernel
le can be loaded directly from a 
normal
lesystem. 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 95/526
Bootloaders on x86 (2) 
I GRUB, Grand Uni
ed Bootloader, the most powerful one. 
http://www.gnu.org/software/grub/ 
I Can read many
lesystem formats to load the kernel image and 
the con
guration, provides a powerful shell with various 
commands, can load kernel images over the network, etc. 
I See our dedicated presentation for details: 
http://free-electrons.com/docs/grub/ 
I Syslinux, for network and removable media booting (USB key, 
CD-ROM) 
http://www.kernel.org/pub/linux/utils/boot/syslinux/ 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 96/526
Booting on embedded CPUs: case 1 
I When powered, the CPU starts executing code 
at a
xed address 
I There is no other booting mechanism provided 
by the CPU 
I The hardware design must ensure that a NOR 

ash chip is wired so that it is accessible at the 
address at which the CPU starts executing 
instructions 
I The
rst stage bootloader must be programmed 
at this address in the NOR 
I NOR is mandatory, because it allows random 
access, which NAND doesn't allow 
I Not very common anymore (unpractical, and 
requires NOR 
ash) 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 97/526
Booting on embedded CPUs: case 2 
I The CPU has an integrated boot code in ROM 
I BootROM on AT91 CPUs, ROM code on OMAP, etc. 
I Exact details are CPU-dependent 
I This boot code is able to load a
rst stage bootloader from a 
storage device into an internal SRAM (DRAM not initialized 
yet) 
I Storage device can typically be: MMC, NAND, SPI 
ash, 
UART, etc. 
I The
rst stage bootloader is 
I Limited in size due to hardware constraints (SRAM size) 
I Provided either by the CPU vendor or through community 
projects 
I This
rst stage bootloader must initialize DRAM and other 
hardware devices and load a second stage bootloader into 
RAM 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 98/526
Booting on ARM Atmel AT91 
I RomBoot: tries to
nd a valid bootstrap image 
from various storage sources, and load it into 
SRAM (DRAM not initialized yet). Size limited 
to 4 KB. No user interaction possible in standard 
boot mode. 
I AT91Bootstrap: runs from SRAM. Initializes the 
DRAM, the NAND or SPI controller, and loads 
the secondary bootloader into RAM and starts it. 
No user interaction possible. 
I U-Boot: runs from RAM. Initializes some other 
hardware devices (network, USB, etc.). Loads the 
kernel image from storage or network to RAM 
and starts it. Shell with commands provided. 
I Linux Kernel: runs from RAM. Takes over the 
system completely (bootloaders no longer exists). 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 99/526
Booting on ARM TI OMAP3 
I ROM Code: tries to
nd a valid bootstrap image 
from various storage sources, and load it into 
SRAM or RAM (RAM can be initialized by ROM 
code through a con
guration header). Size 
limited to 64 KB. No user interaction possible. 
I X-Loader or U-Boot: runs from SRAM. 
Initializes the DRAM, the NAND or MMC 
controller, and loads the secondary bootloader 
into RAM and starts it. No user interaction 
possible. File called MLO. 
I U-Boot: runs from RAM. Initializes some other 
hardware devices (network, USB, etc.). Loads the 
kernel image from storage or network to RAM 
and starts it. Shell with commands provided. File 
called u-boot.bin or u-boot.img. 
I Linux Kernel: runs from RAM. Takes over the 
system completely (bootloaders no longer exists). 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 100/526
Booting on Marvell SoC 
I ROM Code: tries to
nd a valid bootstrap image 
from various storage sources, and load it into 
RAM. The RAM con
guration is described in a 
CPU-speci
c header, prepended to the bootloader 
image. 
I U-Boot: runs from RAM. Initializes some other 
hardware devices (network, USB, etc.). Loads the 
kernel image from storage or network to RAM 
and starts it. Shell with commands provided. File 
called u-boot.kwb. 
I Linux Kernel: runs from RAM. Takes over the 
system completely (bootloaders no longer exists). 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 101/526
Generic bootloaders for embedded CPUs 
I We will focus on the generic part, the main bootloader, 
oering the most important features. 
I There are several open-source generic bootloaders. 
Here are the most popular ones: 
I U-Boot, the universal bootloader by Denx 
The most used on ARM, also used on PPC, MIPS, x86, m68k, 
NIOS, etc. The de-facto standard nowadays. We will study it 
in detail. 
http://www.denx.de/wiki/U-Boot 
I Barebox, a new architecture-neutral bootloader, written as a 
successor of U-Boot. Better design, better code, active 
development, but doesn't yet have as much hardware support 
as U-Boot. 
http://www.barebox.org 
I There are also a lot of other open-source or proprietary 
bootloaders, often architecture-speci
c 
I RedBoot, Yaboot, PMON, etc. 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 102/526
Bootloaders 
The U-boot bootloader 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 103/526
U-Boot 
U-Boot is a typical free software project 
I License: GPLv2 (same as Linux) 
I Freely available at http://www.denx.de/wiki/U-Boot 
I Documentation available at 
http://www.denx.de/wiki/U-Boot/Documentation 
I The latest development source code is available in a Git 
repository: 
http://git.denx.de/?p=u-boot.git;a=summary 
I Development and discussions happen around an open 
mailing-list http://lists.denx.de/pipermail/u-boot/ 
I Since the end of 2008, it follows a
xed-interval release 
schedule. Every two months, a new version is released. 
Versions are named YYYY.MM. 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 104/526
U-Boot con
guration 
I Get the source code from the website, and uncompress it 
I The include/configs/ directory contains one con
guration
le for each supported board 
I It de
nes the CPU type, the peripherals and their 
con
guration, the memory mapping, the U-Boot features that 
should be compiled in, etc. 
I It is a simple .h
le that sets C pre-processor constants. See 
the README
le for the documentation of these constants. This
le can also be adjusted to add or remove features from 
U-Boot (commands, etc.). 
I Assuming that your board is already supported by U-Boot, 
there should be one entry corresponding to your board in the 
boards.cfg
le. 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 105/526
U-Boot con
guration
le excerpt 
/* CPU configuration */ 
#define CONFIG_ARMV7 1 
#define CONFIG_OMAP 1 
#define CONFIG_OMAP34XX 1 
#define CONFIG_OMAP3430 1 
#define CONFIG_OMAP3_IGEP0020 1 
[...] 
/* Memory configuration */ 
#define CONFIG_NR_DRAM_BANKS 2 
#define PHYS_SDRAM_1 OMAP34XX_SDRC_CS0 
#define PHYS_SDRAM_1_SIZE (32  20) 
#define PHYS_SDRAM_2 OMAP34XX_SDRC_CS1 
[...] 
/* USB configuration */ 
#define CONFIG_MUSB_UDC 1 
#define CONFIG_USB_OMAP3 1 
#define CONFIG_TWL4030_USB 1 
[...] 
/* Available commands and features */ 
#define CONFIG_CMD_CACHE 
#define CONFIG_CMD_EXT2 
#define CONFIG_CMD_FAT 
#define CONFIG_CMD_I2C 
#define CONFIG_CMD_MMC 
#define CONFIG_CMD_NAND 
#define CONFIG_CMD_NET 
#define CONFIG_CMD_DHCP 
#define CONFIG_CMD_PING 
#define CONFIG_CMD_NFS 
#define CONFIG_CMD_MTDPARTS 
[...] 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 106/526
Con
guring and compiling U-Boot 
I U-Boot must be con
gured before being compiled 
I make BOARDNAME_config 
I Where BOARDNAME is the name of the board, as visible in the 
boards.cfg
le (
rst column). 
I Make sure that the cross-compiler is available in PATH 
I Compile U-Boot, by specifying the cross-compiler pre
x. 
Example, if your cross-compiler executable is arm-linux-gcc: 
make CROSS_COMPILE=arm-linux- 
I The main result is a u-boot.bin
le, which is the U-Boot 
image. Depending on your speci
c platform, there may be 
other specialized images: u-boot.img, u-boot.kwb, MLO, 
etc. 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 107/526
Installing U-Boot 
I U-Boot must usually be installed in 
ash memory to be 
executed by the hardware. Depending on the hardware, the 
installation of U-Boot is done in a dierent way: 
I The CPU provides some kind of speci
c boot monitor with 
which you can communicate through serial port or USB using 
a speci
c protocol 
I The CPU boots
rst on removable media (MMC) before 
booting from
xed media (NAND). In this case, boot from 
MMC to re
ash a new version 
I U-Boot is already installed, and can be used to 
ash a new 
version of U-Boot. However, be careful: if the new version of 
U-Boot doesn't work, the board is unusable 
I The board provides a JTAG interface, which allows to write to 
the 
ash memory remotely, without any system running on the 
board. It also allows to rescue a board if the bootloader 
doesn't work. 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 108/526
U-boot prompt 
I Connect the target to the host through a serial console 
I Power-up the board. On the serial console, you will see 
something like: 
U-Boot 2013.04 (May 29 2013 - 10:30:21) 
OMAP36XX/37XX-GP ES1.2, CPU-OPP2, L3-165MHz, Max CPU Clock 1 Ghz 
IGEPv2 + LPDDR/NAND 
I2C: ready 
DRAM: 512 MiB 
NAND: 512 MiB 
MMC: OMAP SD/MMC: 0 
Die ID #255000029ff800000168580212029011 
Net: smc911x-0 
U-Boot # 
I The U-Boot shell oers a set of commands. We will study the 
most important ones, see the documentation for a complete 
reference or the help command. 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 109/526
Information commands 
Flash information (NOR and SPI 
ash) 
U-Boot flinfo 
DataFlash:AT45DB021 
Nb pages: 1024 
Page Size: 264 
Size= 270336 bytes 
Logical address: 0xC0000000 
Area 0: C0000000 to C0001FFF (RO) Bootstrap 
Area 1: C0002000 to C0003FFF Environment 
Area 2: C0004000 to C0041FFF (RO) U-Boot 
NAND 
ash information 
U-Boot nand info 
Device 0: nand0, sector size 128 KiB 
Page size 2048 b 
OOB size 64 b 
Erase size 131072 b 
Version details 
U-Boot version 
U-Boot 2013.04 (May 29 2013 - 10:30:21) 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 110/526
Important commands (1) 
I The exact set of commands depends on the U-Boot 
con
guration 
I help and help command 
I boot, runs the default boot command, stored in bootcmd 
I bootm address, starts a kernel image loaded at the given 
address in RAM 
I ext2load, loads a
le from an ext2
lesystem to RAM 
I And also ext2ls to list
les, ext2info for information 
I fatload, loads a
le from a FAT
lesystem to RAM 
I And also fatls and fatinfo 
I tftp, loads a
le from the network to RAM 
I ping, to test the network 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 111/526
Important commands (2) 
I loadb, loads, loady, load a
le from the serial line to RAM 
I usb, to initialize and control the USB subsystem, mainly used 
for USB storage devices such as USB keys 
I mmc, to initialize and control the MMC subsystem, used for 
SD and microSD cards 
I nand, to erase, read and write contents to NAND 
ash 
I erase, protect, cp, to erase, modify protection and write to 
NOR 
ash 
I md, displays memory contents. Can be useful to check the 
contents loaded in memory, or to look at hardware registers. 
I mm, modi
es memory contents. Can be useful to modify 
directly hardware registers, for testing purposes. 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 112/526
Environment variables commands (1) 
I U-Boot can be con
gured through environment variables, 
which aect the behavior of the dierent commands. 
I Environment variables are loaded from 
ash to RAM at 
U-Boot startup, can be modi
ed and saved back to 
ash for 
persistence 
I There is a dedicated location in 
ash (or in MMC storage) to 
store the U-Boot environment, de
ned in the board 
con
guration
le 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 113/526
Environment variables commands (2) 
Commands to manipulate environment variables: 
I printenv 
Shows all variables 
I printenv variable-name 
Shows the value of a variable 
I setenv variable-name variable-value 
Changes the value of a variable, only in RAM 
I editenv variable-name 
Edits the value of a variable, only in RAM 
I saveenv 
Saves the current state of the environment to 
ash 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 114/526
Environment variables commands - Example 
u-boot # printenv 
baudrate=19200 
ethaddr=00:40:95:36:35:33 
netmask=255.255.255.0 
ipaddr=10.0.0.11 
serverip=10.0.0.1 
stdin=serial 
stdout=serial 
stderr=serial 
u-boot # printenv serverip 
serverip=10.0.0.1 
u-boot # setenv serverip 10.0.0.100 
u-boot # saveenv 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 115/526
Important U-Boot env variables 
I bootcmd, contains the command that U-Boot will 
automatically execute at boot time after a con
gurable delay, 
if the process is not interrupted 
I bootargs, contains the arguments passed to the Linux kernel, 
covered later 
I serverip, the IP address of the server that U-Boot will 
contact for network related commands 
I ipaddr, the IP address that U-Boot will use 
I netmask, the network mask to contact the server 
I ethaddr, the MAC address, can only be set once 
I bootdelay, the delay in seconds before which U-Boot runs 
bootcmd 
I autostart, if yes, U-Boot starts automatically an image that 
has been loaded into memory 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 116/526
Scripts in environment variables 
I Environment variables can contain small scripts, to execute 
several commands and test the results of commands. 
I Useful to automate booting or upgrade processes 
I Several commands can be chained using the ; operator 
I Tests can be done using 
if command ; then ... ; else ... ; fi 
I Scripts are executed using run variable-name 
I You can reference other variables using ${variable-name} 
I Example 
I setenv mmc-boot 'if fatload mmc 0 80000000 boot. 
ini; then source; else if fatload mmc 0 80000000 
uImage; then run mmc-bootargs; bootm; fi; fi' 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 117/526
Transferring
les to the target 
I U-Boot is mostly used to load and boot a kernel image, but it 
also allows to change the kernel image and the root
lesystem 
stored in 
ash. 
I Files must be exchanged between the target and the 
development workstation. This is possible: 
I Through the network if the target has an Ethernet connection, 
and U-Boot contains a driver for the Ethernet chip. This is the 
fastest and most ecient solution. 
I Through a USB key, if U-Boot supports the USB controller of 
your platform 
I Through a SD or microSD card, if U-Boot supports the MMC 
controller of your platform 
I Through the serial port 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 118/526
TFTP 
I Network transfer from the development workstation and 
U-Boot on the target takes place through TFTP 
I Trivial File Transfer Protocol 
I Somewhat similar to FTP, but without authentication and over 
UDP 
I A TFTP server is needed on the development workstation 
I sudo apt-get install tftpd-hpa 
I All
les in /var/lib/tftpboot are then visible through TFTP 
I A TFTP client is available in the tftp-hpa package, for 
testing 
I A TFTP client is integrated into U-Boot 
I Con
gure the ipaddr and serverip environment variables 
I Use tftp address filename to load a
le 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 119/526
U-boot mkimage 
I The kernel image that U-Boot loads and boots must be 
prepared, so that a U-Boot speci
c header is added in front of 
the image 
I This header gives details such as the image size, the expected 
load address, the compression type, etc. 
I This is done with a tool that comes in U-Boot, mkimage 
I Debian / Ubuntu: just install the u-boot-tools package. 
I Or, compile it by yourself: simply con
gure U-Boot for any 
board of any architecture and compile it. Then install 
mkimage: 
cp tools/mkimage /usr/local/bin/ 
I The special target uImage of the kernel Make
le can then be 
used to generate a kernel image suitable for U-Boot. 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 120/526
Practical lab - U-Boot 
Time to start the practical lab! 
I Communicate with the board using 
a serial console 
I Con
gure, build and install U-Boot 
I Learn U-Boot commands 
I Set up TFTP communication with 
the board 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 121/526
Linux kernel introduction 
Linux kernel 
introduction 
Free Electrons 
©Copyright 2004-2014, Free Electrons. 
Creative Commons BY-SA 3.0 license. 
Corrections, suggestions, contributions and translations are welcome! 
Embedded Linux 
Developers 
Free Electrons 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 122/526
Linux kernel introduction 
Linux features 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 123/526
History 
I The Linux kernel is one component of a system, which also 
requires libraries and applications to provide features to end 
users. 
I The Linux kernel was created as a hobby in 1991 by a Finnish 
student, Linus Torvalds. 
I Linux quickly started to be used as the kernel for free software 
operating systems 
I Linus Torvalds has been able to create a large and dynamic 
developer and user community around Linux. 
I Nowadays, more than one thousand people contribute to each 
kernel release, individuals or companies big and small. 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 124/526
Linux kernel key features 
I Portability and hardware 
support. Runs on most 
architectures. 
I Scalability. Can run on 
super computers as well as 
on tiny devices (4 MB of 
RAM is enough). 
I Compliance to standards 
and interoperability. 
I Exhaustive networking 
support. 
I Security. It can't hide its 

aws. Its code is reviewed 
by many experts. 
I Stability and reliability. 
I Modularity. Can include 
only what a system needs 
even at run time. 
I Easy to program. You can 
learn from existing code. 
Many useful resources on 
the net. 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 125/526
Linux kernel in the system 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 126/526
Linux kernel main roles 
I Manage all the hardware resources: CPU, memory, I/O. 
I Provide a set of portable, architecture and hardware 
independent APIs to allow user space applications and 
libraries to use the hardware resources. 
I Handle concurrent accesses and usage of hardware 
resources from dierent applications. 
I Example: a single network interface is used by multiple user 
space applications through various network connections. The 
kernel is responsible to multiplex the hardware resource. 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 127/526
System calls 
I The main interface between the kernel and user space is the 
set of system calls 
I About 300 system calls that provide the main kernel services 
I File and device operations, networking operations, 
inter-process communication, process management, memory 
mapping, timers, threads, synchronization primitives, etc. 
I This interface is stable over time: only new system calls can 
be added by the kernel developers 
I This system call interface is wrapped by the C library, and 
user space applications usually never make a system call 
directly but rather use the corresponding C library function 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 128/526
Pseudo
lesystems 
I Linux makes system and kernel information available in user 
space through pseudo
lesystems, sometimes also called 
virtual
lesystems 
I Pseudo
lesystems allow applications to see directories and
les that do not exist on any real storage: they are created 
and updated on the 
y by the kernel 
I The two most important pseudo
lesystems are 
I proc, usually mounted on /proc: 
Operating system related information (processes, memory 
management parameters...) 
I sysfs, usually mounted on /sys: 
Representation of the system as a set of devices and buses. 
Information about these devices. 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 129/526
Inside the Linux kernel 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 130/526
Linux license 
I The whole Linux sources are Free Software released under the 
GNU General Public License version 2 (GPL v2). 
I For the Linux kernel, this basically implies that: 
I When you receive or buy a device with Linux on it, you should 
receive the Linux sources, with the right to study, modify and 
redistribute them. 
I When you produce Linux based devices, you must release the 
sources to the recipient, with the same rights, with no 
restriction. 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 131/526
Supported hardware architectures 
I See the arch/ directory in the kernel sources 
I Minimum: 32 bit processors, with or without MMU, and gcc 
support 
I 32 bit architectures (arch/ subdirectories) 
Examples: arm, avr32, blackfin, c6x, m68k, microblaze, 
mips, score, sparc, um 
I 64 bit architectures: 
Examples: alpha, arm64, ia64, tile 
I 32/64 bit architectures 
Examples: powerpc, x86, sh, sparc 
I Find details in kernel sources: arch/arch/Kconfig, 
arch/arch/README, or Documentation/arch/ 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 132/526
Linux kernel introduction 
Linux versioning scheme and 
development process 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 133/526
Until 2.6 (1) 
I One stable major branch every 2 or 3 years 
I Identi
ed by an even middle number 
I Examples: 1.0.x, 2.0.x, 2.2.x, 2.4.x 
I One development branch to integrate new functionalities and 
major changes 
I Identi
ed by an odd middle number 
I Examples: 2.1.x, 2.3.x, 2.5.x 
I After some time, a development version becomes the new base 
version for the stable branch 
I Minor releases once in while: 2.2.23, 2.5.12, etc. 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 134/526
Until 2.6 (2) 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 135/526
Changes since Linux 2.6 
I Since 2.6.0, kernel developers have been able to introduce 
lots of new features one by one on a steady pace, without 
having to make disruptive changes to existing subsystems. 
I Since then, there has been no need to create a new 
development branch massively breaking compatibility with the 
stable branch. 
I Thanks to this, more features are released to users at a 
faster pace. 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 136/526
3.x stable branch 
I From 2003 to 2011, the ocial kernel versions were named 
2.6.x. 
I Linux 3.0 was released in July 2011 
I This is only a change to the numbering scheme 
I Ocial kernel versions are now named 3.x (3.0, 3.1, 3.2, 
etc.) 
I Stabilized versions are named 3.x.y (3.0.2, 3.4.3, etc.) 
I It eectively only removes a digit compared to the previous 
numbering scheme 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 137/526
New development model 
Using merge and bug
xing windows 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 138/526
New development model - Details 
I After the release of a 3.x version (for example), a two-weeks 
merge window opens, during which major additions are 
merged. 
I The merge window is closed by the release of test version 
3.(x+1)-rc1 
I The bug
xing period opens, for 6 to 10 weeks. 
I At regular intervals during the bug
xing period, 
3.(x+1)-rcY test versions are released. 
I When considered suciently stable, kernel 3.(x+1) is 
released, and the process starts again. 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 139/526
More stability for the kernel source tree 
I Issue: bug and security
xes only released 
for most recent stable kernel versions. 
I Some people need to have a recent kernel, 
but with long term support for security 
updates. 
I You could get long term support from a 
commercial embedded Linux provider. 
I You could reuse sources for the kernel 
used in Ubuntu Long Term Support 
releases (5 years of free security updates). 
I The http://kernel.org front page 
shows which versions will be supported for 
some time (up to 2 or 3 years), and which 
ones won't be supported any more 
(EOL: End Of Life) 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 140/526
What's new in each Linux release? 
I The ocial list of changes for each Linux release is just a 
huge list of individual patches! 
commit aa6e52a35d388e730f4df0ec2ec48294590cc459 
Author: Thomas Petazzoni thomas.petazzoni@free-electrons.com 
Date: Wed Jul 13 11:29:17 2011 +0200 
at91: at91-ohci: support overcurrent notification 
Several USB power switches (AIC1526 or MIC2026) have a digital output 
that is used to notify that an overcurrent situation is taking 
place. This digital outputs are typically connected to GPIO inputs of 
the processor and can be used to be notified of these overcurrent 
situations. 
Therefore, we add a new overcurrent_pin[] array in the at91_usbh_data 
structure so that boards can tell the AT91 OHCI driver which pins are 
used for the overcurrent notification, and an overcurrent_supported 
boolean to tell the driver whether overcurrent is supported or not. 
The code has been largely borrowed from ohci-da8xx.c and 
ohci-s3c2410.c. 
Signed-off-by: Thomas Petazzoni thomas.petazzoni@free-electrons.com 
Signed-off-by: Nicolas Ferre nicolas.ferre@atmel.com 
I Very dicult to
nd out the key changes and to get the global 
picture out of individual changes. 
I Fortunately, there are some useful resources available 
I http://wiki.kernelnewbies.org/LinuxChanges 
I http://lwn.net 
I http://linuxfr.org, for French readers 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 141/526
Linux kernel introduction 
Linux kernel sources 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 142/526
Location of kernel sources 
I The ocial versions of the Linux kernel, as released by Linus 
Torvalds, are available at http://www.kernel.org 
I These versions follow the development model of the kernel 
I However, they may not contain the latest development from a 
speci
c area yet. Some features in development might not be 
ready for mainline inclusion yet. 
I Many chip vendors supply their own kernel sources 
I Focusing on hardware support
rst 
I Can have a very important delta with mainline Linux 
I Useful only when mainline hasn't caught up yet. 
I Many kernel sub-communities maintain their own kernel, with 
usually newer but less stable features 
I Architecture communities (ARM, MIPS, PowerPC, etc.), 
device drivers communities (I2C, SPI, USB, PCI, network, 
etc.), other communities (real-time, etc.) 
I No ocial releases, only development trees are available. 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 143/526
Getting Linux sources 
I The kernel sources are available from 
http://kernel.org/pub/linux/kernel as full tarballs 
(complete kernel sources) and patches (dierences between 
two kernel versions). 
I However, more and more people use the git version control 
system. Absolutely needed for kernel development! 
I Fetch the entire kernel sources and history 
git clone git://git.kernel.org/pub/scm/linux/ 
kernel/git/torvalds/linux.git 
I Create a branch that starts at a speci
c stable version 
git checkout -b name-of-branch v3.11 
I Web interface available at http://git.kernel.org/cgit/ 
linux/kernel/git/torvalds/linux.git/tree/. 
I Read more about Git at http://git-scm.com/ 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 144/526
Linux kernel size (1) 
I Linux 3.10 sources: 
Raw size: 573 MB (43,000
les, approx 15,800,000 lines) 
gzip compressed tar archive: 105 MB 
bzip2 compressed tar archive: 83 MB (better) 
xz compressed tar archive: 69 MB (best) 
I Minimum Linux 3.17 compiled kernel size, booting on the 
ARM Versatile board (hard drive on PCI, ext2
lesystem, ELF 
executable support, framebuer console and input devices): 
876 KB (compressed), 2.3 MB (raw) 
I Why are these sources so big? 
Because they include thousands of device drivers, many 
network protocols, support many architectures and
lesystems... 
I The Linux core (scheduler, memory management...) is pretty 
small! 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 145/526
Linux kernel size (2) 
As of kernel version 3.10. 
I drivers/: 49.4% 
I arch/: 21.9% 
I fs/: 6.0% 
I include/: 4.7% 
I sound/: 4.4% 
I Documentation/: 4.0% 
I net/: 3.9% 
I firmware/: 1.0% 
I kernel/: 1.0% 
I tools/: 0.9% 
I scripts/: 0.5% 
I mm/: 0.5% 
I crypto/: 0.4% 
I security/: 0.4% 
I lib/: 0.4% 
I block/: 0.2% 
I ... 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 146/526
Getting Linux sources 
I Full tarballs 
I Contain the complete kernel sources: long to download and 
uncompress, but must be done at least once 
I Example: 
http://www.kernel.org/pub/linux/kernel/v3.x/linux- 
3.10.9.tar.xz 
I Extract command: 
tar xf linux-3.10.9.tar.xz 
I Incremental patches between versions 
I It assumes you already have a base version and you apply the 
correct patches in the right order. Quick to download and 
apply 
I Examples: 
http://www.kernel.org/pub/linux/kernel/v3.x/patch-3.10.xz 
(3.9 to 3.10) 
http://www.kernel.org/pub/linux/kernel/v3.x/patch-3.10.9.xz 
(3.10 to 3.10.9) 
I All previous kernel versions are available in 
http://kernel.org/pub/linux/kernel/ 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 147/526
Patch 
I A patch is the dierence between two source trees 
I Computed with the diff tool, or with more elaborate version 
control systems 
I They are very common in the open-source community 
I Excerpt from a patch: 
diff -Nru a/Makefile b/Makefile 
--- a/Makefile 2005-03-04 09:27:15 -08:00 
+++ b/Makefile 2005-03-04 09:27:15 -08:00 
@@ -1,7 +1,7 @@ 
VERSION = 2 
PATCHLEVEL = 6 
SUBLEVEL = 11 
-EXTRAVERSION = 
+EXTRAVERSION = .1 
NAME=Woozy Numbat 
# *DOCUMENTATION* 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 148/526
Contents of a patch 
I One section per modi
ed
le, starting with a header 
diff -Nru a/Makefile b/Makefile 
--- a/Makefile 2005-03-04 09:27:15 -08:00 
+++ b/Makefile 2005-03-04 09:27:15 -08:00 
I One sub-section per modi
ed part of the
le, starting with 
header with the aected line numbers 
@@ -1,7 +1,7 @@ 
I Three lines of context before the change 
VERSION = 2 
PATCHLEVEL = 6 
SUBLEVEL = 11 
I The change itself 
-EXTRAVERSION = 
+EXTRAVERSION = .1 
I Three lines of context after the change 
NAME=Woozy Numbat 
# *DOCUMENTATION* 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 149/526
Using the patch command 
The patch command: 
I Takes the patch contents on its standard input 
I Applies the modi
cations described by the patch into the 
current directory 
patch usage examples: 
I patch -pn  diff_file 
I cat diff_file | patch -pn 
I xzcat diff_file.xz | patch -pn 
I bzcat diff_file.bz2 | patch -pn 
I zcat diff_file.gz | patch -pn 
I Notes: 
I n: number of directory levels to skip in the
le paths 
I You can reverse apply a patch with the -R option 
I You can test a patch with --dry-run option 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 150/526
Applying a Linux patch 
I Two types of Linux patches: 
I Either to be applied to the previous stable version 
(from 3.x-1 to 3.x) 
I Or implementing
xes to the current stable version 
(from 3.x to 3.x.y) 
I Can be downloaded in gzip, bzip2 or xz (much smaller) 
compressed
les. 
I Always produced for n=1 
(that's what everybody does... do it too!) 
I Need to run the patch command inside the kernel source 
directory 
I Linux patch command line example: 
cd linux-3.9 
xzcat ../patch-3.10.xz | patch -p1 
xzcat ../patch-3.10.9.xz | patch -p1 
cd ..; mv linux-3.9 linux-3.10.9 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 151/526
Practical lab - Kernel sources 
Time to start the practical lab! 
I Get the Linux kernel sources 
I Apply patches 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 152/526
Linux kernel introduction 
Kernel con
guration 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 153/526
Kernel con
guration and build system 
I The kernel con
guration and build system is based on 
multiple Make
les 
I One only interacts with the main Makefile, present at the 
top directory of the kernel source tree 
I Interaction takes place 
I using the make tool, which parses the Make
le 
I through various targets, de
ning which action should be done 
(con
guration, compilation, installation, etc.). Run 
make help to see all available targets. 
I Example 
I cd linux-3.6.x/ 
I make target 
Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 154/526
Kernel con
guration (1) 
I The kernel contains thousands of device drivers,
lesystem 
drivers, network protocols and other con
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)
Embedded linux system development (slides)

More Related Content

What's hot (20)

Linux Memory Management
Linux Memory ManagementLinux Memory Management
Linux Memory Management
 
Linux file system
Linux file systemLinux file system
Linux file system
 
Boot process: BIOS vs UEFI
Boot process: BIOS vs UEFIBoot process: BIOS vs UEFI
Boot process: BIOS vs UEFI
 
Linux device drivers
Linux device driversLinux device drivers
Linux device drivers
 
Linux Initialization Process (2)
Linux Initialization Process (2)Linux Initialization Process (2)
Linux Initialization Process (2)
 
Linux file system
Linux file systemLinux file system
Linux file system
 
Linux File System
Linux File SystemLinux File System
Linux File System
 
Bash shell
Bash shellBash shell
Bash shell
 
Linux kernel modules
Linux kernel modulesLinux kernel modules
Linux kernel modules
 
Linux Kernel Image
Linux Kernel ImageLinux Kernel Image
Linux Kernel Image
 
Linux file system
Linux file systemLinux file system
Linux file system
 
Lesson 2 Understanding Linux File System
Lesson 2 Understanding Linux File SystemLesson 2 Understanding Linux File System
Lesson 2 Understanding Linux File System
 
Linux - Introductions to Linux Operating System
Linux - Introductions to Linux Operating SystemLinux - Introductions to Linux Operating System
Linux - Introductions to Linux Operating System
 
Linux installation and booting process
Linux installation and booting processLinux installation and booting process
Linux installation and booting process
 
Linux booting procedure
Linux booting procedureLinux booting procedure
Linux booting procedure
 
Embedded Linux
Embedded LinuxEmbedded Linux
Embedded Linux
 
Linux scheduler
Linux schedulerLinux scheduler
Linux scheduler
 
Linux device drivers
Linux device drivers Linux device drivers
Linux device drivers
 
The basic concept of Linux FIleSystem
The basic concept of Linux FIleSystemThe basic concept of Linux FIleSystem
The basic concept of Linux FIleSystem
 
Storage Management in Linux OS.ppt
Storage Management in Linux OS.pptStorage Management in Linux OS.ppt
Storage Management in Linux OS.ppt
 

Viewers also liked

Embedded Linux from Scratch to Yocto
Embedded Linux from Scratch to YoctoEmbedded Linux from Scratch to Yocto
Embedded Linux from Scratch to YoctoSherif Mousa
 
Building Embedded Linux Systems Introduction
Building Embedded Linux Systems IntroductionBuilding Embedded Linux Systems Introduction
Building Embedded Linux Systems IntroductionSherif Mousa
 
Introduction to Embedded Linux
Introduction to Embedded LinuxIntroduction to Embedded Linux
Introduction to Embedded LinuxHossain Reja
 
Embedded Linux Basics
Embedded Linux BasicsEmbedded Linux Basics
Embedded Linux BasicsMarc Leeman
 
Yocto - Embedded Linux Distribution Maker
Yocto - Embedded Linux Distribution MakerYocto - Embedded Linux Distribution Maker
Yocto - Embedded Linux Distribution MakerSherif Mousa
 
Building Mini Embedded Linux System for X86 Arch
Building Mini Embedded Linux System for X86 ArchBuilding Mini Embedded Linux System for X86 Arch
Building Mini Embedded Linux System for X86 ArchSherif Mousa
 
Building Embedded Linux Full Tutorial for ARM
Building Embedded Linux Full Tutorial for ARMBuilding Embedded Linux Full Tutorial for ARM
Building Embedded Linux Full Tutorial for ARMSherif Mousa
 
Embedded linux
Embedded linuxEmbedded linux
Embedded linuxWingston
 
Embedded Linux Talk Uni Forum
Embedded Linux Talk Uni ForumEmbedded Linux Talk Uni Forum
Embedded Linux Talk Uni ForumSumant Diwakar
 
Module 4 Embedded Linux
Module 4 Embedded LinuxModule 4 Embedded Linux
Module 4 Embedded LinuxTushar B Kute
 
Using Embedded Linux for Infrastructure Systems
Using Embedded Linux for Infrastructure SystemsUsing Embedded Linux for Infrastructure Systems
Using Embedded Linux for Infrastructure SystemsYoshitake Kobayashi
 
Embedded Os [Linux & Co.]
Embedded Os [Linux & Co.]Embedded Os [Linux & Co.]
Embedded Os [Linux & Co.]Ionela
 
Linux for embedded_systems
Linux for embedded_systemsLinux for embedded_systems
Linux for embedded_systemsVandana Salve
 

Viewers also liked (20)

Embedded Linux from Scratch to Yocto
Embedded Linux from Scratch to YoctoEmbedded Linux from Scratch to Yocto
Embedded Linux from Scratch to Yocto
 
Building Embedded Linux Systems Introduction
Building Embedded Linux Systems IntroductionBuilding Embedded Linux Systems Introduction
Building Embedded Linux Systems Introduction
 
Introduction to Embedded Linux
Introduction to Embedded LinuxIntroduction to Embedded Linux
Introduction to Embedded Linux
 
Embedded Linux Basics
Embedded Linux BasicsEmbedded Linux Basics
Embedded Linux Basics
 
Yocto - Embedded Linux Distribution Maker
Yocto - Embedded Linux Distribution MakerYocto - Embedded Linux Distribution Maker
Yocto - Embedded Linux Distribution Maker
 
Building Mini Embedded Linux System for X86 Arch
Building Mini Embedded Linux System for X86 ArchBuilding Mini Embedded Linux System for X86 Arch
Building Mini Embedded Linux System for X86 Arch
 
Embedded Linux on ARM
Embedded Linux on ARMEmbedded Linux on ARM
Embedded Linux on ARM
 
Building Embedded Linux Full Tutorial for ARM
Building Embedded Linux Full Tutorial for ARMBuilding Embedded Linux Full Tutorial for ARM
Building Embedded Linux Full Tutorial for ARM
 
Embedded linux
Embedded linuxEmbedded linux
Embedded linux
 
Building
BuildingBuilding
Building
 
Paper5
Paper5Paper5
Paper5
 
Embedded Linux Talk Uni Forum
Embedded Linux Talk Uni ForumEmbedded Linux Talk Uni Forum
Embedded Linux Talk Uni Forum
 
Linux Mint
Linux MintLinux Mint
Linux Mint
 
Module 4 Embedded Linux
Module 4 Embedded LinuxModule 4 Embedded Linux
Module 4 Embedded Linux
 
Embedded Linux On A R M
Embedded  Linux On  A R MEmbedded  Linux On  A R M
Embedded Linux On A R M
 
Using Embedded Linux for Infrastructure Systems
Using Embedded Linux for Infrastructure SystemsUsing Embedded Linux for Infrastructure Systems
Using Embedded Linux for Infrastructure Systems
 
Embedded Os [Linux & Co.]
Embedded Os [Linux & Co.]Embedded Os [Linux & Co.]
Embedded Os [Linux & Co.]
 
ARM Architecture
ARM ArchitectureARM Architecture
ARM Architecture
 
Usb Overview
Usb OverviewUsb Overview
Usb Overview
 
Linux for embedded_systems
Linux for embedded_systemsLinux for embedded_systems
Linux for embedded_systems
 

Similar to Embedded linux system development (slides)

Linux Kernel and Driver Development Training
Linux Kernel and Driver Development TrainingLinux Kernel and Driver Development Training
Linux Kernel and Driver Development TrainingStephan Cadene
 
Yocto project and open embedded training
Yocto project and open embedded trainingYocto project and open embedded training
Yocto project and open embedded trainingH Ming
 
Kernel Recipes 2014 - Supporting a new ARM platform: the Allwinner example
Kernel Recipes 2014 - Supporting a new ARM platform: the Allwinner exampleKernel Recipes 2014 - Supporting a new ARM platform: the Allwinner example
Kernel Recipes 2014 - Supporting a new ARM platform: the Allwinner exampleAnne Nicolas
 
Kernel Recipes 2013 - Easy rootfs using Buildroot
Kernel Recipes 2013 - Easy rootfs using BuildrootKernel Recipes 2013 - Easy rootfs using Buildroot
Kernel Recipes 2013 - Easy rootfs using BuildrootAnne Nicolas
 
Intro To Linux
Intro To LinuxIntro To Linux
Intro To Linuxtechlug
 
Embedded Recipes 2017 - Introduction to Yocto Project/OpenEmbedded - Mylène J...
Embedded Recipes 2017 - Introduction to Yocto Project/OpenEmbedded - Mylène J...Embedded Recipes 2017 - Introduction to Yocto Project/OpenEmbedded - Mylène J...
Embedded Recipes 2017 - Introduction to Yocto Project/OpenEmbedded - Mylène J...Anne Nicolas
 
Unit+seven+ +introduction+to+linux+and+ubuntu
Unit+seven+ +introduction+to+linux+and+ubuntuUnit+seven+ +introduction+to+linux+and+ubuntu
Unit+seven+ +introduction+to+linux+and+ubuntuErdo Deshiant Garnaby
 
Unit+seven+ +introduction+to+linux+and+ubuntu
Unit+seven+ +introduction+to+linux+and+ubuntuUnit+seven+ +introduction+to+linux+and+ubuntu
Unit+seven+ +introduction+to+linux+and+ubuntuErdo Deshiant Garnaby
 
Module 18 (linux hacking)
Module 18 (linux hacking)Module 18 (linux hacking)
Module 18 (linux hacking)Wail Hassan
 
Bn 1027 demo linux adminstration
Bn 1027 demo  linux adminstrationBn 1027 demo  linux adminstration
Bn 1027 demo linux adminstrationconline training
 
OWF12/PAUG Conf Days Android system development, maxime ripard, free electrons
OWF12/PAUG Conf Days Android system development, maxime ripard, free electronsOWF12/PAUG Conf Days Android system development, maxime ripard, free electrons
OWF12/PAUG Conf Days Android system development, maxime ripard, free electronsParis Open Source Summit
 
Day 2-presentation
Day 2-presentationDay 2-presentation
Day 2-presentationDeb Forsten
 
E learning resource Locator Project Report (J2EE)
E learning resource Locator Project Report (J2EE)E learning resource Locator Project Report (J2EE)
E learning resource Locator Project Report (J2EE)Chiranjeevi Adi
 
I Am Linux-Introductory Module on Linux
I Am Linux-Introductory Module on LinuxI Am Linux-Introductory Module on Linux
I Am Linux-Introductory Module on LinuxSagar Kumar
 

Similar to Embedded linux system development (slides) (20)

Linux Kernel and Driver Development Training
Linux Kernel and Driver Development TrainingLinux Kernel and Driver Development Training
Linux Kernel and Driver Development Training
 
Yocto project and open embedded training
Yocto project and open embedded trainingYocto project and open embedded training
Yocto project and open embedded training
 
Android slides
Android slidesAndroid slides
Android slides
 
Kernel Recipes 2014 - Supporting a new ARM platform: the Allwinner example
Kernel Recipes 2014 - Supporting a new ARM platform: the Allwinner exampleKernel Recipes 2014 - Supporting a new ARM platform: the Allwinner example
Kernel Recipes 2014 - Supporting a new ARM platform: the Allwinner example
 
Kernel Recipes 2013 - Easy rootfs using Buildroot
Kernel Recipes 2013 - Easy rootfs using BuildrootKernel Recipes 2013 - Easy rootfs using Buildroot
Kernel Recipes 2013 - Easy rootfs using Buildroot
 
Intro To Linux
Intro To LinuxIntro To Linux
Intro To Linux
 
Embedded Recipes 2017 - Introduction to Yocto Project/OpenEmbedded - Mylène J...
Embedded Recipes 2017 - Introduction to Yocto Project/OpenEmbedded - Mylène J...Embedded Recipes 2017 - Introduction to Yocto Project/OpenEmbedded - Mylène J...
Embedded Recipes 2017 - Introduction to Yocto Project/OpenEmbedded - Mylène J...
 
Unit+seven+ +introduction+to+linux+and+ubuntu
Unit+seven+ +introduction+to+linux+and+ubuntuUnit+seven+ +introduction+to+linux+and+ubuntu
Unit+seven+ +introduction+to+linux+and+ubuntu
 
Unit+seven+ +introduction+to+linux+and+ubuntu
Unit+seven+ +introduction+to+linux+and+ubuntuUnit+seven+ +introduction+to+linux+and+ubuntu
Unit+seven+ +introduction+to+linux+and+ubuntu
 
Module 18 (linux hacking)
Module 18 (linux hacking)Module 18 (linux hacking)
Module 18 (linux hacking)
 
Bn 1027 demo linux adminstration
Bn 1027 demo  linux adminstrationBn 1027 demo  linux adminstration
Bn 1027 demo linux adminstration
 
Training for Students
Training for StudentsTraining for Students
Training for Students
 
OWF12/PAUG Conf Days Android system development, maxime ripard, free electrons
OWF12/PAUG Conf Days Android system development, maxime ripard, free electronsOWF12/PAUG Conf Days Android system development, maxime ripard, free electrons
OWF12/PAUG Conf Days Android system development, maxime ripard, free electrons
 
website
websitewebsite
website
 
website
websitewebsite
website
 
Foss Presentation
Foss PresentationFoss Presentation
Foss Presentation
 
Day 2-presentation
Day 2-presentationDay 2-presentation
Day 2-presentation
 
E learning resource Locator Project Report (J2EE)
E learning resource Locator Project Report (J2EE)E learning resource Locator Project Report (J2EE)
E learning resource Locator Project Report (J2EE)
 
Open Source in the Enterprise
Open Source in the EnterpriseOpen Source in the Enterprise
Open Source in the Enterprise
 
I Am Linux-Introductory Module on Linux
I Am Linux-Introductory Module on LinuxI Am Linux-Introductory Module on Linux
I Am Linux-Introductory Module on Linux
 

Recently uploaded

TechTAC® CFD Report Summary: A Comparison of Two Types of Tubing Anchor Catchers
TechTAC® CFD Report Summary: A Comparison of Two Types of Tubing Anchor CatchersTechTAC® CFD Report Summary: A Comparison of Two Types of Tubing Anchor Catchers
TechTAC® CFD Report Summary: A Comparison of Two Types of Tubing Anchor Catcherssdickerson1
 
NO1 Certified Black Magic Specialist Expert Amil baba in Uae Dubai Abu Dhabi ...
NO1 Certified Black Magic Specialist Expert Amil baba in Uae Dubai Abu Dhabi ...NO1 Certified Black Magic Specialist Expert Amil baba in Uae Dubai Abu Dhabi ...
NO1 Certified Black Magic Specialist Expert Amil baba in Uae Dubai Abu Dhabi ...Amil Baba Dawood bangali
 
Concrete Mix Design - IS 10262-2019 - .pptx
Concrete Mix Design - IS 10262-2019 - .pptxConcrete Mix Design - IS 10262-2019 - .pptx
Concrete Mix Design - IS 10262-2019 - .pptxKartikeyaDwivedi3
 
welding defects observed during the welding
welding defects observed during the weldingwelding defects observed during the welding
welding defects observed during the weldingMuhammadUzairLiaqat
 
Software and Systems Engineering Standards: Verification and Validation of Sy...
Software and Systems Engineering Standards: Verification and Validation of Sy...Software and Systems Engineering Standards: Verification and Validation of Sy...
Software and Systems Engineering Standards: Verification and Validation of Sy...VICTOR MAESTRE RAMIREZ
 
Internet of things -Arshdeep Bahga .pptx
Internet of things -Arshdeep Bahga .pptxInternet of things -Arshdeep Bahga .pptx
Internet of things -Arshdeep Bahga .pptxVelmuruganTECE
 
Risk Assessment For Installation of Drainage Pipes.pdf
Risk Assessment For Installation of Drainage Pipes.pdfRisk Assessment For Installation of Drainage Pipes.pdf
Risk Assessment For Installation of Drainage Pipes.pdfROCENODodongVILLACER
 
US Department of Education FAFSA Week of Action
US Department of Education FAFSA Week of ActionUS Department of Education FAFSA Week of Action
US Department of Education FAFSA Week of ActionMebane Rash
 
Past, Present and Future of Generative AI
Past, Present and Future of Generative AIPast, Present and Future of Generative AI
Past, Present and Future of Generative AIabhishek36461
 
Main Memory Management in Operating System
Main Memory Management in Operating SystemMain Memory Management in Operating System
Main Memory Management in Operating SystemRashmi Bhat
 
Why does (not) Kafka need fsync: Eliminating tail latency spikes caused by fsync
Why does (not) Kafka need fsync: Eliminating tail latency spikes caused by fsyncWhy does (not) Kafka need fsync: Eliminating tail latency spikes caused by fsync
Why does (not) Kafka need fsync: Eliminating tail latency spikes caused by fsyncssuser2ae721
 
home automation using Arduino by Aditya Prasad
home automation using Arduino by Aditya Prasadhome automation using Arduino by Aditya Prasad
home automation using Arduino by Aditya Prasadaditya806802
 
Gurgaon ✡️9711147426✨Call In girls Gurgaon Sector 51 escort service
Gurgaon ✡️9711147426✨Call In girls Gurgaon Sector 51 escort serviceGurgaon ✡️9711147426✨Call In girls Gurgaon Sector 51 escort service
Gurgaon ✡️9711147426✨Call In girls Gurgaon Sector 51 escort servicejennyeacort
 
Class 1 | NFPA 72 | Overview Fire Alarm System
Class 1 | NFPA 72 | Overview Fire Alarm SystemClass 1 | NFPA 72 | Overview Fire Alarm System
Class 1 | NFPA 72 | Overview Fire Alarm Systemirfanmechengr
 
Mine Environment II Lab_MI10448MI__________.pptx
Mine Environment II Lab_MI10448MI__________.pptxMine Environment II Lab_MI10448MI__________.pptx
Mine Environment II Lab_MI10448MI__________.pptxRomil Mishra
 
Energy Awareness training ppt for manufacturing process.pptx
Energy Awareness training ppt for manufacturing process.pptxEnergy Awareness training ppt for manufacturing process.pptx
Energy Awareness training ppt for manufacturing process.pptxsiddharthjain2303
 
Solving The Right Triangles PowerPoint 2.ppt
Solving The Right Triangles PowerPoint 2.pptSolving The Right Triangles PowerPoint 2.ppt
Solving The Right Triangles PowerPoint 2.pptJasonTagapanGulla
 

Recently uploaded (20)

TechTAC® CFD Report Summary: A Comparison of Two Types of Tubing Anchor Catchers
TechTAC® CFD Report Summary: A Comparison of Two Types of Tubing Anchor CatchersTechTAC® CFD Report Summary: A Comparison of Two Types of Tubing Anchor Catchers
TechTAC® CFD Report Summary: A Comparison of Two Types of Tubing Anchor Catchers
 
NO1 Certified Black Magic Specialist Expert Amil baba in Uae Dubai Abu Dhabi ...
NO1 Certified Black Magic Specialist Expert Amil baba in Uae Dubai Abu Dhabi ...NO1 Certified Black Magic Specialist Expert Amil baba in Uae Dubai Abu Dhabi ...
NO1 Certified Black Magic Specialist Expert Amil baba in Uae Dubai Abu Dhabi ...
 
Concrete Mix Design - IS 10262-2019 - .pptx
Concrete Mix Design - IS 10262-2019 - .pptxConcrete Mix Design - IS 10262-2019 - .pptx
Concrete Mix Design - IS 10262-2019 - .pptx
 
welding defects observed during the welding
welding defects observed during the weldingwelding defects observed during the welding
welding defects observed during the welding
 
Software and Systems Engineering Standards: Verification and Validation of Sy...
Software and Systems Engineering Standards: Verification and Validation of Sy...Software and Systems Engineering Standards: Verification and Validation of Sy...
Software and Systems Engineering Standards: Verification and Validation of Sy...
 
Internet of things -Arshdeep Bahga .pptx
Internet of things -Arshdeep Bahga .pptxInternet of things -Arshdeep Bahga .pptx
Internet of things -Arshdeep Bahga .pptx
 
young call girls in Green Park🔝 9953056974 🔝 escort Service
young call girls in Green Park🔝 9953056974 🔝 escort Serviceyoung call girls in Green Park🔝 9953056974 🔝 escort Service
young call girls in Green Park🔝 9953056974 🔝 escort Service
 
Risk Assessment For Installation of Drainage Pipes.pdf
Risk Assessment For Installation of Drainage Pipes.pdfRisk Assessment For Installation of Drainage Pipes.pdf
Risk Assessment For Installation of Drainage Pipes.pdf
 
US Department of Education FAFSA Week of Action
US Department of Education FAFSA Week of ActionUS Department of Education FAFSA Week of Action
US Department of Education FAFSA Week of Action
 
Past, Present and Future of Generative AI
Past, Present and Future of Generative AIPast, Present and Future of Generative AI
Past, Present and Future of Generative AI
 
Main Memory Management in Operating System
Main Memory Management in Operating SystemMain Memory Management in Operating System
Main Memory Management in Operating System
 
Why does (not) Kafka need fsync: Eliminating tail latency spikes caused by fsync
Why does (not) Kafka need fsync: Eliminating tail latency spikes caused by fsyncWhy does (not) Kafka need fsync: Eliminating tail latency spikes caused by fsync
Why does (not) Kafka need fsync: Eliminating tail latency spikes caused by fsync
 
home automation using Arduino by Aditya Prasad
home automation using Arduino by Aditya Prasadhome automation using Arduino by Aditya Prasad
home automation using Arduino by Aditya Prasad
 
Gurgaon ✡️9711147426✨Call In girls Gurgaon Sector 51 escort service
Gurgaon ✡️9711147426✨Call In girls Gurgaon Sector 51 escort serviceGurgaon ✡️9711147426✨Call In girls Gurgaon Sector 51 escort service
Gurgaon ✡️9711147426✨Call In girls Gurgaon Sector 51 escort service
 
POWER SYSTEMS-1 Complete notes examples
POWER SYSTEMS-1 Complete notes  examplesPOWER SYSTEMS-1 Complete notes  examples
POWER SYSTEMS-1 Complete notes examples
 
young call girls in Rajiv Chowk🔝 9953056974 🔝 Delhi escort Service
young call girls in Rajiv Chowk🔝 9953056974 🔝 Delhi escort Serviceyoung call girls in Rajiv Chowk🔝 9953056974 🔝 Delhi escort Service
young call girls in Rajiv Chowk🔝 9953056974 🔝 Delhi escort Service
 
Class 1 | NFPA 72 | Overview Fire Alarm System
Class 1 | NFPA 72 | Overview Fire Alarm SystemClass 1 | NFPA 72 | Overview Fire Alarm System
Class 1 | NFPA 72 | Overview Fire Alarm System
 
Mine Environment II Lab_MI10448MI__________.pptx
Mine Environment II Lab_MI10448MI__________.pptxMine Environment II Lab_MI10448MI__________.pptx
Mine Environment II Lab_MI10448MI__________.pptx
 
Energy Awareness training ppt for manufacturing process.pptx
Energy Awareness training ppt for manufacturing process.pptxEnergy Awareness training ppt for manufacturing process.pptx
Energy Awareness training ppt for manufacturing process.pptx
 
Solving The Right Triangles PowerPoint 2.ppt
Solving The Right Triangles PowerPoint 2.pptSolving The Right Triangles PowerPoint 2.ppt
Solving The Right Triangles PowerPoint 2.ppt
 

Embedded linux system development (slides)

  • 1. Embedded Linux system development Embedded Linux system development Free Electrons ©Copyright 2004-2014, Free Electrons. Creative Commons BY-SA 3.0 license. Latest update: October 20, 2014. Document updates and sources: http://free-electrons.com/doc/training/embedded-linux Corrections, suggestions, contributions and translations are welcome! Embedded Linux Developers Free Electrons Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 1/526
  • 2. Rights to copy © Copyright 2004-2014, Free Electrons License: Creative Commons Attribution - Share Alike 3.0 http://creativecommons.org/licenses/by-sa/3.0/legalcode You are free: I to copy, distribute, display, and perform the work I to make derivative works I to make commercial use of the work Under the following conditions: I Attribution. You must give the original author credit. I Share Alike. If you alter, transform, or build upon this work, you may distribute the resulting work only under a license identical to this one. I For any reuse or distribution, you must make clear to others the license terms of this work. I 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 aected by the above. Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 2/526
  • 3. Electronic copies of these documents I Electronic copies of your particular version of the materials are available on: http://free-electrons.com/doc/training/embedded-linux I Open the corresponding documents and use them throughout the course to look for explanations given earlier by the instructor. I You will need these electronic versions because we neither print any index nor any table of contents (quite high environmental cost for little added value) I For future reference, see the
  • 4. rst slide to see where document updates will be available. Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 3/526
  • 5. Hyperlinks in the document There are many hyperlinks in the document I Regular hyperlinks: http://kernel.org/ I Kernel documentation links: Documentation/kmemcheck.txt I Links to kernel source
  • 6. les and directories: drivers/input include/linux/fb.h I Links to the declarations, de
  • 7. nitions and instances of kernel symbols (functions, types, data, structures): platform_get_irq() GFP_KERNEL struct file_operations Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 4/526
  • 8. Free Electrons at a glance I Engineering company created in 2004 (not a training company!) I Locations: Orange, Toulouse, Lyon (France) I Serving customers all around the world See http://free-electrons.com/company/customers/ I Head count: 9 Only Free Software enthusiasts! I Focus: Embedded Linux, Linux kernel, Android Free Software / Open Source for embedded and real-time systems. I Activities: development, training, consulting, technical support. I Added value: get the best of the user and development community and the resources it oers. Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 5/526
  • 9. Free Electrons on-line resources I All our training materials: http://free-electrons.com/docs/ I Technical blog: http://free-electrons.com/blog/ I Quarterly newsletter: http://lists.free-electrons. com/mailman/listinfo/newsletter I News and discussions (Google +): https://plus.google.com/+FreeElectronsDevelopers I News and discussions (LinkedIn): http://linkedin.com/groups/Free-Electrons-4501089 I Quick news (Twitter): http://twitter.com/free_electrons I Linux Cross Reference - browse Linux kernel sources on-line: http://lxr.free-electrons.com Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 6/526
  • 10. Mailing lists for session participants If you participated to a course taught by Free Electrons, you can subscribe to our mailing lists dedicated to our training customers: I To ask questions about the topics covered by the courses, and to get a
  • 11. rst level of technical support for issues that your are facing in real life or with your own hardware. I To share your experience with other people having taken the same course and done the same practical labs. I To share further comments and suggestions about course contents. I To get news about important updates to the course materials. See http://free-electrons.com/training/mailing-lists A simple way to register:
  • 12. ll the form on http://j.mp/1r1HhkZ Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 7/526
  • 13. Generic course information Generic course information Free Electrons ©Copyright 2004-2014, Free Electrons. Creative Commons BY-SA 3.0 license. Corrections, suggestions, contributions and translations are welcome! Embedded Linux Developers Free Electrons Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 8/526
  • 14. Hardware used in this training session Using Atmel SAMA5D3 Xplained boards in all practical labs I SAMA5D36 (Cortex A5) CPU from Atmel I USB powered! I 256 MB DDR2 RAM, 256 MB NAND ash I 2 Ethernet ports (Gigabit + 100 Mbit) I 2 USB 2.0 host, 1 USB device I 1 MMC/SD slot I 3.3 V serial port (like Beaglebone Black) I Misc: Arduino R3-compatible header, JTAG, buttons, LEDs I Currently sold at 69 EUR by Mouser (V.A.T. not included) Board and CPU documentation, design
  • 15. les, software: http://www.atmel.com/sama5d3xplained Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 9/526
  • 16. Participate! During the lectures... I Don't hesitate to ask questions. Other people in the audience may have similar questions too. I This helps the trainer to detect any explanation that wasn't clear or detailed enough. I Don't hesitate to share your experience, for example to compare Linux / Android with other operating systems used in your company. I Your point of view is most valuable, because it can be similar to your colleagues' and dierent from the trainer's. I Your participation can make our session more interactive and make the topics easier to learn. Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 10/526
  • 17. Practical lab guidelines During practical labs... I We cannot support more than 8 workstations at once (each with its board and equipment). Having more would make the whole class progress slower, compromising the coverage of the whole training agenda (exception for public sessions: up to 10 people). I So, if you are more than 8 participants, please form up to 8 working groups. I Open the electronic copy of your lecture materials, and use it throughout the practical labs to
  • 18. nd the slides you need again. I Don't copy and paste from the PDF slides. The slides contain UTF-8 characters that look the same as ASCII ones, but won't be understood by shells or compilers. Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 11/526
  • 19. Cooperate! As in the Free Software and Open Source community, cooperation during practical labs is valuable in this training session: I If you complete your labs before other people, don't hesitate to help other people and investigate the issues they face. The faster we progress as a group, the more time we have to explore extra topics. I Explain what you understood to other participants when needed. It also helps to consolidate your knowledge. I Don't hesitate to report potential bugs to your instructor. I Don't hesitate to look for solutions on the Internet as well. Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 12/526
  • 20. Command memento sheet I This memento sheet gives command examples for the most typical needs (looking for
  • 21. les, extracting a tar archive...) I It saves us 1 day of UNIX / Linux command line training. I Our best tip: in the command line shell, always hit the Tab key to complete command names and
  • 22. le paths. This avoids 95% of typing mistakes. I Get an electronic copy on http://free-electrons.com/ doc/training/embedded-linux/ command_memento.pdf Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 13/526
  • 23. vi basic commands I The vi editor is very useful to make quick changes to
  • 24. les in an embedded target. I Though not very user friendly at
  • 25. rst, vi is very powerful and its main 15 commands are easy to learn and are sucient for 99% of everyone's needs! I Get an electronic copy on http://free-electrons.com/ doc/training/embedded-linux/ vi_memento.pdf I You can also take the quick tutorial by running vimtutor. This is a worthy investment! Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 14/526
  • 26. Introduction to Embedded Linux Introduction to Embedded Linux Free Electrons ©Copyright 2004-2014, Free Electrons. Creative Commons BY-SA 3.0 license. Corrections, suggestions, contributions and translations are welcome! Embedded Linux Developers Free Electrons Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 15/526
  • 27. Birth of free software I 1983, Richard Stallman, GNU project and the free software concept. Beginning of the development of gcc, gdb, glibc and other important tools I 1991, Linus Torvalds, Linux kernel project, a Unix-like operating system kernel. Together with GNU software and many other open-source components: a completely free operating system, GNU/Linux I 1995, Linux is more and more popular on server systems I 2000, Linux is more and more popular on embedded systems I 2008, Linux is more and more popular on mobile devices I 2010, Linux is more and more popular on phones Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 16/526
  • 28. Free software? I A program is considered free when its license oers to all its users the following four freedoms I Freedom to run the software for any purpose I Freedom to study the software and to change it I Freedom to redistribute copies I Freedom to distribute copies of modi
  • 29. ed versions I These freedoms are granted for both commercial and non-commercial use I They imply the availability of source code, software can be modi
  • 30. ed and distributed to customers I Good match for embedded systems! Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 17/526
  • 31. What is embedded Linux? Embedded Linux is the usage of the Linux kernel and various open-source components in embedded systems Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 18/526
  • 32. Introduction to Embedded Linux Advantages of Linux and open-source for embedded systems Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 19/526
  • 33. Re-using components I The key advantage of Linux and open-source in embedded systems is the ability to re-use components I The open-source ecosystem already provides many components for standard features, from hardware support to network protocols, going through multimedia, graphic, cryptographic libraries, etc. I As soon as a hardware device, or a protocol, or a feature is wide-spread enough, high chance of having open-source components that support it. I Allows to quickly design and develop complicated products, based on existing components. I No-one should re-develop yet another operating system kernel, TCP/IP stack, USB stack or another graphical toolkit library. I Allows to focus on the added value of your product. Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 20/526
  • 34. Low cost I Free software can be duplicated on as many devices as you want, free of charge. I If your embedded system uses only free software, you can reduce the cost of software licenses to zero. Even the development tools are free, unless you choose a commercial embedded Linux edition. I Allows to have a higher budget for the hardware or to increase the company's skills and knowledge Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 21/526
  • 35. Full control I With open-source, you have the source code for all components in your system I Allows unlimited modi
  • 36. cations, changes, tuning, debugging, optimization, for an unlimited period of time I Without lock-in or dependency from a third-party vendor I To be true, non open-source components must be avoided when the system is designed and developed I Allows to have full control over the software part of your system Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 22/526
  • 37. Quality I Many open-source components are widely used, on millions of systems I Usually higher quality than what an in-house development can produce, or even proprietary vendors I Of course, not all open-source components are of good quality, but most of the widely-used ones are. I Allows to design your system with high-quality components at the foundations Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 23/526
  • 38. Eases testing of new features I Open-source being freely available, it is easy to get a piece of software and evaluate it I Allows to easily study several options while making a choice I Much easier than purchasing and demonstration procedures needed with most proprietary products I Allows to easily explore new possibilities and solutions Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 24/526
  • 39. Community support I Open-source software components are developed by communities of developers and users I This community can provide a high-quality support: you can directly contact the main developers of the component you are using. The likelyhood of getting an answer doesn't depend what company you work for. I Often better than traditional support, but one needs to understand how the community works to properly use the community support possibilities I Allows to speed up the resolution of problems when developing your system Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 25/526
  • 40. Taking part into the community I Possibility of taking part into the development community of some of the components used in the embedded systems: bug reporting, test of new versions or features, patches that
  • 41. x bugs or add new features, etc. I Most of the time the open-source components are not the core value of the product: it's the interest of everybody to contribute back. I For the engineers: a very motivating way of being recognized outside the company, communication with others in the same
  • 42. eld, opening of new possibilities, etc. I For the managers: motivation factor for engineers, allows the company to be recognized in the open-source community and therefore get support more easily and be more attractive to open-source developers Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 26/526
  • 43. Introduction to Embedded Linux A few examples of embedded systems running Linux Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 27/526
  • 44. Personal routers Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 28/526
  • 45. Television Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 29/526
  • 46. Point of sale terminal Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 30/526
  • 47. Laser cutting machine Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 31/526
  • 48. Viticulture machine Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 32/526
  • 49. Introduction to Embedded Linux Embedded hardware for Linux systems Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 33/526
  • 50. Processor and architecture (1) I The Linux kernel and most other architecture-dependent component support a wide range of 32 and 64 bits architectures I x86 and x86-64, as found on PC platforms, but also embedded systems (multimedia, industrial) I ARM, with hundreds of dierent SoC (multimedia, industrial) I PowerPC (mainly real-time, industrial applications) I MIPS (mainly networking applications) I SuperH (mainly set top box and multimedia applications) I Black
  • 51. n (DSP architecture) I Microblaze (soft-core for Xilinx FPGA) I Cold
  • 52. re, SCore, Tile, Xtensa, Cris, FRV, AVR32, M32R Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 34/526
  • 53. Processor and architecture (2) I Both MMU and no-MMU architectures are supported, even though no-MMU architectures have a few limitations. I Linux is not designed for small microcontrollers. I Besides the toolchain, the bootloader and the kernel, all other components are generally architecture-independent Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 35/526
  • 54. RAM and storage I RAM: a very basic Linux system can work within 8 MB of RAM, but a more realistic system will usually require at least 32 MB of RAM. Depends on the type and size of applications. I Storage: a very basic Linux system can work within 4 MB of storage, but usually more is needed. I Flash storage is supported, both NAND and NOR ash, with speci
  • 55. c
  • 56. lesystems I Block storage including SD/MMC cards and eMMC is supported I Not necessarily interesting to be too restrictive on the amount of RAM/storage: having exibility at this level allows to re-use as many existing components as possible. Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 36/526
  • 57. Communication I The Linux kernel has support for many common communication buses I I2C I SPI I CAN I 1-wire I SDIO I USB I And also extensive networking support I Ethernet, Wi
  • 58. , Bluetooth, CAN, etc. I IPv4, IPv6, TCP, UDP, SCTP, DCCP, etc. I Firewalling, advanced routing, multicast Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 37/526
  • 59. Types of hardware platforms I Evaluation platforms from the SoC vendor. Usually expensive, but many peripherals are built-in. Generally unsuitable for real products. I Component on Module, a small board with only CPU/RAM/ ash and a few other core components, with connectors to access all other peripherals. Can be used to build end products for small to medium quantities. I Community development platforms, a new trend to make a particular SoC popular and easily available. These are ready-to-use and low cost, but usually have less peripherals than evaluation platforms. To some extent, can also be used for real products. I Custom platform. Schematics for evaluation boards or development platforms are more and more commonly freely available, making it easier to develop custom platforms. Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 38/526
  • 60. Criteria for choosing the hardware I Make sure the hardware you plan to use is already supported by the Linux kernel, and has an open-source bootloader, especially the SoC you're targeting. I Having support in the ocial versions of the projects (kernel, bootloader) is a lot better: quality is better, and new versions are available. I Some SoC vendors and/or board vendors do not contribute their changes back to the mainline Linux kernel. Ask them to do so, or use another product if you can. A good measurement is to see the delta between their kernel and the ocial one. I Between properly supported hardware in the ocial Linux kernel and poorly-supported hardware, there will be huge dierences in development time and cost. Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 39/526
  • 61. Introduction to Embedded Linux Embedded Linux system architecture Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 40/526
  • 62. Global architecture Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 41/526
  • 63. Software components I Cross-compilation toolchain I Compiler that runs on the development machine, but generates code for the target I Bootloader I Started by the hardware, responsible for basic initialization, loading and executing the kernel I Linux Kernel I Contains the process and memory management, network stack, device drivers and provides services to user space applications I C library I The interface between the kernel and the user space applications I Libraries and applications I Third-party or in-house Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 42/526
  • 64. Embedded Linux work Several distinct tasks are needed when deploying embedded Linux in a product: I Board Support Package development I A BSP contains a bootloader and kernel with the suitable device drivers for the targeted hardware I Purpose of our Kernel Development training I System integration I Integrate all the components, bootloader, kernel, third-party libraries and applications and in-house applications into a working system I Purpose of this training I Development of applications I Normal Linux applications, but using speci
  • 65. cally chosen libraries Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 43/526
  • 66. Embedded Linux development environment Embedded Linux development environment Free Electrons ©Copyright 2004-2014, Free Electrons. Creative Commons BY-SA 3.0 license. Corrections, suggestions, contributions and translations are welcome! Embedded Linux Developers Free Electrons Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 44/526
  • 67. Embedded Linux solutions I Two ways to switch to embedded Linux I Use solutions provided and supported by vendors like MontaVista, Wind River or TimeSys. These solutions come with their own development tools and environment. They use a mix of open-source components and proprietary tools. I Use community solutions. They are completely open, supported by the community. I In Free Electrons training sessions, we do not promote a particular vendor, and therefore use community solutions I However, knowing the concepts, switching to vendor solutions will be easy Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 45/526
  • 68. OS for Linux development I We strongly recommend to use Linux as the desktop operating system to embedded Linux developers, for multiple reasons. I All community tools are developed and designed to run on Linux. Trying to use them on other operating systems (Windows, Mac OS X) will lead to trouble, and their usage on these systems is generally not supported by community developers. I As Linux also runs on the embedded device, all the knowledge gained from using Linux on the desktop will apply similarly to the embedded device. Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 46/526
  • 69. Desktop Linux distribution I Any good and suciently recent Linux desktop distribution can be used for the development workstation I Ubuntu, Debian, Fedora, openSUSE, Red Hat, etc. I We have chosen Ubuntu, as it is a widely used and easy to use desktop Linux distribution I The Ubuntu setup on the training laptops has intentionally been left untouched after the normal installation process. Learning embedded Linux is also about learning the tools needed on the development workstation! Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 47/526
  • 70. Linux root and non-root users I Linux is a multi-user operating system I The root user is the administrator, and it can do privileged operations such as: mounting
  • 72. guring the network, creating device
  • 73. les, changing the system con
  • 74. guration, installing or removing software I All other users are unprivileged, and cannot perform these administrator-level operations I On an Ubuntu system, it is not possible to log in as root, only as a normal user. I The system has been con
  • 75. gured so that the user account created
  • 76. rst is allowed to run privileged operations through a program called sudo. I Example: sudo mount /dev/sda2 /mnt/disk Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 48/526
  • 77. Software packages I The distribution mechanism for software in GNU/Linux is dierent from the one in Windows I Linux distributions provides a central and coherent way of installing, updating and removing applications and libraries: packages I Packages contains the application or library
  • 78. les, and associated meta-information, such as the version and the dependencies I .deb on Debian and Ubuntu, .rpm on Red Hat, Fedora, openSUSE I Packages are stored in repositories, usually on HTTP or FTP servers I You should only use packages from ocial repositories for your distribution, unless strictly required. Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 49/526
  • 79. Managing software packages (1) Instructions for Debian based GNU/Linux systems (Debian, Ubuntu...) I Package repositories are speci
  • 80. ed in /etc/apt/sources.list I To update package repository lists: sudo apt-get update I To
  • 81. nd the name of a package to install, the best is to use the search engine on http://packages.debian.org or on http://packages.ubuntu.com. You may also use: apt-cache search keyword Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 50/526
  • 82. Managing software packages (2) I To install a given package: sudo apt-get install package I To remove a given package: sudo apt-get remove package I To install all available package updates: sudo apt-get dist-upgrade I Get information about a package: apt-cache show package I Graphical interfaces I Synaptic for GNOME I KPackageKit for KDE Further details on package management: http://www.debian.org/doc/manuals/apt-howto/ Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 51/526
  • 83. Host vs. target I When doing embedded development, there is always a split between I The host, the development workstation, which is typically a powerful PC I The target, which is the embedded system under development I They are connected by various means: almost always a serial line for debugging purposes, frequently an Ethernet connection, sometimes a JTAG interface for low-level debugging Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 52/526
  • 84. Serial line communication program I An essential tool for embedded development is a serial line communication program, like HyperTerminal in Windows. I There are multiple options available in Linux: Minicom, Picocom, Gtkterm, Putty, etc. I In this training session, we recommend using the simplest of them: picocom I Installation with sudo apt-get install picocom I Run with picocom -b BAUD_RATE /dev/SERIAL_DEVICE I Exit with Control-A Control-X I SERIAL_DEVICE is typically I ttyUSBx for USB to serial converters I ttySx for real serial ports Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 53/526
  • 85. Command line tips I Using the command line is mandatory for many operations needed for embedded Linux development I It is a very powerful way of interacting with the system, with which you can save a lot of time. I Some useful tips I You can use several tabs in the Gnome Terminal I Remember that you can use relative paths (for example: ../../linux) in addition to absolute paths (for example: /home/user) I In a shell, hit [Control] [r], then a keyword, will search through the command history. Hit [Control] [r] again to search backwards in the history I You can copy/paste paths directly from the
  • 86. le manager to the terminal by drag-and-drop. Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 54/526
  • 87. Practical lab - Training Setup Prepare your lab environment I Download the lab archive I Enforce correct permissions Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 55/526
  • 88. Cross-compiling toolchains Cross-compiling toolchains Free Electrons ©Copyright 2004-2014, Free Electrons. Creative Commons BY-SA 3.0 license. Corrections, suggestions, contributions and translations are welcome! Embedded Linux Developers Free Electrons Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 56/526
  • 90. nition and Components Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 57/526
  • 91. De
  • 92. nition (1) I The usual development tools available on a GNU/Linux workstation is a native toolchain I This toolchain runs on your workstation and generates code for your workstation, usually x86 I For embedded system development, it is usually impossible or not interesting to use a native toolchain I The target is too restricted in terms of storage and/or memory I The target is very slow compared to your workstation I You may not want to install all development tools on your target. I Therefore, cross-compiling toolchains are generally used. They run on your workstation but generate code for your target. Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 58/526
  • 93. De
  • 94. nition (2) Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 59/526
  • 95. Machines in build procedures I Three machines must be distinguished when discussing toolchain creation I The build machine, where the toolchain is built. I The host machine, where the toolchain will be executed. I The target machine, where the binaries created by the toolchain are executed. I Four common build types are possible for toolchains Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 60/526
  • 96. Dierent toolchain build procedures Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 61/526
  • 97. Components Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 62/526
  • 98. Binutils I Binutils is a set of tools to generate and manipulate binaries for a given CPU architecture I as, the assembler, that generates binary code from assembler source code I ld, the linker I ar, ranlib, to generate .a archives, used for libraries I objdump, readelf, size, nm, strings, to inspect binaries. Very useful analysis tools! I strip, to strip useless parts of binaries in order to reduce their size I http://www.gnu.org/software/binutils/ I GPL license Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 63/526
  • 99. Kernel headers (1) I The C library and compiled programs needs to interact with the kernel I Available system calls and their numbers I Constant de
  • 100. nitions I Data structures, etc. I Therefore, compiling the C library requires kernel headers, and many applications also require them. I Available in linux/... and asm/... and a few other directories corresponding to the ones visible in include/ in the kernel sources Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 64/526
  • 101. Kernel headers (2) I System call numbers, in asm/unistd.h #define __NR_exit 1 #define __NR_fork 2 #define __NR_read 3 I Constant de
  • 102. nitions, here in asm-generic/fcntl.h, included from asm/fcntl.h, included from linux/fcntl.h #define O_RDWR 00000002 I Data structures, here in asm/stat.h struct stat { unsigned long st_dev; unsigned long st_ino; [...] }; Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 65/526
  • 103. Kernel headers (3) I The kernel to user space ABI is backward compatible I Binaries generated with a toolchain using kernel headers older than the running kernel will work without problem, but won't be able to use the new system calls, data structures, etc. I Binaries generated with a toolchain using kernel headers newer than the running kernel might work on if they don't use the recent features, otherwise they will break I Using the latest kernel headers is not necessary, unless access to the new kernel features is needed I The kernel headers are extracted from the kernel sources using the headers_install kernel Make
  • 104. le target. Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 66/526
  • 105. GCC I GNU Compiler Collection, the famous free software compiler I Can compile C, C++, Ada, Fortran, Java, Objective-C, Objective-C++, and generate code for a large number of CPU architectures, including ARM, AVR, Black
  • 106. n, CRIS, FRV, M32, MIPS, MN10300, PowerPC, SH, v850, i386, x86 64, IA64, Xtensa, etc. I http://gcc.gnu.org/ I Available under the GPL license, libraries under the LGPL. Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 67/526
  • 107. C library I The C library is an essential component of a Linux system I Interface between the applications and the kernel I Provides the well-known standard C API to ease application development I Several C libraries are available: glibc, uClibc, eglibc, dietlibc, newlib, etc. I The choice of the C library must be made at the time of the cross-compiling toolchain generation, as the GCC compiler is compiled against a speci
  • 108. c C library. Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 68/526
  • 109. Cross-compiling toolchains C Libraries Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 69/526
  • 110. glibc I License: LGPL I C library from the GNU project I Designed for performance, standards compliance and portability I Found on all GNU / Linux host systems I Of course, actively maintained I Quite big for small embedded systems: approx 2.5 MB on ARM (version 2.9 - libc: 1.5 MB, libm: 750 KB) I http://www.gnu.org/software/libc/ Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 70/526
  • 111. uClibc I License: LGPL I Lightweight C library for small embedded systems I High con
  • 112. gurability: many features can be enabled or disabled through a menucon
  • 113. g interface I Works only with Linux/uClinux, works on most embedded architectures I No guaranteed binary compatibility. May need to recompile applications when the library con
  • 114. guration changes. I Focus on size rather than performance I Small compile time I http://www.uclibc.org/ Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 71/526
  • 115. uClibc (2) I Most of the applications compile with uClibc. This applies to all applications used in embedded systems. I Size (arm): 4 times smaller than glibc! I uClibc 0.9.30.1: approx. 600 KB (libuClibc: 460 KB, libm: 96KB) I glibc 2.9: approx 2.5 MB I Some features not available or limited: priority-inheritance mutexes, NPTL support is very new,
  • 116. xed Name Service Switch functionality, etc. I Used on a large number of production embedded products, including consumer electronic devices I Supported by all commercial embedded Linux providers (proof of maturity). I Warning: though some development is still happening, the maintainers have stopped making releases since May 2012. The project is in trouble. Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 72/526
  • 117. eglibc I Embedded glibc, LGPL license too I Was a variant of glibc, better adapted to the needs of embedded systems, because of past disagreement with glibc maintainers. I eglibc's goals included reduced footprint, con
  • 118. gurable components, better support for cross-compilation and cross-testing. I Could be built without support for NIS, locales, IPv6, and many other features. I Fortunately for eglibc, the glibc maintainer has changed and its features are now included in glibc. Version 2.19 (Feb. 2014) was the last release. I http: //en.wikipedia.org/wiki/Embedded_GLIBC Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 73/526
  • 119. Honey, I shrunk the programs! I Executable size comparison on ARM, tested with eglibc 2.15 and uClibc 0.9.33.2 I Plain hello world program (stripped): helloworld static dynamic uClibc 18kB 2.5kB uClibc with Thumb-2 14kB 2.4kB eglibc with Thumb-2 361kB 2.7kB I Busybox (stripped): busybox static dynamic uClibc 750kB 603kB uClibc with Thumb-2 533kB 439kB eglibc with Thumb-2 934kB 444kB Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 74/526
  • 120. Other smaller C libraries I Several other smaller C libraries have been developed, but none of them have the goal of allowing the compilation of large existing applications I They need specially written programs and applications I Choices: I Dietlibc, http://www.fefe.de/dietlibc/. Approximately 70 KB. I Newlib, http://sourceware.org/newlib/ I Klibc, http://www.kernel.org/pub/linux/libs/klibc/, designed for use in an initramfs or initrd at boot time. Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 75/526
  • 121. Cross-compiling toolchains Toolchain Options Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 76/526
  • 122. ABI I When building a toolchain, the ABI used to generate binaries needs to be de
  • 123. ned I ABI, for Application Binary Interface, de
  • 124. nes the calling conventions (how function arguments are passed, how the return value is passed, how system calls are made) and the organization of structures (alignment, etc.) I All binaries in a system must be compiled with the same ABI, and the kernel must understand this ABI. I On ARM, two main ABIs: OABI and EABI I Nowadays everybody uses EABI I On MIPS, several ABIs: o32, o64, n32, n64 I http://en.wikipedia.org/wiki/Application_Binary_ Interface Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 77/526
  • 125. Floating point support I Some processors have a oating point unit, some others do not. I For example, many ARMv4 and ARMv5 CPUs do not have a oating point unit. Since ARMv7, a VFP unit is mandatory. I For processors having a oating point unit, the toolchain should generate hard oat code, in order to use the oating point instructions directly I For processors without a oating point unit, two solutions I Generate hard oat code and rely on the kernel to emulate the oating point instructions. This is very slow. I Generate soft oat code, so that instead of generating oating point instructions, calls to a user space library are generated I Decision taken at toolchain con
  • 126. guration time I Also possible to con
  • 127. gure which oating point unit should be used Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 78/526
  • 128. CPU optimization ags I A set of cross-compiling tools is speci
  • 129. c to a CPU architecture (ARM, x86, MIPS, PowerPC) I However, with the -march=, -mcpu=, -mtune= options, one can select more precisely the target CPU type I For example, -march=armv7 -mcpu=cortex-a8 I At the toolchain compilation time, values can be chosen. They are used: I As the default values for the cross-compiling tools, when no other -march, -mcpu, -mtune options are passed I To compile the C library I Even if the C library has been compiled for armv5t, it doesn't prevent from compiling other programs for armv7 Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 79/526
  • 130. Cross-compiling toolchains Obtaining a Toolchain Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 80/526
  • 131. Building a toolchain manually Building a cross-compiling toolchain by yourself is a dicult and painful task! Can take days or weeks! I Lots of details to learn: many components to build, complicated con
  • 132. guration I Lots of decisions to make (such as C library version, ABI, oating point mechanisms, component versions) I Need kernel headers and C library sources I Need to be familiar with current gcc issues and patches on your platform I Useful to be familiar with building and con
  • 133. guring tools I See the Crosstool-NG docs/ directory for details on how toolchains are built. Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 81/526
  • 134. Get a pre-compiled toolchain I Solution that many people choose I Advantage: it is the simplest and most convenient solution I Drawback: you can't
  • 135. ne tune the toolchain to your needs I Determine what toolchain you need: CPU, endianism, C library, component versions, ABI, soft oat or hard oat, etc. I Check whether the available toolchains match your requirements. I Possible choices I Sourcery CodeBench toolchains I Linaro toolchains I More references at http://elinux.org/Toolchains Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 82/526
  • 136. Sourcery CodeBench I CodeSourcery was a company with an extended expertise on free software toolchains: gcc, gdb, binutils and glibc. It has been bought by Mentor Graphics, which continues to provide similar services and products I They sell toolchains with support, but they also provide a Lite version, which is free and usable for commercial products I They have toolchains available for I ARM I MIPS I PowerPC I SuperH I x86 I Be sure to use the GNU/Linux versions. The EABI versions are for bare-metal development (no operating system) Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 83/526
  • 137. Linaro toolchains I Linaro contributes to improving mainline gcc on ARM, in particular by hiring CodeSourcery developers. I For people who can't wait for the next releases of gcc, Linaro releases modi
  • 138. ed sources of stable releases of gcc, with these optimizations for ARM (mainly for recent Cortex A CPUs). I As any gcc release, these sources can be used by build tools to build their own binary toolchains (Buildroot, OpenEmbedded...) This allows to support glibc, uClibc and eglibc. I https://wiki.linaro.org/WorkingGroups/ToolChain I Binary packages are available for Ubuntu users, https://launchpad.net/~linaro-maintainers/+ archive/toolchain Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 84/526
  • 139. Installing and using a pre-compiled toolchain I Follow the installation procedure proposed by the vendor I Usually, it is simply a matter of extracting a tarball wherever you want. I Then, add the path to toolchain binaries in your PATH: export PATH=/path/to/toolchain/bin/:$PATH I Finally, compile your applications PREFIX-gcc -o foobar foobar.c I PREFIX depends on the toolchain con
  • 140. guration, and allows to distinguish cross-compilation tools from native compilation utilities Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 85/526
  • 141. Toolchain building utilities Another solution is to use utilities that automate the process of building the toolchain I Same advantage as the pre-compiled toolchains: you don't need to mess up with all the details of the build process I But also oers more exibility in terms of toolchain con
  • 142. guration, component version selection, etc. I They also usually contain several patches that
  • 143. x known issues with the dierent components on some architectures I Multiple tools with identical principle: shell scripts or Make
  • 144. le that automatically fetch, extract, con
  • 145. gure, compile and install the dierent components Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 86/526
  • 146. Toolchain building utilities (2) I Crosstool-ng I Rewrite of the older Crosstool, with a menucon
  • 148. guration system I Feature-full: supports uClibc, glibc, eglibc, hard and soft oat, many architectures I Actively maintained I http://crosstool-ng.org/ Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 87/526
  • 150. lesystem build systems also allow the construction of a cross-compiling toolchain I Buildroot I Make
  • 151. le-based, has a Crosstool-NG back-end, maintained by the community I http://www.buildroot.net I PTXdist I Make
  • 152. le-based, uClibc or glibc, maintained mainly by Pengutronix I http://pengutronix.de/software/ptxdist/ I OpenEmbedded / Yocto I A featureful, but more complicated build system I http://www.openembedded.org/ I https://www.yoctoproject.org/ Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 88/526
  • 153. Crosstool-NG: installation and usage I Installation of Crosstool-NG can be done system-wide, or just locally in the source directory. For local installation: ./configure --enable-local make make install I Some sample con
  • 154. gurations for various architectures are available in samples, they can be listed using ./ct-ng list-samples I To load a sample con
  • 155. guration ./ct-ng sample-name I To adjust the con
  • 156. guration ./ct-ng menuconfig I To build the toolchain ./ct-ng build Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 89/526
  • 157. Toolchain contents I The cross compilation tool binaries, in bin/ I This directory can be added to your PATH to ease usage of the toolchain I One or several sysroot, each containing I The C library and related libraries, compiled for the target I The C library headers and kernel headers I There is one sysroot for each variant: toolchains can be multilib if they have several copies of the C library for dierent con
  • 158. gurations (for example: ARMv4T, ARMv5T, etc.) I CodeSourcery ARM toolchain are multilib, the sysroots are in arm-none-linux-gnueabi/libc/, arm-none-linux-gnueabi/libc/armv4t/, arm-none-linux-gnueabi/libc/thumb2 I Crosstool-NG toolchains can be multilib too (still experimental), otherwise the sysroot is in arm-unknown-linux-uclibcgnueabi/sysroot Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 90/526
  • 159. Practical lab - Using Crosstool-NG Time to build your toolchain I Con
  • 160. gure Crosstool-NG I Run it to build your own cross-compiling toolchain Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 91/526
  • 161. Bootloaders Bootloaders Free Electrons ©Copyright 2004-2014, Free Electrons. Creative Commons BY-SA 3.0 license. Corrections, suggestions, contributions and translations are welcome! Embedded Linux Developers Free Electrons Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 92/526
  • 162. Bootloaders Boot Sequence Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 93/526
  • 163. Bootloaders I The bootloader is a piece of code responsible for I Basic hardware initialization I Loading of an application binary, usually an operating system kernel, from ash storage, from the network, or from another type of non-volatile storage. I Possibly decompression of the application binary I Execution of the application I Besides these basic functions, most bootloaders provide a shell with various commands implementing dierent operations. I Loading of data from storage or network, memory inspection, hardware diagnostics and testing, etc. Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 94/526
  • 164. Bootloaders on x86 (1) I The x86 processors are typically bundled on a board with a non-volatile memory containing a program, the BIOS. I This program gets executed by the CPU after reset, and is responsible for basic hardware initialization and loading of a small piece of code from non-volatile storage. I This piece of code is usually the
  • 165. rst 512 bytes of a storage device I This piece of code is usually a 1st stage bootloader, which will load the full bootloader itself. I The bootloader can then oer all its features. It typically understands
  • 166. lesystem formats so that the kernel
  • 167. le can be loaded directly from a normal
  • 168. lesystem. Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 95/526
  • 169. Bootloaders on x86 (2) I GRUB, Grand Uni
  • 170. ed Bootloader, the most powerful one. http://www.gnu.org/software/grub/ I Can read many
  • 171. lesystem formats to load the kernel image and the con
  • 172. guration, provides a powerful shell with various commands, can load kernel images over the network, etc. I See our dedicated presentation for details: http://free-electrons.com/docs/grub/ I Syslinux, for network and removable media booting (USB key, CD-ROM) http://www.kernel.org/pub/linux/utils/boot/syslinux/ Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 96/526
  • 173. Booting on embedded CPUs: case 1 I When powered, the CPU starts executing code at a
  • 174. xed address I There is no other booting mechanism provided by the CPU I The hardware design must ensure that a NOR ash chip is wired so that it is accessible at the address at which the CPU starts executing instructions I The
  • 175. rst stage bootloader must be programmed at this address in the NOR I NOR is mandatory, because it allows random access, which NAND doesn't allow I Not very common anymore (unpractical, and requires NOR ash) Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 97/526
  • 176. Booting on embedded CPUs: case 2 I The CPU has an integrated boot code in ROM I BootROM on AT91 CPUs, ROM code on OMAP, etc. I Exact details are CPU-dependent I This boot code is able to load a
  • 177. rst stage bootloader from a storage device into an internal SRAM (DRAM not initialized yet) I Storage device can typically be: MMC, NAND, SPI ash, UART, etc. I The
  • 178. rst stage bootloader is I Limited in size due to hardware constraints (SRAM size) I Provided either by the CPU vendor or through community projects I This
  • 179. rst stage bootloader must initialize DRAM and other hardware devices and load a second stage bootloader into RAM Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 98/526
  • 180. Booting on ARM Atmel AT91 I RomBoot: tries to
  • 181. nd a valid bootstrap image from various storage sources, and load it into SRAM (DRAM not initialized yet). Size limited to 4 KB. No user interaction possible in standard boot mode. I AT91Bootstrap: runs from SRAM. Initializes the DRAM, the NAND or SPI controller, and loads the secondary bootloader into RAM and starts it. No user interaction possible. I U-Boot: runs from RAM. Initializes some other hardware devices (network, USB, etc.). Loads the kernel image from storage or network to RAM and starts it. Shell with commands provided. I Linux Kernel: runs from RAM. Takes over the system completely (bootloaders no longer exists). Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 99/526
  • 182. Booting on ARM TI OMAP3 I ROM Code: tries to
  • 183. nd a valid bootstrap image from various storage sources, and load it into SRAM or RAM (RAM can be initialized by ROM code through a con
  • 184. guration header). Size limited to 64 KB. No user interaction possible. I X-Loader or U-Boot: runs from SRAM. Initializes the DRAM, the NAND or MMC controller, and loads the secondary bootloader into RAM and starts it. No user interaction possible. File called MLO. I U-Boot: runs from RAM. Initializes some other hardware devices (network, USB, etc.). Loads the kernel image from storage or network to RAM and starts it. Shell with commands provided. File called u-boot.bin or u-boot.img. I Linux Kernel: runs from RAM. Takes over the system completely (bootloaders no longer exists). Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 100/526
  • 185. Booting on Marvell SoC I ROM Code: tries to
  • 186. nd a valid bootstrap image from various storage sources, and load it into RAM. The RAM con
  • 187. guration is described in a CPU-speci
  • 188. c header, prepended to the bootloader image. I U-Boot: runs from RAM. Initializes some other hardware devices (network, USB, etc.). Loads the kernel image from storage or network to RAM and starts it. Shell with commands provided. File called u-boot.kwb. I Linux Kernel: runs from RAM. Takes over the system completely (bootloaders no longer exists). Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 101/526
  • 189. Generic bootloaders for embedded CPUs I We will focus on the generic part, the main bootloader, oering the most important features. I There are several open-source generic bootloaders. Here are the most popular ones: I U-Boot, the universal bootloader by Denx The most used on ARM, also used on PPC, MIPS, x86, m68k, NIOS, etc. The de-facto standard nowadays. We will study it in detail. http://www.denx.de/wiki/U-Boot I Barebox, a new architecture-neutral bootloader, written as a successor of U-Boot. Better design, better code, active development, but doesn't yet have as much hardware support as U-Boot. http://www.barebox.org I There are also a lot of other open-source or proprietary bootloaders, often architecture-speci
  • 190. c I RedBoot, Yaboot, PMON, etc. Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 102/526
  • 191. Bootloaders The U-boot bootloader Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 103/526
  • 192. U-Boot U-Boot is a typical free software project I License: GPLv2 (same as Linux) I Freely available at http://www.denx.de/wiki/U-Boot I Documentation available at http://www.denx.de/wiki/U-Boot/Documentation I The latest development source code is available in a Git repository: http://git.denx.de/?p=u-boot.git;a=summary I Development and discussions happen around an open mailing-list http://lists.denx.de/pipermail/u-boot/ I Since the end of 2008, it follows a
  • 193. xed-interval release schedule. Every two months, a new version is released. Versions are named YYYY.MM. Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 104/526
  • 195. guration I Get the source code from the website, and uncompress it I The include/configs/ directory contains one con
  • 197. le for each supported board I It de
  • 198. nes the CPU type, the peripherals and their con
  • 199. guration, the memory mapping, the U-Boot features that should be compiled in, etc. I It is a simple .h
  • 200. le that sets C pre-processor constants. See the README
  • 201. le for the documentation of these constants. This
  • 202. le can also be adjusted to add or remove features from U-Boot (commands, etc.). I Assuming that your board is already supported by U-Boot, there should be one entry corresponding to your board in the boards.cfg
  • 203. le. Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 105/526
  • 206. le excerpt /* CPU configuration */ #define CONFIG_ARMV7 1 #define CONFIG_OMAP 1 #define CONFIG_OMAP34XX 1 #define CONFIG_OMAP3430 1 #define CONFIG_OMAP3_IGEP0020 1 [...] /* Memory configuration */ #define CONFIG_NR_DRAM_BANKS 2 #define PHYS_SDRAM_1 OMAP34XX_SDRC_CS0 #define PHYS_SDRAM_1_SIZE (32 20) #define PHYS_SDRAM_2 OMAP34XX_SDRC_CS1 [...] /* USB configuration */ #define CONFIG_MUSB_UDC 1 #define CONFIG_USB_OMAP3 1 #define CONFIG_TWL4030_USB 1 [...] /* Available commands and features */ #define CONFIG_CMD_CACHE #define CONFIG_CMD_EXT2 #define CONFIG_CMD_FAT #define CONFIG_CMD_I2C #define CONFIG_CMD_MMC #define CONFIG_CMD_NAND #define CONFIG_CMD_NET #define CONFIG_CMD_DHCP #define CONFIG_CMD_PING #define CONFIG_CMD_NFS #define CONFIG_CMD_MTDPARTS [...] Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 106/526
  • 207. Con
  • 208. guring and compiling U-Boot I U-Boot must be con
  • 209. gured before being compiled I make BOARDNAME_config I Where BOARDNAME is the name of the board, as visible in the boards.cfg
  • 210. le (
  • 211. rst column). I Make sure that the cross-compiler is available in PATH I Compile U-Boot, by specifying the cross-compiler pre
  • 212. x. Example, if your cross-compiler executable is arm-linux-gcc: make CROSS_COMPILE=arm-linux- I The main result is a u-boot.bin
  • 213. le, which is the U-Boot image. Depending on your speci
  • 214. c platform, there may be other specialized images: u-boot.img, u-boot.kwb, MLO, etc. Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 107/526
  • 215. Installing U-Boot I U-Boot must usually be installed in ash memory to be executed by the hardware. Depending on the hardware, the installation of U-Boot is done in a dierent way: I The CPU provides some kind of speci
  • 216. c boot monitor with which you can communicate through serial port or USB using a speci
  • 217. c protocol I The CPU boots
  • 218. rst on removable media (MMC) before booting from
  • 219. xed media (NAND). In this case, boot from MMC to re ash a new version I U-Boot is already installed, and can be used to ash a new version of U-Boot. However, be careful: if the new version of U-Boot doesn't work, the board is unusable I The board provides a JTAG interface, which allows to write to the ash memory remotely, without any system running on the board. It also allows to rescue a board if the bootloader doesn't work. Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 108/526
  • 220. U-boot prompt I Connect the target to the host through a serial console I Power-up the board. On the serial console, you will see something like: U-Boot 2013.04 (May 29 2013 - 10:30:21) OMAP36XX/37XX-GP ES1.2, CPU-OPP2, L3-165MHz, Max CPU Clock 1 Ghz IGEPv2 + LPDDR/NAND I2C: ready DRAM: 512 MiB NAND: 512 MiB MMC: OMAP SD/MMC: 0 Die ID #255000029ff800000168580212029011 Net: smc911x-0 U-Boot # I The U-Boot shell oers a set of commands. We will study the most important ones, see the documentation for a complete reference or the help command. Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 109/526
  • 221. Information commands Flash information (NOR and SPI ash) U-Boot flinfo DataFlash:AT45DB021 Nb pages: 1024 Page Size: 264 Size= 270336 bytes Logical address: 0xC0000000 Area 0: C0000000 to C0001FFF (RO) Bootstrap Area 1: C0002000 to C0003FFF Environment Area 2: C0004000 to C0041FFF (RO) U-Boot NAND ash information U-Boot nand info Device 0: nand0, sector size 128 KiB Page size 2048 b OOB size 64 b Erase size 131072 b Version details U-Boot version U-Boot 2013.04 (May 29 2013 - 10:30:21) Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 110/526
  • 222. Important commands (1) I The exact set of commands depends on the U-Boot con
  • 223. guration I help and help command I boot, runs the default boot command, stored in bootcmd I bootm address, starts a kernel image loaded at the given address in RAM I ext2load, loads a
  • 224. le from an ext2
  • 225. lesystem to RAM I And also ext2ls to list
  • 226. les, ext2info for information I fatload, loads a
  • 227. le from a FAT
  • 228. lesystem to RAM I And also fatls and fatinfo I tftp, loads a
  • 229. le from the network to RAM I ping, to test the network Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 111/526
  • 230. Important commands (2) I loadb, loads, loady, load a
  • 231. le from the serial line to RAM I usb, to initialize and control the USB subsystem, mainly used for USB storage devices such as USB keys I mmc, to initialize and control the MMC subsystem, used for SD and microSD cards I nand, to erase, read and write contents to NAND ash I erase, protect, cp, to erase, modify protection and write to NOR ash I md, displays memory contents. Can be useful to check the contents loaded in memory, or to look at hardware registers. I mm, modi
  • 232. es memory contents. Can be useful to modify directly hardware registers, for testing purposes. Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 112/526
  • 233. Environment variables commands (1) I U-Boot can be con
  • 234. gured through environment variables, which aect the behavior of the dierent commands. I Environment variables are loaded from ash to RAM at U-Boot startup, can be modi
  • 235. ed and saved back to ash for persistence I There is a dedicated location in ash (or in MMC storage) to store the U-Boot environment, de
  • 236. ned in the board con
  • 238. le Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 113/526
  • 239. Environment variables commands (2) Commands to manipulate environment variables: I printenv Shows all variables I printenv variable-name Shows the value of a variable I setenv variable-name variable-value Changes the value of a variable, only in RAM I editenv variable-name Edits the value of a variable, only in RAM I saveenv Saves the current state of the environment to ash Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 114/526
  • 240. Environment variables commands - Example u-boot # printenv baudrate=19200 ethaddr=00:40:95:36:35:33 netmask=255.255.255.0 ipaddr=10.0.0.11 serverip=10.0.0.1 stdin=serial stdout=serial stderr=serial u-boot # printenv serverip serverip=10.0.0.1 u-boot # setenv serverip 10.0.0.100 u-boot # saveenv Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 115/526
  • 241. Important U-Boot env variables I bootcmd, contains the command that U-Boot will automatically execute at boot time after a con
  • 242. gurable delay, if the process is not interrupted I bootargs, contains the arguments passed to the Linux kernel, covered later I serverip, the IP address of the server that U-Boot will contact for network related commands I ipaddr, the IP address that U-Boot will use I netmask, the network mask to contact the server I ethaddr, the MAC address, can only be set once I bootdelay, the delay in seconds before which U-Boot runs bootcmd I autostart, if yes, U-Boot starts automatically an image that has been loaded into memory Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 116/526
  • 243. Scripts in environment variables I Environment variables can contain small scripts, to execute several commands and test the results of commands. I Useful to automate booting or upgrade processes I Several commands can be chained using the ; operator I Tests can be done using if command ; then ... ; else ... ; fi I Scripts are executed using run variable-name I You can reference other variables using ${variable-name} I Example I setenv mmc-boot 'if fatload mmc 0 80000000 boot. ini; then source; else if fatload mmc 0 80000000 uImage; then run mmc-bootargs; bootm; fi; fi' Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 117/526
  • 245. les to the target I U-Boot is mostly used to load and boot a kernel image, but it also allows to change the kernel image and the root
  • 246. lesystem stored in ash. I Files must be exchanged between the target and the development workstation. This is possible: I Through the network if the target has an Ethernet connection, and U-Boot contains a driver for the Ethernet chip. This is the fastest and most ecient solution. I Through a USB key, if U-Boot supports the USB controller of your platform I Through a SD or microSD card, if U-Boot supports the MMC controller of your platform I Through the serial port Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 118/526
  • 247. TFTP I Network transfer from the development workstation and U-Boot on the target takes place through TFTP I Trivial File Transfer Protocol I Somewhat similar to FTP, but without authentication and over UDP I A TFTP server is needed on the development workstation I sudo apt-get install tftpd-hpa I All
  • 248. les in /var/lib/tftpboot are then visible through TFTP I A TFTP client is available in the tftp-hpa package, for testing I A TFTP client is integrated into U-Boot I Con
  • 249. gure the ipaddr and serverip environment variables I Use tftp address filename to load a
  • 250. le Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 119/526
  • 251. U-boot mkimage I The kernel image that U-Boot loads and boots must be prepared, so that a U-Boot speci
  • 252. c header is added in front of the image I This header gives details such as the image size, the expected load address, the compression type, etc. I This is done with a tool that comes in U-Boot, mkimage I Debian / Ubuntu: just install the u-boot-tools package. I Or, compile it by yourself: simply con
  • 253. gure U-Boot for any board of any architecture and compile it. Then install mkimage: cp tools/mkimage /usr/local/bin/ I The special target uImage of the kernel Make
  • 254. le can then be used to generate a kernel image suitable for U-Boot. Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 120/526
  • 255. Practical lab - U-Boot Time to start the practical lab! I Communicate with the board using a serial console I Con
  • 256. gure, build and install U-Boot I Learn U-Boot commands I Set up TFTP communication with the board Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 121/526
  • 257. Linux kernel introduction Linux kernel introduction Free Electrons ©Copyright 2004-2014, Free Electrons. Creative Commons BY-SA 3.0 license. Corrections, suggestions, contributions and translations are welcome! Embedded Linux Developers Free Electrons Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 122/526
  • 258. Linux kernel introduction Linux features Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 123/526
  • 259. History I The Linux kernel is one component of a system, which also requires libraries and applications to provide features to end users. I The Linux kernel was created as a hobby in 1991 by a Finnish student, Linus Torvalds. I Linux quickly started to be used as the kernel for free software operating systems I Linus Torvalds has been able to create a large and dynamic developer and user community around Linux. I Nowadays, more than one thousand people contribute to each kernel release, individuals or companies big and small. Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 124/526
  • 260. Linux kernel key features I Portability and hardware support. Runs on most architectures. I Scalability. Can run on super computers as well as on tiny devices (4 MB of RAM is enough). I Compliance to standards and interoperability. I Exhaustive networking support. I Security. It can't hide its aws. Its code is reviewed by many experts. I Stability and reliability. I Modularity. Can include only what a system needs even at run time. I Easy to program. You can learn from existing code. Many useful resources on the net. Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 125/526
  • 261. Linux kernel in the system Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 126/526
  • 262. Linux kernel main roles I Manage all the hardware resources: CPU, memory, I/O. I Provide a set of portable, architecture and hardware independent APIs to allow user space applications and libraries to use the hardware resources. I Handle concurrent accesses and usage of hardware resources from dierent applications. I Example: a single network interface is used by multiple user space applications through various network connections. The kernel is responsible to multiplex the hardware resource. Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 127/526
  • 263. System calls I The main interface between the kernel and user space is the set of system calls I About 300 system calls that provide the main kernel services I File and device operations, networking operations, inter-process communication, process management, memory mapping, timers, threads, synchronization primitives, etc. I This interface is stable over time: only new system calls can be added by the kernel developers I This system call interface is wrapped by the C library, and user space applications usually never make a system call directly but rather use the corresponding C library function Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 128/526
  • 264. Pseudo
  • 265. lesystems I Linux makes system and kernel information available in user space through pseudo
  • 266. lesystems, sometimes also called virtual
  • 268. lesystems allow applications to see directories and
  • 269. les that do not exist on any real storage: they are created and updated on the y by the kernel I The two most important pseudo
  • 270. lesystems are I proc, usually mounted on /proc: Operating system related information (processes, memory management parameters...) I sysfs, usually mounted on /sys: Representation of the system as a set of devices and buses. Information about these devices. Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 129/526
  • 271. Inside the Linux kernel Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 130/526
  • 272. Linux license I The whole Linux sources are Free Software released under the GNU General Public License version 2 (GPL v2). I For the Linux kernel, this basically implies that: I When you receive or buy a device with Linux on it, you should receive the Linux sources, with the right to study, modify and redistribute them. I When you produce Linux based devices, you must release the sources to the recipient, with the same rights, with no restriction. Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 131/526
  • 273. Supported hardware architectures I See the arch/ directory in the kernel sources I Minimum: 32 bit processors, with or without MMU, and gcc support I 32 bit architectures (arch/ subdirectories) Examples: arm, avr32, blackfin, c6x, m68k, microblaze, mips, score, sparc, um I 64 bit architectures: Examples: alpha, arm64, ia64, tile I 32/64 bit architectures Examples: powerpc, x86, sh, sparc I Find details in kernel sources: arch/arch/Kconfig, arch/arch/README, or Documentation/arch/ Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 132/526
  • 274. Linux kernel introduction Linux versioning scheme and development process Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 133/526
  • 275. Until 2.6 (1) I One stable major branch every 2 or 3 years I Identi
  • 276. ed by an even middle number I Examples: 1.0.x, 2.0.x, 2.2.x, 2.4.x I One development branch to integrate new functionalities and major changes I Identi
  • 277. ed by an odd middle number I Examples: 2.1.x, 2.3.x, 2.5.x I After some time, a development version becomes the new base version for the stable branch I Minor releases once in while: 2.2.23, 2.5.12, etc. Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 134/526
  • 278. Until 2.6 (2) Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 135/526
  • 279. Changes since Linux 2.6 I Since 2.6.0, kernel developers have been able to introduce lots of new features one by one on a steady pace, without having to make disruptive changes to existing subsystems. I Since then, there has been no need to create a new development branch massively breaking compatibility with the stable branch. I Thanks to this, more features are released to users at a faster pace. Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 136/526
  • 280. 3.x stable branch I From 2003 to 2011, the ocial kernel versions were named 2.6.x. I Linux 3.0 was released in July 2011 I This is only a change to the numbering scheme I Ocial kernel versions are now named 3.x (3.0, 3.1, 3.2, etc.) I Stabilized versions are named 3.x.y (3.0.2, 3.4.3, etc.) I It eectively only removes a digit compared to the previous numbering scheme Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 137/526
  • 281. New development model Using merge and bug
  • 282. xing windows Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 138/526
  • 283. New development model - Details I After the release of a 3.x version (for example), a two-weeks merge window opens, during which major additions are merged. I The merge window is closed by the release of test version 3.(x+1)-rc1 I The bug
  • 284. xing period opens, for 6 to 10 weeks. I At regular intervals during the bug
  • 285. xing period, 3.(x+1)-rcY test versions are released. I When considered suciently stable, kernel 3.(x+1) is released, and the process starts again. Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 139/526
  • 286. More stability for the kernel source tree I Issue: bug and security
  • 287. xes only released for most recent stable kernel versions. I Some people need to have a recent kernel, but with long term support for security updates. I You could get long term support from a commercial embedded Linux provider. I You could reuse sources for the kernel used in Ubuntu Long Term Support releases (5 years of free security updates). I The http://kernel.org front page shows which versions will be supported for some time (up to 2 or 3 years), and which ones won't be supported any more (EOL: End Of Life) Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 140/526
  • 288. What's new in each Linux release? I The ocial list of changes for each Linux release is just a huge list of individual patches! commit aa6e52a35d388e730f4df0ec2ec48294590cc459 Author: Thomas Petazzoni thomas.petazzoni@free-electrons.com Date: Wed Jul 13 11:29:17 2011 +0200 at91: at91-ohci: support overcurrent notification Several USB power switches (AIC1526 or MIC2026) have a digital output that is used to notify that an overcurrent situation is taking place. This digital outputs are typically connected to GPIO inputs of the processor and can be used to be notified of these overcurrent situations. Therefore, we add a new overcurrent_pin[] array in the at91_usbh_data structure so that boards can tell the AT91 OHCI driver which pins are used for the overcurrent notification, and an overcurrent_supported boolean to tell the driver whether overcurrent is supported or not. The code has been largely borrowed from ohci-da8xx.c and ohci-s3c2410.c. Signed-off-by: Thomas Petazzoni thomas.petazzoni@free-electrons.com Signed-off-by: Nicolas Ferre nicolas.ferre@atmel.com I Very dicult to
  • 289. nd out the key changes and to get the global picture out of individual changes. I Fortunately, there are some useful resources available I http://wiki.kernelnewbies.org/LinuxChanges I http://lwn.net I http://linuxfr.org, for French readers Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 141/526
  • 290. Linux kernel introduction Linux kernel sources Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 142/526
  • 291. Location of kernel sources I The ocial versions of the Linux kernel, as released by Linus Torvalds, are available at http://www.kernel.org I These versions follow the development model of the kernel I However, they may not contain the latest development from a speci
  • 292. c area yet. Some features in development might not be ready for mainline inclusion yet. I Many chip vendors supply their own kernel sources I Focusing on hardware support
  • 293. rst I Can have a very important delta with mainline Linux I Useful only when mainline hasn't caught up yet. I Many kernel sub-communities maintain their own kernel, with usually newer but less stable features I Architecture communities (ARM, MIPS, PowerPC, etc.), device drivers communities (I2C, SPI, USB, PCI, network, etc.), other communities (real-time, etc.) I No ocial releases, only development trees are available. Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 143/526
  • 294. Getting Linux sources I The kernel sources are available from http://kernel.org/pub/linux/kernel as full tarballs (complete kernel sources) and patches (dierences between two kernel versions). I However, more and more people use the git version control system. Absolutely needed for kernel development! I Fetch the entire kernel sources and history git clone git://git.kernel.org/pub/scm/linux/ kernel/git/torvalds/linux.git I Create a branch that starts at a speci
  • 295. c stable version git checkout -b name-of-branch v3.11 I Web interface available at http://git.kernel.org/cgit/ linux/kernel/git/torvalds/linux.git/tree/. I Read more about Git at http://git-scm.com/ Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 144/526
  • 296. Linux kernel size (1) I Linux 3.10 sources: Raw size: 573 MB (43,000
  • 297. les, approx 15,800,000 lines) gzip compressed tar archive: 105 MB bzip2 compressed tar archive: 83 MB (better) xz compressed tar archive: 69 MB (best) I Minimum Linux 3.17 compiled kernel size, booting on the ARM Versatile board (hard drive on PCI, ext2
  • 298. lesystem, ELF executable support, framebuer console and input devices): 876 KB (compressed), 2.3 MB (raw) I Why are these sources so big? Because they include thousands of device drivers, many network protocols, support many architectures and
  • 299. lesystems... I The Linux core (scheduler, memory management...) is pretty small! Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 145/526
  • 300. Linux kernel size (2) As of kernel version 3.10. I drivers/: 49.4% I arch/: 21.9% I fs/: 6.0% I include/: 4.7% I sound/: 4.4% I Documentation/: 4.0% I net/: 3.9% I firmware/: 1.0% I kernel/: 1.0% I tools/: 0.9% I scripts/: 0.5% I mm/: 0.5% I crypto/: 0.4% I security/: 0.4% I lib/: 0.4% I block/: 0.2% I ... Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 146/526
  • 301. Getting Linux sources I Full tarballs I Contain the complete kernel sources: long to download and uncompress, but must be done at least once I Example: http://www.kernel.org/pub/linux/kernel/v3.x/linux- 3.10.9.tar.xz I Extract command: tar xf linux-3.10.9.tar.xz I Incremental patches between versions I It assumes you already have a base version and you apply the correct patches in the right order. Quick to download and apply I Examples: http://www.kernel.org/pub/linux/kernel/v3.x/patch-3.10.xz (3.9 to 3.10) http://www.kernel.org/pub/linux/kernel/v3.x/patch-3.10.9.xz (3.10 to 3.10.9) I All previous kernel versions are available in http://kernel.org/pub/linux/kernel/ Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 147/526
  • 302. Patch I A patch is the dierence between two source trees I Computed with the diff tool, or with more elaborate version control systems I They are very common in the open-source community I Excerpt from a patch: diff -Nru a/Makefile b/Makefile --- a/Makefile 2005-03-04 09:27:15 -08:00 +++ b/Makefile 2005-03-04 09:27:15 -08:00 @@ -1,7 +1,7 @@ VERSION = 2 PATCHLEVEL = 6 SUBLEVEL = 11 -EXTRAVERSION = +EXTRAVERSION = .1 NAME=Woozy Numbat # *DOCUMENTATION* Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 148/526
  • 303. Contents of a patch I One section per modi
  • 304. ed
  • 305. le, starting with a header diff -Nru a/Makefile b/Makefile --- a/Makefile 2005-03-04 09:27:15 -08:00 +++ b/Makefile 2005-03-04 09:27:15 -08:00 I One sub-section per modi
  • 306. ed part of the
  • 307. le, starting with header with the aected line numbers @@ -1,7 +1,7 @@ I Three lines of context before the change VERSION = 2 PATCHLEVEL = 6 SUBLEVEL = 11 I The change itself -EXTRAVERSION = +EXTRAVERSION = .1 I Three lines of context after the change NAME=Woozy Numbat # *DOCUMENTATION* Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 149/526
  • 308. Using the patch command The patch command: I Takes the patch contents on its standard input I Applies the modi
  • 309. cations described by the patch into the current directory patch usage examples: I patch -pn diff_file I cat diff_file | patch -pn I xzcat diff_file.xz | patch -pn I bzcat diff_file.bz2 | patch -pn I zcat diff_file.gz | patch -pn I Notes: I n: number of directory levels to skip in the
  • 310. le paths I You can reverse apply a patch with the -R option I You can test a patch with --dry-run option Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 150/526
  • 311. Applying a Linux patch I Two types of Linux patches: I Either to be applied to the previous stable version (from 3.x-1 to 3.x) I Or implementing
  • 312. xes to the current stable version (from 3.x to 3.x.y) I Can be downloaded in gzip, bzip2 or xz (much smaller) compressed
  • 313. les. I Always produced for n=1 (that's what everybody does... do it too!) I Need to run the patch command inside the kernel source directory I Linux patch command line example: cd linux-3.9 xzcat ../patch-3.10.xz | patch -p1 xzcat ../patch-3.10.9.xz | patch -p1 cd ..; mv linux-3.9 linux-3.10.9 Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 151/526
  • 314. Practical lab - Kernel sources Time to start the practical lab! I Get the Linux kernel sources I Apply patches Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 152/526
  • 316. guration Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 153/526
  • 318. guration and build system I The kernel con
  • 319. guration and build system is based on multiple Make
  • 320. les I One only interacts with the main Makefile, present at the top directory of the kernel source tree I Interaction takes place I using the make tool, which parses the Make
  • 321. le I through various targets, de
  • 322. ning which action should be done (con
  • 323. guration, compilation, installation, etc.). Run make help to see all available targets. I Example I cd linux-3.6.x/ I make target Free Electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com 154/526
  • 325. guration (1) I The kernel contains thousands of device drivers,
  • 326. lesystem drivers, network protocols and other con