Inside Linux: dive into system calls, processes, IPC and memory management with C programming.
Hands‑on labs with POSIX APIs, file I/O, signals, pipes and shared memory.
Explore scheduling, threads and synchronization in depth.
Gain practical experience by coding and testing user‑space applications (~70% labs).
How this helps: build a strong foundation for efficient, portable Linux applications.
Who it’s for: designed for individuals with basic C/Linux who want advanced programming skills.
By the end you’ll master Linux internals and create robust user‑level applications.
Curriculum
Intro to embedded Linux
- Analyze the main components of an embedded Linux project
Toolchains
- Types of toolchains
- Choosing the C library
- Toolchain components and tools
- Building a toolchain (focus on ARM)
- Static vs. dynamic linking
- Cross-compiling larger projects — an example
Bootloaders
- Understanding bootloaders
- Intro to device trees
- Das U-Boot: installation, configuration, main commands
Booting the kernel
- Booting on BeagleBone Black
- Booting on QEMU
A simple Linux application
- A very small introduction to POSIX IPC
- Build a simple IPC application used throughout the course
Debugging and core dumps
- Basic debugging
- Remote debugging
- Main GDB commands
- Analyzing core files and controlling CPU‑intensive apps
Intro to Yocto
- Installing Yocto
- Configuring, building and running
- Layers, BitBake and recipes
- Customizing images
Kernel programming preview
- Error numbers and kernel output
- task_struct overview
- Kernel linked lists
- Object‑Oriented mechanisms inside the kernel
Intro to modules
- A trivial example
- Compiling modules
- Modules vs. built‑in
- Module utilities
- Automatic loading/unloading
- Exporting symbols
Intro to device drivers
- Modules and device drivers
- Memory allocation/deallocation
- Transferring data between user‑space and kernel‑space
- Character devices
- Using the cache
- Interrupts and exceptions
- Deferrable functions
Optional modules
Suggested enhancements (optional)
- systemd service units and process supervision
- Deeper IPC: POSIX message queues, shared memory, semaphores
- Filesystems: /proc and sysfs basics for application developers
- Scheduling and priorities (nice/rtprio) for user-space apps
- gdbserver + VS Code remote debugging tips
- perf and a brief eBPF intro for troubleshooting
Course Day Structure
- Part 1: 09:00–10:30
- Break: 10:30–10:45
- Part 2: 10:45–12:15
- Lunch break: 12:15–13:15
- Part 3: 13:15–15:15
- Break: 15:15–15:30
- Part 4: 15:30–17:30