After a “Refresher to Embedded Linux (2 days)” you’ll see “How the Yocto Project® works (3 days)”
Course Objectives
- You already know the basics of (Embedded) Linux and just want to refresh your knowledge.
- After a short (2 days) “Introduction to Embedded Linux”, we will show you (3 days) how the “Yocto Project®” works.
- After the “refresher” we will see how BSP / Framework maintainers can use the “Yocto Project®”.
- We’ll also see how developers can use the SDK who may not even need to know they are using it.
Description
This five-day class demonstrates the concepts of “Embedded Linux” and the “Yocto Project®” using practical exercises in combination with theory. The course is designed to get you up to speed quickly.
Frequently asked questions like those are answered:
- What is Linux?
- Where to get u-boot/the kernel from? configuration / build / install
- Why would you use upstream components?
- How does interprocess communication work and which mechanisms to use/avoid?
- Is it really necessary to use another version of the toolchain/libraries/packages for each Embedded Linux project and on top of that to follow a different workflow?
- Can you ensure that the development environment is identical for all developers/suppliers and that you can still produce identical builds like today in 10+ years from now?
- Can the Yocto Project® help you with Open Source license audits or do you prefer a copyright troll instead?
- … and much more
Hands-on sessions are performed on the host, in a docker container, and on target hardware (e.g. i.mx6). After the workshop, you will be able to download a docker container based on Ubuntu with all dependencies pre-installed plus the examples to work with the course material on your own. Please note that for the first two days ”Refresher to Embedded Linux” it would be ideal if you already have some (Embedded) Linux experience. If not we’ll get you up to date in two days. This should enable you to follow the second part of the course dealing with the “Yocto Training”.
In case you search for an Embedded Linux beginner course, we’ll recommend “Embedded Linux – From Systems Architecture to Real-Time (5 days)” or “Introduction to Embedded Linux in Theory and Practice – a Crash Course (3 days)”.
Prerequisites
- Basic familiarity with using a Linux system (e.g. Ubuntu) as an end user in user space
- Basic familiarity with a command-line shell
- Basic knowledge of user/kernel space programming with Linux
- Intermediate C programming knowledge
- Ideally, you have basic experience with Embedded Linux (kernel, userspace, root file-system, tools) to follow this training.
- It helps to be familiar with ”Embedded Linux – From Systems Architecture to Real-Time (5 days)” or ”Introduction to Embedded Linux in Theory and Practice – a Crash Course (3 days)” but even if you are not we’ll try to get you up to speed in the first two days.
- It might be helpful if you attended ”Embedded Linux Kernel Internals and Device Drivers (5 days)”, but that’s not a prerequisite. It’s sufficient to know how to build the Linux kernel, in/out of tree kernel drivers, and the flattened device tree (fdt) to follow the board support package (BSP) and kernel chapters of this workshop. We’ll have a look at this as well during the first two days.
Course Roadmap
Who should attend?
You think about using Linux for your embedded project or already use it for your projects. You have probably heard about the Yocto Project®, but did not dare to have a closer look into it, or had difficulties using it. Besides you want a refresher on Linux interprocess communication and real-time. You don’t know whether and how your daily workflow can be accommodated in the Yocto Project® and generally find the Yocto Project rather complicated. Why do we need all this since up to now everything was (supposedly) much easier? After the training, you should be able to decide whether you need the Yocto Project® or not. The workshop is aimed at software-, development-, system engineers, testers, administrators, engineers, and other parties interested in the Yocto Project®, with a basic knowledge of Embedded Linux who want to refresh their knowledge.
Course Outline
Day 1
Introduction
- Introduction | History
Eval Board
- How does Linux boot on a PC and on the evaluation board? | Boot sequence | SD card partitions | See it booting
Stuff needed
git |
u-boot- scripting | fancy stuff | checkout | config | build | install
- kernel
checkout
| config-kconfig |
build-kbuild |
kernel modules | install
- Flat device tree (fdt)
- investigate | build | install
Kernel Modules
init
/exit |
Licensing |tainted
module/kernel| EXPORT_SYMBOL |
out of tree
.ko
makefile- module-init-tools
- put the module in the kernel tree
- parameter passing
Character Driver
- Device Files | Device Types | Device Nodes major/minor | Kernel Driver Interface
- Device Driver: Intro | Registration | Initialization | Open/Release
Miscellaneous Character Drivers
- Simple tools
lsof | ltrace | strace | procfs | top | netstat | syslog |
…
- Advanced tools
- What’s a debugger?
gdb
:gdb
on the target system| gdb
forremote debugging
Kernel Debugging (optional)
- Debugging Intro
| kgdb
/gdb
+agent-proxy |
JTAG
Day 2
Process and Inter-Process Communication
- Linux architecture | operating system |
scheduler
– priorities –scheduling
classes | process,task
,thread
| errno | fork |
process termination | process states | zombies | watch processes | simple IPC- shell redirection | shelling out | tmpfiles
- advanced IPC
pipes
| signals | interrupted system calls |message queues
| semaphores | mutex |shared memory
|sockets
| select | poll
- other IPC methods | IPC techniques which should be avoided
Real-Time
- prerequisites
interrupts
| re-entrant code
- Real-Time Intro
- What is Real-Time? | What is hard Real-Time?
- Real-Time Linux
- Hypervisor | Dual kernel | Fully Preemptive Kernel
- Degrees of Real-Time behavior
- explicit/implicit preemption points | real-time preemption patch | fully preemptive kernel | hard real-time extensions
- Dual Kernel: Adeos/Xenomai
- Adeos patch | Xenomai | patch/config/build kernel | test it on the target system
- Real-Time Myths
Day 3
Yocto Introduction
- What is Yocto? | What is the Yocto Project®? (features/challenges) | Some tools hosted/used by the Yocto Project® (Poky | BitBake | OpenEmbedded-Core | Metadata) | Why would you use the Yocto Project®?
How to become part of our Yocto Project® community? (optional)
- First steps | How to get in touch | Participate | Contribute | Social Media | Events
Development Environment
- What is needed for a Yocto Project® build? | Layer versions/dependencies | host dependencies | config files | host/kernel dependencies
The Yocto Project® Workflow
- Intro
- Workflow | OpenEmbedded architecture
- Configuration (User) | Metadata (Recipes) | Machine (BSP) |
Distribution (Policy)
- Features | Recipe Versioning |
Layers
- Sources
- Source fetching | Patching | Configure/Compile/Staging
| SSTATE |
Pseudo| recipetool |
Examples of Recipes| PACKAGECONFIG |
Packages and their contents | Output analysis/Packaging | How to generate
| SDK Generation |Images
Tasks
- Customization of
Images
(Intro| local.conf | IMAGE_FEATURES |
customimage
recipes (.bb files) | custom packagegroups)
Day 4
BitBake
- History
- Syntax (Variable Expansion | Variable Assignment |
Prepend/Append
|Remove
|Variable Flags
| Conditional Syntax –OVERRIDES
) - BitBake Debugging (debug
level
| find recipes/images
/packagegroups | BitBake environment/tasks
/logging
|force build
/force building a specifictask
| cleansstate |
How to invalidate thestamp | devshell |
dependencies | packages | kill all BitBake instances | BitBake graphical wrapper) Cleaning
(gain disk space |rebuild
)
Layers
- Intro
| bitbake-layers
tool |dynamic layers
Board Support Package (BSP)
- Intro | System Development Workflow |
BSP Developer’s Guide
(bsp-tool
– ported to recent Poky versions) | BSP creation | non-mainline kernel patches
Kernel
- Intro | System Development Workflow |
Kernel Development Manual
(defconfig | defconfig
+ configuration fragment |in tree
kmod |out of tree
kmod | fdt classic | fdt withdevicetree.bbclass |
…)
Day 5
Software Development Kit
- Intro |
cross-development
Toolchain
| Sysroot| BBCLASSEXTEND |
Multilib | The QEMU Emulator | SDK-Eclipse Yocto Plug-in (deprecated) | User Space Tools | Installing SDKs & toolchains - Cross-Toolchains/Software Development Kits
- Building a Cross-Toolchain installer
- Using the Standard Software Development Kit (Cross-Toolchain + Makefile/Autotools/Autotools lib + App | recipes)
- Building/Using the Extensible Software Development Kit
Package Management
- SW update vs. Package Management
|
Working with Packages| ipk |
creating apackage feed
|
installing a package withopkg
on the target system
Licensing
- Intro
|
Add custom license|
Add commercial license|
Firmware License|
Open Source License Compliance
Devtool
- Intro
|
Add recipe/Build/Deploy|
Create/Addlayer
|
Finish
|
Modify/Update-Recipe|
Build/Run
Build:|
Image
Related Courses
- ”Embedded Linux – From System Architecture to Real-Time (5 days)”
- ”Refresher to Embedded Linux & Intro to the Yocto Project (5 days)”
- ”Embedded Linux Kernel Internals and Device Drivers (5 days)”
- ”The Yocto Project – A thorough Overview (4 days)”
- ”Introduction to Embedded Linux & Real-Time, bird’s eye view of the Yocto Project (4 days)”
- ”Introduction to Embedded Linux in Theory and Practice – a Crash Course (3 days)”
- ”(Embedded) Linux debugging (3 days)”
- ”FreeRTOS in Theory and Practice (3 days)”