Advanced Embedded Linux and BSP development (Course 107 – 40 Hours)


Linux is an excellent OS for embedded devices. Good knowledge of Linux layers from the kernel to the user application is a key to the success of the final product. Porting Linux to a custom board can be also a complex task depending on the differences between the evaluation board and the custom board. This course goes deep inside the development process of an Embedded Linux system and covers many practical tasks in user space and kernel space. It covers how to port Linux to a custom board, how to use Linux effectively and some patterns and good practices.

Course Objectives:

  • Building BSP (board support package)
  • Advanced topics in user space programming
  • Linux network subsystem
  • Hard real-time in Linux
  • Practices and patterns

Who Should Attend:

Embedded Linux developers and software engineers who want to write more effective code in user and kernel space.


Students should have a working knowledge with embedded Linux (course 105).

Course Contents:

Embedded Linux refresher  

  • Processes and threads
  • Synchronization and IPC
  • Writing a character device driver

User space programming – Advanced topics

  • Writing a user space device driver
  • using select/h4oll/epoll
  • patterns and practices
    • processes and threads
    • synchronization objects and IPC
  • handling signals
  • advanced networking programming
  • debugging user space applications
  • simulating custom hardware

Linux kernel  

  • kernel configuration
  • special configuration options
  • applying external patches
  • building the kernel
  • debugging configuration options
  • kernel boot process in details
  • Adding a kernel module statically
  • debugging kernel components

File system  

  • building file system - good practices
  • choosing the required components for development and production
  • building FS using buildroot
  • choosing the best FS type
  • flash file systems
  • initramfs 

Building Linux Board support package (BSP)  

  • Identifying the differences between the evaluation and the custom boards
  • adapting the boot loader to the new board
  • initialize the hardware properly
  • cpu, clock, timers and interrupts
  • memory devices - flash and ram
  • peripherals
  • platform devices and drivers
  • adding support for completely new hardware
  • I2C and SPI (user/kernel)

Moving data between kernel and user space  

  • mapping pages
  • net-links
  • UDP sockets
  • ioctl
  • virtual file systems
  • signals and events

The Block later and Linux VFS   

  • block layer
  • the page cache
  • linux VFS
  • writing linux file system

Linux Networking internals  

  • network subsystem
  • inside the network stack
  • frame transmission and reception
  • writing a network device driver
  • writing network filters and firewall
  • handling packets on user space
  • adding custom protocols

Debugging and trace tools  

  • debugging tools
  • profiling tools - kernel and user
  • tracing tools - kernel and user
  • misc. tools in the development process


Linux and Hard Real-time  

  • real time requirements
  • kernel preemption modes
  • RT-Preempt patch
  • Xenomai

Graphics, GUI and multimedia   

  • QT
  • DirectFB
  • SDL
  • V4L
  • other useful libraries

Download the PDF
שליחת הודעה
טלפון - 04-8571119
פקס - 04-8570307
דוא"ל -
דוא"ל -
כתובת - דרך בר יהודה 52, נשר
בית עופר - קומה שניינה