Objective
In this course, attendees will learn how to develop and customize embedded Linux systems.
Detailed agenda
- Introduction: history of free software and the GNU/Linux operating system, main characteristics of the Linux kernel, myths and truths about the usage of Linux on embedded systems and commercial products, components of a system with embedded Linux, hardware for embedded Linux, characteristics of a toolchain, responsibilities and characteristics of the bootloader, introduction to the Linux kernel, rootfs and file systems, build systems.
- Toolchain: definition and characteristics, toolchain types, basic components of a GNU-based toolchain (GCC, binutils, etc.), installing and using a pre-built toolchain, compiling your own toolchain with crosstool-ng.
- Bootloader: characteristics and responsibilities of a bootloader, boot process on x86, boot process on ARM, popular bootloaders on embedded Linux, introduction to U-Boot, compiling and configuring U-Boot.
- Kernel: overview of the Linux kernel, components and basic architecture, process management and scheduling, MMU and memory management, hardware interface and I/O management, kernel source code, development process, configuring and compiling the Linux kernel, device tree, kernel command line parameters.
- Rootfs: introduction to file systems, mount points, the root file system and rootfs mounting mechanisms, organization of the rootfs and main directories, device files, virtual file systems (proc and sysfs), boot process and startup scripts, configuring and compiling BusyBox.
- Kernel modules: monolithic kernel and microkernel, characteristics and advantages of kernel modules, compiling and installing modules, module dependencies, loading and unloading modules.
- File systems: types of storage devices, file systems for block devices, journaling, file systems for NAND/NOR flash memories, tips and tricks when using flash memory-based storage devices, read-only file systems, volatile file systems.
- Build systems: using pre-built Linux distributions, building custom distributions, build systems, Yocto Project/Open Embedded and Buildroot, configuring and compiling Buildroot.
- Application development: selecting open-source software components, understanding software licenses, build system mechanisms for software (makefiles, autotools, cmake, etc), cross-compilation with make and Autotools.
- Development of graphical applications: the Linux graphical layer, DRM and framebuffer subsystems, graphical server concepts, X11 and Wayland, graphical toolkits, SDL, GTK, Flutter, Qt, Web applications.
- Application debugging: debugging on embedded Linux, remote debugging with GDB, core dump analysis, memory usage analysis with Valgrind, tracing applications with strace and ltrace.
- Application development tools: programming languages, version control tools, integrated development environments (IDE).
- Final considerations: additional links and resources, book recommendations, questions and final comments, closing.
For more details on the content of this training, you can download the agenda and the slides (in Portuguese).
Additional information
Students, engineers and software developers of embedded systems projects.
Attendees should know the basics of the GNU/Linux command line interface and have intermediate knowledge on developing programs in C language.
The course material contains the slides of the presentations, the book of activities and exercises, reference guides, and additional reference documents. All materials will be provided in an electronic format at the start of the training session.
The training exercises are executed in the Colibri i.MX6 Toradex module with the Aster carrier board and an expansion board with a lot of peripherals, including LEDs, buttons, trimpot, buzzer, UART, temperature sensor, 7-segment display, GPIO expander and accelerometer. The development kit is loaned to students to carry out practical activities during the training. If necessary, and depending on the needs of the contracting company, the training can be carried out on another hardware platform.
The training can be presented in the following languages: Brazilian Portuguese and English.
If you plan to train your team or a group of people, consider a training session inside your company. In an in-company training session, the company is responsible for providing the necessary resources needed for the training, including the training room, data projector and development machines. This model also brings big advantages for the company, since the cost of transportation and accommodation of several employees is reduced only to the instructor. If your company has a special requirement, we can study a program that meets your needs, like preparing the training material for a specific hardware platform or developing additional content. Don’t hesitate to get in touch via email or the contact page .
Open training sessions are presented in a pleasant environment, with a properly equipped laboratory and Internet access. Classes are usually presented full-time, with a stop for lunch and a coffee break in the morning. If you are interested in attending an open session but there are no classes available, send a message via the contact page and we will notify you as soon as new classes open.
Due to the need to use a development kit to carry out practical activities, this training cannot currently be carried out online.
Photos gallery
Some pictures from previous training sessions: