Professional Documents
Culture Documents
Embedded Linux
Experts
free electrons
Copyright 2004-2016, Free Electrons.
Creative Commons BY-SA 3.0 license.
Latest update: June 17, 2016.
Document updates and sources:
http://free- electrons.com/doc/training/embedded- linux
Corrections, suggestions, contributions and translations are welcome!
Send them to feedback@free-electrons.com
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
1/516
Rights to copy
Copyright 2004-2016, Free Electrons
License: Creative Commons Attribution - Share Alike 3.0
http://creativecommons.org/licenses/by-sa/3.0/legalcode
You are free:
to copy, distribute, display, and perform the work
to make derivative works
to make commercial use of the work
Under the following conditions:
Attribution. You must give the original author credit.
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.
For any reuse or distribution, you must make clear to others the license terms of
this work.
Any of these conditions can be waived if you get permission from the copyright
holder.
Your fair use and other rights are in no way aected by the above.
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
2/516
Regular hyperlinks:
http://kernel.org/
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
3/516
Head count: 12
Only Free Software enthusiasts!
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
4/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
5/516
Generic course
information
Embedded Linux
Experts
free electrons
Copyright 2004-2016, Free Electrons.
Creative Commons BY-SA 3.0 license.
Corrections, suggestions, contributions and translations are welcome!
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
6/516
ash
2 Ethernet ports (Gigabit + 100 Mbit)
2 USB 2.0 host, 1 USB device
1 MMC/SD slot
3.3 V serial port (like Beaglebone Black)
Misc: Arduino R3-compatible header,
7/516
http://j.mp/18Hk8yF
Logitech USB H340 audio headsets
http://www.logitech.com/en-us/product/11608
An SD card with at least 128 MB of capacity
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
8/516
Participate!
During the lectures...
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
9/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
10/516
Lab commands
Cross-compiling kernel:
export ARCH=arm
export CROSS_COMPILE=arm-linuxmake sama5_defcong
Booting kernel through tftp:
setenv bootargs console=ttyS0 root=/dev/nfs
setenv bootcmd tftp 0x21000000 zImage; tftp
0x22000000 dtb; bootz 0x21000000 - 0x2200...
Making ubifs images:
mkfs.ubifs -d rootfs -o root.ubifs -e 124KiB
-m 2048 -c 1024
Encountered issues:
Restart NFS server after editing /etc/exports!
gedit ~/lab-history.txt
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
11/516
Cooperate!
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
12/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
13/516
vi basic commands
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
14/516
Introduction to
Embedded Linux
Embedded Linux
Experts
free electrons
Copyright 2004-2016, Free Electrons.
Creative Commons BY-SA 3.0 license.
Corrections, suggestions, contributions and translations are welcome!
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
15/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
16/516
Free software?
Freedom
Freedom
Freedom
Freedom
to
to
to
to
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
17/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
18/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
19/516
Re-using components
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
20/516
Low cost
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
21/516
Full control
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
22/516
Quality
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
23/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
24/516
Community support
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
25/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
26/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
27/516
Personal routers
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
28/516
Television
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
29/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
30/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
31/516
Viticulture machine
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
32/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
33/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
34/516
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/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
36/516
Communication
I2C
SPI
CAN
1-wire
SDIO
USB
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
37/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
38/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
39/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
40/516
Global architecture
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
41/516
Software components
Cross-compilation toolchain
Bootloader
C library
Linux Kernel
Third-party or in-house
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
42/516
System integration
Development of applications
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
43/516
Embedded Linux
development
environment
Embedded Linux
Experts
free electrons
Copyright 2004-2016, Free Electrons.
Creative Commons BY-SA 3.0 license.
Corrections, suggestions, contributions and translations are welcome!
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
44/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
45/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
46/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
47/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
48/516
Software packages
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
49/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
50/516
51/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
52/516
SERIAL_DEVICE is typically
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
53/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
54/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
55/516
Cross-compiling toolchains
Cross-compiling
toolchains
Embedded Linux
Experts
free electrons
Copyright 2004-2016, Free Electrons.
Creative Commons BY-SA 3.0 license.
Corrections, suggestions, contributions and translations are welcome!
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
56/516
Cross-compiling toolchains
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
57/516
Denition (1)
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
58/516
Denition (2)
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
59/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
60/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
61/516
Components
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
62/516
Binutils
http://www.gnu.org/software/binutils/
GPL license
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
63/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
64/516
1
2
3
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
65/516
The kernel headers are extracted from the kernel sources using
the headers_install kernel Makele target.
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
66/516
GCC
http://gcc.gnu.org/
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
67/516
C library
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
68/516
Cross-compiling toolchains
C Libraries
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
69/516
glibc
License: LGPL
http://www.gnu.org/software/libc/
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
70/516
uClibc-ng (1)
http://uclibc-ng.org/
License: LGPL
Lightweight C library for small embedded systems
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
71/516
uClibc-ng (2)
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
72/516
Busybox (stripped):
busybox
uClibc
uClibc with Thumb-2
eglibc with Thumb-2
static
750kB
533kB
934kB
dynamic
603kB
439kB
444kB
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
73/516
musl C library
http://www.musl-libc.org/
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
74/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
75/516
Cross-compiling toolchains
Toolchain Options
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
76/516
ABI
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/516
Generate hard oat code and rely on the kernel to emulate the
oating point instructions. This is very slow.
Generate soft oat code, so that instead of generating oating
point instructions, calls to a user space library are generated
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
78/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
79/516
Cross-compiling toolchains
Obtaining a Toolchain
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
80/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
81/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
82/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
83/516
Crosstool-ng
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
84/516
PTXdist
OpenEmbedded / Yocto
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
85/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
86/516
Toolchain contents
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
87/516
Congure Crosstool-NG
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
88/516
Bootloaders
Bootloaders
Embedded Linux
Experts
free electrons
Copyright 2004-2016, Free Electrons.
Creative Commons BY-SA 3.0 license.
Corrections, suggestions, contributions and translations are welcome!
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
89/516
Bootloaders
Boot Sequence
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
90/516
Bootloaders
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
91/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
92/516
Can read many lesystem formats to load the kernel image and
the conguration, provides a powerful shell with various
commands, can load kernel images over the network, etc.
See our dedicated presentation for details:
http://free-electrons.com/docs/grub/
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
93/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
94/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
95/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
96/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
97/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
98/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
99/516
Bootloaders
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
100/516
U-Boot
U-Boot is a typical free software project
Documentation available at
http://www.denx.de/wiki/U-Boot/Documentation
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
101/516
U-Boot conguration
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
102/516
/* 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
[...]
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
103/516
make BOARDNAME_defconfig
Where BOARDNAME is the name of the board, as visible in the
boards.cfg le (rst column).
New: you can now run make menuconfig to further edit
U-Boot's conguration!
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
104/516
Installing U-Boot
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:
The CPU provides some kind of specic boot monitor with
which you can communicate through serial port or USB using
a specic protocol
The CPU boots rst on removable media (MMC) before
booting from xed media (NAND). In this case, boot from
MMC to reash a new version
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
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
105/516
U-boot prompt
12 MHz
528 MHz
132 MHz
serial
serial
serial
gmac0
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
106/516
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 2016.05 (May 17 2016 - 12:41:15 -0400)
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
107/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
108/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
109/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
110/516
printenv
Shows all variables
printenv <variable-name>
Shows the value of a variable
editenv <variable-name>
Edits the value of a variable, only in RAM
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
111/516
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
112/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
113/516
Example
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
114/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
115/516
TFTP
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
116/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
117/516
Linux kernel
introduction
Embedded Linux
Experts
free electrons
Copyright 2004-2016, Free Electrons.
Creative Commons BY-SA 3.0 license.
Corrections, suggestions, contributions and translations are welcome!
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
118/516
Linux features
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
119/516
History
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
120/516
Compliance to standards
and interoperability.
Exhaustive networking
support.
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
121/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
122/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
123/516
System calls
The main interface between the kernel and user space is the
set of system calls
About 300 system calls that provide the main kernel services
This interface is stable over time: only new system calls can
be added by the kernel developers
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
124/516
Pseudo lesystems
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
125/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
126/516
Linux license
The whole Linux sources are Free Software released under the
GNU General Public License version 2 (GPL v2).
For the Linux kernel, this basically implies that:
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.
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
127/516
64 bit architectures:
Examples: alpha, arm64, ia64, tile
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
128/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
129/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
130/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
131/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
132/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
133/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
134/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
135/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
136/516
Very dicult to nd out the key changes and to get the global
picture out of individual changes.
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
137/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
138/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
139/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
140/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
141/516
drivers/: 49.4%
arch/: 21.9%
fs/: 6.0%
include/: 4.7%
sound/: 4.4%
Documentation/: 4.0%
net/: 3.9%
firmware/: 1.0%
kernel/: 1.0%
tools/: 0.9%
scripts/: 0.5%
mm/: 0.5%
crypto/: 0.4%
security/: 0.4%
lib/: 0.4%
block/: 0.2%
...
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
142/516
Full tarballs
Extract command:
tar xf linux-3.10.9.tar.xz
It assumes you already have a base version and you apply the
correct patches in the right order. Quick to download and
apply
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)
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
143/516
Patch
144/516
Contents of a patch
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
145/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
146/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
147/516
Apply patches
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
148/516
Kernel conguration
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
149/516
Example
cd linux-3.6.x/
make <target>
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
150/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
151/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
152/516
Kernel or module?
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
153/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
154/516
make xconfig allows to see all options, even the ones that
cannot be selected because of missing dependencies. In this
case, they are displayed in gray.
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
155/516
make xcong
make xconfig
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
156/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
157/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
158/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
159/516
160/516
make gcong
make gconfig
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
161/516
make menucong
make menuconfig
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
162/516
make ncong
make nconfig
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
163/516
make oldcong
make oldconfig
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
164/516
A frequent problem:
If you don't remember all the changes you made, you can get
back to your previous conguration:
$ cp .config.old .config
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
165/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
166/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
167/516
Kernel compilation
make
Generates
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
168/516
Kernel installation
make install
Installs
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
169/516
Module installation
make modules_install
kernel/
Module .ko (Kernel Object) les, in the same directory
structure as in the sources.
modules.alias
Module aliases for module loading utilities. Example line:
alias sound-service-?-0 snd_mixer_oss
modules.dep, modules.dep.bin (binary hashed)
Module dependencies
modules.symbols, modules.symbols.bin (binary hashed)
Tells which module a given symbol belongs to.
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
170/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
171/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
172/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
173/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
174/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
175/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
176/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
177/516
Device Tree
The bootloader must load both the kernel image and the
Device Tree Blob in memory before starting the kernel.
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
178/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
179/516
Run make
Copy the nal kernel image to the target storage
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
180/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
181/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
182/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
183/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
184/516
Advantages of modules
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
185/516
Module dependencies
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
186/516
Kernel log
When a new module is loaded, related information is available in
the kernel log.
Note that you can write to the kernel log from user space too:
echo "<n>Debug info" > /dev/kmsg
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
187/516
modinfo <module_name>
modinfo <module_path>.ko
Gets information about a module: parameters, license,
description and dependencies.
Very useful before deciding to load a module or not.
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
188/516
Example:
$ sudo insmod ./intr_monitor.ko
insmod: error inserting './intr_monitor.ko': -1 Device or resource busy
$ dmesg
[17549774.552000] Failed to register handler for irq channel 2
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
189/516
lsmod
Displays the list of loaded modules
Compare its output with the contents of /proc/modules!
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
190/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
191/516
Through insmod:
sudo insmod ./snd-intel8x0m.ko index=-2
Through modprobe:
Set parameters in /etc/modprobe.conf or in any le in
/etc/modprobe.d/:
options snd-intel8x0m index=-2
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
192/516
Check /sys/module/<name>/parameters.
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
193/516
Useful reading
Linux Kernel in a Nutshell, Dec 2006
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
194/516
Linux Root
Filesystem
Embedded Linux
Experts
free electrons
Copyright 2004-2016, Free Electrons.
Creative Commons BY-SA 3.0 license.
Corrections, suggestions, contributions and translations are welcome!
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
195/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
196/516
Filesystems
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
197/516
Filesystems (2)
It is empty
$ ls /mnt/usbkey
$
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
198/516
mount / umount
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
199/516
Root lesystem
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
200/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
201/516
Partitions of an SD card
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
202/516
Can have a big root lesystem even if you don't have support
for internal or external storage yet.
The root lesystem can be huge. You can even build native
compiler tools and build all the tools you need on the target
itself (better to cross-compile though).
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
203/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
204/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
205/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
206/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
207/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
208/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
209/516
Contents
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
210/516
http://www.linuxfoundation.org/collaborate/
workgroups/lsb/fhs
Most Linux systems conform to this specication
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
211/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
212/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
213/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
214/516
Device Files
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
215/516
Devices
Character device
Block device
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
216/516
Types of devices
Block devices
Character devices
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
217/516
Devices: everything is a le
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
218/516
/dev/zero
/dev/sda1
/dev/sda2
/dev/tty1
/dev/ttyS0
/dev/zero
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
219/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
220/516
Pseudo Filesystems
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
221/516
man proc
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
222/516
proc contents
/proc/<pid>
cat /proc/3840/cmdline
It contains details about the les opened by the process, the
CPU and memory usage, etc.
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
223/516
sysfs lesystem
$ ls /sys/
block bus class dev devices firmware
fs kernel module power
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
224/516
Minimal lesystem
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
225/516
Basic applications
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
226/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
227/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
228/516
Busybox
Busybox
Embedded Linux
Experts
free electrons
Copyright 2004-2016, Free Electrons.
Creative Commons BY-SA 3.0 license.
Corrections, suggestions, contributions and translations are welcome!
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
229/516
Why Busybox?
An init program
A shell
Various basic utilities for le manipulation and system
conguration
coreutils, bash, grep, sed, tar, wget, modutils, etc. are all
dierent projects
A lot of dierent components to integrate
Components not designed with embedded systems constraints
in mind: they are not very congurable and have a wide range
of features
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
230/516
http://www.busybox.net/
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
231/516
BusyBox commands!
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
232/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
233/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
234/516
Conguring BusyBox
make defconfig
Good to begin with BusyBox.
Congures BusyBox with all options for regular users.
make allnoconfig
Unselects all options. Good to congure only what you need.
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
235/516
the commands
to compile,
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
236/516
Compiling BusyBox
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
237/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
238/516
Block lesystems
Block lesystems
Embedded Linux
Experts
free electrons
Copyright 2004-2016, Free Electrons.
Creative Commons BY-SA 3.0 license.
Corrections, suggestions, contributions and translations are welcome!
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
239/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
240/516
0
3866624 mmcblk0
1
73712 mmcblk0p1
2
3792896 mmcblk0p2
0 976762584 sda
1
1060258 sda1
2 975699742 sda2
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
241/516
Traditional lesystems
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
242/516
Journaled lesystems
Designed to stay in a
correct state even
after system crashes
or a sudden powero
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
243/516
Thanks to the
journal, the lesystem
is never left in a
corrupted state
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
244/516
245/516
mkfs.ext2
mkfs.ext3
mkfs.ext4
mkfs.ext2
/dev/hda3
/dev/sda2
/dev/sda3
disk.img
Use the genext2fs tool, from the package of the same name
genext2fs -d rootfs/ rootfs.img
Your image is then ready to be transferred to your block device
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
246/516
Once a lesystem image has been created, one can access and
modies its contents from the development workstation, using
the loop mechanism
Example:
genext2fs -d rootfs/ rootfs.img
mkdir /tmp/tst
mount -t ext2 -o loop rootfs.img /tmp/tst
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
247/516
F2FS
http://en.wikipedia.org/wiki/F2FS
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
248/516
Squashfs
Squashfs: http://squashfs.sourceforge.net
249/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
250/516
tmpfs
Not a block lesystem of course!
Perfect to store temporary data in RAM: system log les,
connection data, temporary les...
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
251/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
252/516
Hence, no way to access a low level ash interface and use the
Linux lesystems doing wear leveling.
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
253/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
254/516
Flash lesystems
Flash lesystems
Embedded Linux
Experts
free electrons
Copyright 2004-2016, Free Electrons.
Creative Commons BY-SA 3.0 license.
Corrections, suggestions, contributions and translations are welcome!
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
255/516
Block devices:
Flash devices:
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
256/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
257/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
258/516
Reliability
Lifetime
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
259/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
260/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
261/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
262/516
MTD partitioning
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
263/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
264/516
Named partitions are easier to use, and much less error prone
than using osets.
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
265/516
Example:
setenv mtdids nand0=omap2-nand.0
setenv mtdparts mtdparts=omap2-nand.0:512k(X-Loader)ro,1536k(U-Boot)ro,512k(Env),4m(Kernel),-(RootFS)
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
266/516
267/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
268/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
269/516
flinfo [devid]
Display information of all NOR devices or a specic one if
devid is provided
cp.[bwl] <src> <target> <count>
Read/write data from/to the NOR device
erase <start> <end> or erase <start> +<len>
Erase a memory region
erase bank <bankid>
Erase a memory bank
erase all
Erase all banks
protect on|off <range-description>
Protect a memory range
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
270/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
271/516
The user space only see MTD partitions, not the ash device
under those partitions
The mtdchar driver creates a character device for each MTD
device/partition of the system
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
272/516
See http://www.linux-mtd.infradead.org/.
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
273/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
274/516
Flash users should also take the limited lifetime of ash devices
into account by taking additional precautions
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
275/516
Flash le-systems
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
276/516
http://www.linuxmtd.infradead.org/doc/jffs2.html
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
277/516
No compression
http://www.yaffs.net/
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
278/516
UBI/UBIFS
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
279/516
UBI (1)
Unsorted Block Images
http://www.linux-mtd.infradead.org/doc/ubi.html
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
280/516
UBI (2)
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
281/516
UBI: internals
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
282/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
283/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
284/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
285/516
UBIFS
http://www.linux-mtd.infradead.org/doc/ubifs.html
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
286/516
-o <output-file-path>
Path to the output image le
-p <peb-size>
The PEB size (MTD erase block size)
-m <min-io-size>
The minimum write unit size (e.g. MTD write size)
-s <subpage-size>
Subpage size, only needed if both your ash and your ash
controller are supporting subpage writes
The last argument is a path to a UBI image description le
(see next page for an example)
Example:
ubinize -o ubi.img -p 16KiB -m 512 -s 256 cfg.ini
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
287/516
ubinize conguration le
Example:
[kernel-volume]
mode=ubi
image=zImage
vol_id=1
vol_type=static
vol_name=kernel
[rootfs-volume]
mode=ubi
image=rootfs.squashfs
vol_id=2
vol_type=static
vol_name=rootfs
[data-volume]
mode=ubi
image=data.ubifs
vol_id=3
vol_size=30MiB
vol_type=dynamic
vol_name=data
vol_flags=autoresize
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
288/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
289/516
ubiformat <MTD-device-id>
Format an MTD partition and preserve Erase Counter
information if any
ubiattach -m <MTD-device-id> /dev/ubi_ctrl
Attach an MTD partition/device to the UBI layer, and create a
UBI device
ubidetach -m <MTD-device-id> /dev/ubi_ctrl
Detach an MTD partition/device from the UBI layer, and
remove the associated UBI device
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
290/516
291/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
292/516
Once created
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
293/516
Example:
mount -t ubifs ubi0:data /data
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
294/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
295/516
ubi.mtd=1
Attach /dev/mtd1 to the UBI layer and create ubi0
rootfstype=ubifs root=ubi0:rootfs
Mount the rootfs volume on ubi0 as a UBIFS lesystem
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
296/516
297/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
298/516
Linux: mtdblock
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
299/516
Linux: ubiblock
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
300/516
Useful reading
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
301/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
302/516
Embedded Linux
system
development
Embedded Linux
Experts
free electrons
Copyright 2004-2016, Free Electrons.
Creative Commons BY-SA 3.0 license.
Corrections, suggestions, contributions and translations are welcome!
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
303/516
Contents
Networking
System utilities
Language interpreters
Audio, video and multimedia
Graphical toolkits
Databases
Web browsers
System building
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
304/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
305/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
306/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
307/516
Choosing components
Not all free software components are necessarily good to re-use.
One must pay attention to:
Vitality of the developer and user communities. This vitality
ensures long-term maintenance of the component, and
relatively good support. It can be measured by looking at the
mailing-list trac and the version control system activity.
Quality of the component. Typically, if a component is
already available through embedded build systems, and has a
dynamic user community, it probably means that the quality is
relatively good.
License. The license of the component must match your
licensing constraints. For example, GPL libraries cannot be
used in proprietary applications.
Technical requirements. Of course, the component must
match your technical requirements. But don't forget that you
can improve the existing components if a feature is missing!
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
308/516
Licenses (1)
All software that are under a free software license give four
freedoms to all users
Freedom
Freedom
Freedom
Freedom
to
to
to
to
use
study
copy
modify and distribute modied copies
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
309/516
Licenses (2)
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
310/516
GPL
Is a copyleft license
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
311/516
GPL: redistribution
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
312/516
LGPL
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
313/516
Licensing: examples
You must release the modied versions under the same license
You must release the modied versions under the same license,
and be ready to distribute the source code to your customers
You can keep your application proprietary, but you must link
dynamically with the LGPL libraries
You can keep your modications proprietary, but you must still
credit the authors
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
314/516
Non-copyleft licenses
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
315/516
BSD license
[...]
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
316/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
317/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
318/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
319/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
320/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
321/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
322/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
323/516
Web servers
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
324/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
325/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
326/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
327/516
System utilities
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
328/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
329/516
Language interpreters
Application development
Web services development
Scripting
Languages supported
Lua
Python
Perl
Ruby
TCL
PHP
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
330/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
331/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
332/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
333/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
334/516
X.org - KDrive
X11 license
http://www.x.org
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
335/516
Kdrive: architecture
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
336/516
Kdrive: usage
Gtk
Qt
Enlightment Foundation Libraries
Others: Fltk, WxEmbedded, etc
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
337/516
Wayland
http://wayland.freedesktop.org/
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
338/516
Wayland: architecture
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
339/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
340/516
Gtk
License: LGPL
http://www.gtk.org
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
341/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
342/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
343/516
344/516
Qt (1)
Framebuer
X11
Wayland
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
345/516
Qt (2)
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
346/516
Qt's usage
347/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
348/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
349/516
http://www.sqlite.org
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
350/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
351/516
WebKit
http://webkit.org/
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
352/516
System building
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
353/516
Goal
Several solutions
Manually
System building tools
Distributions or ready-made
lesystems
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
354/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
355/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
356/516
System foundations
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
357/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
358/516
Build systems
Each open-source component comes with a mechanism to
congure, compile and install it
A basic Makefile
CMake, http://www.cmake.org/
Scons, http://www.scons.org/
Waf, http://code.google.com/p/waf/
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
359/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
360/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
361/516
automake / autoconf
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
362/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
363/516
At least some of the environment variables AR, AS, LD, NM, CC,
GCC, CPP, CXX, STRIP, OBJCOPY must be dened to point to
the proper cross-compilation tools. The host tuple is also by
default used as prex.
configure script arguments:
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
364/516
.
export PATH=/usr/local/arm-linux/bin:$PATH
export CC=arm-linux-gcc
export STRIP=arm-linux-strip
./configure --host=arm-linux --prefix=/usr
make
make
DESTDIR=$HOME/work/rootfs install
.
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
365/516
Installation (1)
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
366/516
Installation (2)
Contents of usr/lib after installation of libpng and zlib
libpng libtool description les
./lib/libpng12.la
./lib/libpng.la -> libpng12.la
libpng static version
./lib/libpng12.a
./lib/libpng.a -> libpng12.a
libpng dynamic version
./lib/libpng.so.3.32.0
./lib/libpng12.so.0.32.0
./lib/libpng12.so.0 -> libpng12.so.0.32.0
./lib/libpng12.so -> libpng12.so.0.32.0
./lib/libpng.so -> libpng12.so
./lib/libpng.so.3 -> libpng.so.3.32.0
libpng pkg-cong description les
./lib/pkgconfig/libpng12.pc
./lib/pkgconfig/libpng.pc -> libpng12.pc
zlib dynamic version
./lib/libz.so.1.2.3
./lib/libz.so -> libz.so.1.2.3
./lib/libz.so.1 -> libz.so.1.2.3
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
367/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
368/516
pkg-cong
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
369/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
370/516
Manually cross-compiling
applications and libraries
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
371/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
372/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
373/516
Buildroot (1)
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
374/516
Buildroot (2)
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
375/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
376/516
.
config BR2_PACKAGE_GQVIEW
bool "gqview"
depends on BR2_PACKAGE_LIBGTK2
help
GQview is an image viewer for Unix operating systems
http://prdownloads.sourceforge.net/gqview
.
source
"package/gqview/Config.in"
.
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
377/516
.
GQVIEW_VERSION = 2.1.5
GQVIEW_SOURCE = gqview-$(GQVIEW_VERSION).tar.gz
GQVIEW_SITE = http://prdownloads.sourceforge.net/gqview
GQVIEW_DEPENDENCIES = host-pkgconf libgtk2
GQVIEW_CONF_ENV = LIBS="-lm"
$(eval
$(autotools-package))
.
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
378/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
379/516
Distributions - Debian
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
380/516
Distributions - Others
Fedora
http://fedoraproject.org/wiki/
Architectures/ARM
Ubuntu
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
381/516
Embedded distributions
Android: http://www.android.com/
Google's distribution for phones and tablet PCs.
Except the Linux kernel, very dierent user space
than other Linux distributions. Very successful, lots
of applications available (many proprietary).
ngstrm:
http://www.angstrom-distribution.org/
Produces nightly built images for a nice list of ARM
and x86 systems (see http:
//dominion.thruhere.net/angstrom/nightlies/
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
382/516
Application frameworks
Not real distributions you can download. Instead, they
implement middleware running on top of the Linux kernel
and allowing to develop applications.
Mer: http://merproject.org/
Fork from the Meego project.
Targeting mobile devices.
Supports x86, ARM and MIPS.
See http://en.wikipedia.org/wiki/Mer_
(software_distribution)
Tizen: https://www.tizen.org/
Targeting smartphones, tablets, netbooks, smart TVs
and In Vehicle Infotainment devices.
Supported by big phone manufacturers and operators
HTML5 base application framework.
See http://en.wikipedia.org/wiki/Tizen
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
383/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
384/516
Embedded Linux
application
development
Embedded Linux
Experts
free electrons
Copyright 2004-2016, Free Electrons.
Creative Commons BY-SA 3.0 license.
Corrections, suggestions, contributions and translations are welcome!
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
385/516
Contents
Application development
Source management
Debuggers
Memory checkers
System analysis
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
386/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
387/516
Application development
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
388/516
Programming language
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
389/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
390/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
391/516
.
CROSS_COMPILE?=arm-linuxCC=$(CROSS_COMPILE)gcc
OBJS=foo.o bar.o
all: foobar
foobar: $(OBJS)
$(CC) -o $@ $^
clean:
$(RM) -f foobar $(OBJS)
.
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
392/516
Case of an application that uses the Glib and the GPS libraries
.
CROSS_COMPILE?=arm-linuxLIBS=libgps glib-2.0
OBJS=foo.o bar.o
CC=$(CROSS_COMPILE)gcc
CFLAGS=$(shell pkg-config --cflags $(LIBS))
LDFLAGS=$(shell pkg-config --libs $(LIBS))
all: foobar
foobar: $(OBJS)
$(CC) -o $@ $^ $(LDFLAGS)
clean:
$(RM) -f foobar $(OBJS)
.
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
393/516
Integrated Development
Environments (IDE)
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
394/516
KDevelop
http://kdevelop.org
License: GPL
Nice overview:
http://en.wikipedia.org/wiki/Kdevelop
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
395/516
KDevelop screenshot
Ruby debugger
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
396/516
Eclipse (1)
http://www.eclipse.org/
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
397/516
Eclipse (2)
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
398/516
Vim
Emacs
399/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
400/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
401/516
Subversion
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
402/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
403/516
Git
Mercurial
http://en.wikipedia.org/wiki/Version_control_systems#
Distributed_revision_control
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
404/516
Debuggers
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
405/516
GDB
The GNU Project Debugger
http://www.gnu.org/software/gdb/
The debugger on GNU/Linux, available for most
embedded architectures.
Supported languages: C, C++, Pascal,
Objective-C, Fortran, Ada...
Console interface (useful for remote debugging).
Graphical front-ends available.
Can be used to control the execution of a
program, set breakpoints or change internal
variables. You can also use it to see what a
program was doing when it crashed (by loading
its memory image, dumped into a core le).
See also http://en.wikipedia.org/wiki/Gdb
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
406/516
break foobar
puts a breakpoint at the entry of function foobar()
break foobar.c:42
puts a breakpoint in foobar.c, line 42
print var or print task->files[0].fd
prints the variable var, or a more complicated reference. GDB
can also nicely display structures with all their members
continue
continue the execution
next
continue to the next line, stepping over function calls
step
continue to the next line, entering into subfunctions
backtrace
display the program stack
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
407/516
GDB/Insight
http://sourceware.org/insight/
From the GDB maintainers.
KDbg
http://www.kdbg.org/
Another front-end, for the K Display Environment.
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
408/516
Remote debugging
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
409/516
Remote debugging
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
410/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
411/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
412/516
On the host
After the crash, transfer the core le from the target to the
host, and run
ARCH-linux-gdb -c core-file application-binary
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
413/516
Memory checkers
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
414/516
DUMA
Detect Unintended Memory Access
http://duma.sourceforge.net/
GDB will then display the source-code line that causes the
bug.
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
415/516
Valgrind (1)
http://valgrind.org/
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
416/516
Valgrind (2)
Example usage
valgrind --leak-check=yes ls -la
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
417/516
System analysis
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
418/516
strace
System call tracer
http://sourceforge.net/projects/strace/
Usage:
strace <command> (starting a new process)
strace -p <pid> (tracing an existing process)
419/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
420/516
ltrace
A tool to trace library calls used by a program and all the signals it
receives
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
421/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
422/516
ltrace summary
Example summary at the end of the ltrace output (-c option)
.
Process 17019 detached
% time
seconds usecs/call
calls
errors syscall
------ ----------- ----------- --------- --------- ---------------100.00
0.000050
50
1
set_thread_area
0.00
0.000000
0
48
read
0.00
0.000000
0
44
write
0.00
0.000000
0
80
63 open
0.00
0.000000
0
19
close
0.00
0.000000
0
1
execve
0.00
0.000000
0
2
2 access
0.00
0.000000
0
3
brk
0.00
0.000000
0
1
munmap
0.00
0.000000
0
1
uname
0.00
0.000000
0
1
mprotect
0.00
0.000000
0
19
mmap2
0.00
0.000000
0
50
46 stat64
0.00
0.000000
0
18
fstat64
------ ----------- ----------- --------- --------- ---------------0.000050 288 111 total
.100.00
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
423/516
OProle
http://oprofile.sourceforge.net
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
424/516
Callgrind / KCachegrind
KCachegrind: http://kcachegrind.sourceforge.net/
An amazing visualizer for Cachegrind / Callgrind data.
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
425/516
KCachegrind screenshot
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
426/516
Application development
Remote debugging
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
427/516
Real-time in
embedded Linux
systems
Embedded Linux
Experts
free electrons
Copyright 2004-2016, Free Electrons.
Creative Commons BY-SA 3.0 license.
Corrections, suggestions, contributions and translations are welcome!
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
428/516
Introduction
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
429/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
430/516
The main goal was to get the best throughput from the
available hardware, by making the best possible usage of
resources (CPU, memory, I/O)
Time determinism was not taken into account
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
431/516
Approach 2
Add a layer below the Linux kernel that will handle all the
real-time requirements, so that the behaviour of Linux doesn't
aect real-time tasks.
Approach taken by RTLinux, RTAI and Xenomai
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
432/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
433/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
434/516
Understanding latency
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
435/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
436/516
Interrupt latency
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
437/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
438/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
439/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
440/516
Scheduler latency
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
441/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
442/516
This means that the time before which the scheduler will be
called to schedule another task is unbounded.
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
443/516
Scheduler duration
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
444/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
445/516
Priority inversion
A process with a low priority might hold a lock needed by a higher
priority process, eectively reducing the priority of this process.
Things can be even worse if a middle priority process uses the CPU.
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
446/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
447/516
https://rt.wiki.kernel.org
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
448/516
O(1) scheduler
Kernel preemption
Better POSIX real-time
API support
Since 2.6.18
Since 2.6.21
Since 2.6.30
High-resolution timers
Threaded interrupts
Since 2.6.33
Spinlock annotations
Priority inheritance
support for mutexes
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
449/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
450/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
451/516
CONFIG_PREEMPT_VOLUNTARY
Kernel code can preempt itself
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
452/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
453/516
Priority inheritance
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
454/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
455/516
Threaded interrupts
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
456/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
457/516
PREEMPT_RT specics
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
458/516
CONFIG_PREEMPT_RT (1)
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
459/516
CONFIG_PREEMPT_RT (2)
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
460/516
Threaded interrupts
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
461/516
Setting up PREEMPT_RT
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
462/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
463/516
CONFIG_PREEMPT_RT_FULL
High-resolution timers
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
464/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
465/516
Compile a program
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
466/516
Process, thread?
They run in the same address space as the initial thread of the
process
They start executing a function passed as argument to
pthread_create()
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
467/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
468/516
Creating threads
The new thread will run in the same address space, but will
be scheduled independently
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
469/516
The highest priority process gets all the CPU time, until it
blocks.
In SCHED_RR, round-robin scheduling between the processes of
the same priority. All must block before lower priority
processes get CPU time.
Priorities ranging from 0 (lowest) to 99 (highest)
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
470/516
.
int sched_setscheduler(pid_t pid, int policy,
const struct sched_param *param);
.
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
471/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
472/516
Memory locking
mlockall(MCL_CURRENT | MCL_FUTURE);
Stack pages
Dynamically-allocated memory
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
473/516
Mutexes
Initialization/destruction
pthread_mutex_init(pthread_mutex_t *mutex,
const pthread_mutexattr_t *mutexattr);
pthread_mutex_destroy(pthread_mutex_t
*mutex);
.
Lock/unlock
pthread_mutex_lock(pthread_mutex_t *mutex);
.pthread_mutex_unlock(pthread_mutex_t *mutex);
pthread_mutexattr_t attr;
pthread_mutexattr_init (&attr);
pthread_mutexattr_setprotocol(&attr,
PTHREAD_PRIO_INHERIT);
.
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
474/516
Timers
Timer creation
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
475/516
Timers (2)
Delete a timer
.
t. imer_delete(timer_t timerid)
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
476/516
Signals
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
477/516
Inter-process communication
Semaphores
Message queues
Shared memory
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
478/516
Debugging latencies in
PREEMPT_RT
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
479/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
480/516
Using ftrace
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
481/516
Disable tracing:
.
echo
0 > /sys/kernel/debug/tracing/tracing_enabled
.
Read the maximum recorded latency and the corresponding trace:
.
.cat /sys/kernel/debug/tracing/tracing_max_latency
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
482/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
483/516
Useful reading
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
484/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
485/516
RTLinux
RTAI
Xenomai
A common principle
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
486/516
RTLinux
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
487/516
RTAI
https://www.rtai.org/ - Real-Time Application Interface for
Linux
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
488/516
Xenomai project
http://www.xenomai.org/
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
489/516
Xenomai architecture
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
490/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
491/516
Xenomai features
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
492/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
493/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
494/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
495/516
Setting up Xenomai
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
496/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
497/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
498/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
499/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
500/516
http://www.xenomai.org/index.php/Porting_POSIX_
applications_to_Xenomai
Clocks and timers, condition variables, message queues,
mutexes, semaphores, shared memory, signals, thread
management
Good for existing code or programmers familiar with the
POSIX API
501/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
502/516
http://xenomai.org/documentation/branches/v2.4.x/
pdf/Native-API-Tour-rev-C.pdf
Usable both in user space and kernel space. Development of
tasks in user space is the preferred way.
More coherent and more exible API than the POSIX API.
Easier to learn and understand. Certainly the way to go for
new applications.
To compile applications:
503/516
rt_queue_create(), rt_queue_delete(),
rt_queue_alloc(), rt_queue_free(), rt_queue_send(),
rt_queue_receive(), etc.
Mutex services
rt_mutex_create(), rt_mutex_delete(),
rt_mutex_acquire(), rt_mutex_release(), etc.
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
504/516
Alarm services
rt_alarm_create(), rt_alarm_delete(),
rt_alarm_start(), rt_alarm_stop(), rt_alarm_wait(), etc.
Allows to share memory between processes and/or to
pre-allocate a pool of memory
rt_heap_create(), rt_heap_delete(), rt_heap_alloc(),
rt_heap_bind()
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
505/516
Using rt_pipes
In the native Xenomai application, use the Pipe API
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
506/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
507/516
Books
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
508/516
Organizations
http://www.osadl.org
Open Source Automation Development Lab (OSADL)
Targets machine and plant control systems. Most member
companies are German (Thomas Gleixner is on board).
Supports the use of PREEMPT_RT and Xenomai and
contributes to these projects. Shares useful documentation
and resources.
They also organize a yearly Real Time Linux Workshop.
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
509/516
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
510/516
References
References
Embedded Linux
Experts
free electrons
Copyright 2004-2016, Free Electrons.
Creative Commons BY-SA 3.0 license.
Corrections, suggestions, contributions and translations are welcome!
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
511/516
Books
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
512/516
Web sites
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
513/516
International conferences
Useful conferences featuring embedded Linux and kernel topics
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
514/516
Last slides
Last slides
Embedded Linux
Experts
free electrons
Copyright 2004-2016, Free Electrons.
Creative Commons BY-SA 3.0 license.
Corrections, suggestions, contributions and translations are welcome!
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
515/516
Last slide
Thank you!
And may the Source be with you
free electrons - Embedded Linux, kernel, drivers and Android - Development, consulting, training and support. http://free-electrons.com
516/516