Home > Linux device drivers

Linux device drivers

In this course attendees will learn how to develop and customize Linux device drivers. 

The following topics will be covered:

  • Introduction to the Linux kernel architecture.
  • Detailed study of the Linux kernel source code, configuring, compiling and booting the Linux kernel in the development kit.
  • Development of kernel modules, compiling, installing, loading and testing the module in the development kit.
  • Integrating a module in the Linux kernel sources.
  • Basic architecture of a device driver, how hardware access works on Linux, developing a character device driver.
  • Memory management in the Linux kernel. Methods to access port I/O and memory-mapped I/O devices on Linux.
  • Kernel frameworks, studying the framebuffer, leds and input frameworks, integrating a driver to the kernel leds framework.
  • GPIO Management API (gpiolib), adapting the LED driver to access the GPIO APIs.
  • Architecture of the driver model and the kernel bus infrastructure, access to the I2C bus and implementing I2C device drivers, working with platform devices.
  • Introduction to the device tree, adapting a driver to work with the device tree.
  • Processes management in the Linux kernel, the states of a process, implementing a kernel thread, using wait queues and completion variables to synchronize events.
  • Interrupt management in the Linux kernel, registering and implementing an interrupt service routine in a device driver, implementing bottom halves through tasklets, work queues and threaded IRQs.
  • Concurrency management, restrictions in a multithreaded environment, using atomic operations and protecting concurrent access with semaphores, mutexes, spinlocks and other synchronization mechanisms, analyzing the use of locking mechanisms by a GPIO expander driver.
  • Tools and techniques to debug the Linux kernel, debugging with messages, using the debugfs API and SYSRQ commands, understanding kernel oops and kernel error messages, setting up a debugging environment with kgdb, instrumenting the kernel with kernel probes, tracepoints, ftrace, trace-cmd, kernelshark, etc.
  • Tips and resources to work with the Linux kernel, how to report problems and get help, sending patches and contributing.

For more details on the content of this training session, you can download the full agenda and the training slides (in Portuguese).

The slides of this training session are released under the Creative Commons BY-SA 3.0 license, and the source code can be found here.

Some pictures of training sessions already presented are available here.


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. Also, knowledge on embedded Linux development might help understand some concepts, although it is not a requirement.


All required development tools and equipment will be provided by Embedded Labworks.


The course material contains the slides of the presentations, 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.

Development kits

The training exercises will be performed on 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.

Open sessions

The 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 participating in the training but there is no open session available, please fill the pre-registration form clicking here. We will contact you as soon as a new training session is opened.

In-company sessions

If you plan to train your team or a group of people, consider a training session in your company.

In-company classes have the same characteristics of an open training session. In this model, the company is responsible for providing the necessary resources needed for the training, including 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 in a specific way, like preparing the training material for a specific hardware platform or developing additional content. Do not hesitate to contact us by e-mail or leaving a message in the contact page.

Take the training to your city

You can take the training session to your community at any city in Brazil!

Can't afford to take the course in São Paulo? Do you have a study group and want to learn more about a specific technology? Do you coordinate or participate in the coordination of a course at your university and would like to train the teachers and students? Do you have a space and would like to get some friends together and spend enjoyable hours learning about embedded systems?

Send an e-mail or leave a message in the contact page. Send the name of the course you are interested and the city. If we can get together a group of interested people, we can bring the training to your city!

Customers who already attended

If you have any question, please send an e-mail or leave us a message on the contact page.

Contact us