Get familiar with device driver development for the Linux kernel
Duration: 5 days
Training materials: slides, practical labs, lab data.
Written language: English
Objectives and target audience
This course targets engineers who wish to develop or improve device drivers in the Linux kernel, for projects on embedded platforms, or on the traditional PC platform. In five days, through theory and practical labs, the course makes you familiar with the essentials of kernel development: kernel architecture, the main APIs, integration of device drivers with other parts of the kernel and with user applications.
At the end of this course, you will be ready to work on Linux device driver development projects.
Here are the main topics that we cover:
Introduction to the Linux kernel
Kernel source code
Configuring, compiling and booting the kernel
Linux kernel modules
Memory management and accessing hardware
Character device drivers
Processes, scheduling, waiting for resources and interrupt management
Kernel debugging techniques
Kernel architecture for device drivers. Illustration by many examples in the kernel code.
Kernel booting details
Porting the Linux kernel to a new hardware platform
Working with the community
Managing sources with git.
See the detailed agenda.
All the training materials we use during this course are freely available. Before the session, you can then check that they correspond to your needs.
Each lecture in our course is followed by a practical implementation, representing 50% to 60% of the whole course time.
Labs are performed an embedded ARM board (BeagleBone Black). You will get familiar with the generic mechanisms and interfaces provided by the Linux kernel, through the implementation of device drivers for an I2C device (Nintendo Wii Nunchuk in our labs) and for the serial ports of the TI AM 335x CPU. This experience will help you to implement device drivers for any type of devices.
Participants need to be familiar with the UNIX or Linux command line interface. Those who aren’t are asked to do some self training on the topic, for example by using our training materials. This way, they won’t waste time during practical labs because of issues using the operating system environment.
Participants must also have solid experience in programming in the C language. In particular, they must be familiar with creating and dealing with complex data types and structures, with pointers to such symbols, as well as with function pointers.
If you develop on embedded hardware and lack experience in embedded Linux development, we also recommend to take our Embedded Linux course first. This is not a prerequiste as you will be given all the instructions to operate your embedded Linux system, but you it will help you to understand the environment you are using, allowing you to concentrate on kernel programming. In addition, you will need embedded Linux knowledge anyway if you are involved in the development of drivers for embedded products.