Get in Touch
 Duration 14 hours

Course Outline

1. Introduction to the Linux Kernel

  • Foundations of Embedded Linux
  • Architectural design of the Linux kernel
  • Distinguishing between user space and kernel space
  • Core responsibilities of the kernel
  • Workflows for kernel development
  • Survey of supported embedded hardware platforms

2. Setting Up the Development Environment

  • Preparing the workstation for development
  • Concepts of cross-compilation
  • Installation of necessary development tools
  • Configuring the BeagleBone Black development board
  • Setting up the serial console
  • Process of booting the target device

3. Obtaining and Understanding the Kernel Source

  • Structure of the Linux kernel source tree
  • Differences between stable and long-term support kernels
  • Methods for downloading kernel sources
  • Navigating the source code structure
  • Utilizing kernel documentation
  • Strategies for managing kernel versions

4. Configuring, Compiling, and Booting the Kernel

  • Using menuconfig for kernel configuration
  • Techniques for selecting specific kernel features
  • Process of cross-compiling the kernel
  • Generating kernel images
  • Installing kernel modules
  • Overview of the bootloader
  • Booting a customized kernel

5. Device Tree Fundamentals

  • The role and purpose of the Device Tree
  • Working with Device Tree Source (DTS) files
  • Understanding Device Tree Blob (DTB)
  • Concepts in hardware description
  • Modifying Device Tree files
  • Building and deploying Device Trees

6. Linux Kernel Modules

  • Architecture of kernel modules
  • Developing loadable kernel modules
  • Processes for loading and unloading modules
  • Configuring module parameters
  • Managing module dependencies
  • Interacting with loaded kernel modules
  • Techniques for module debugging

7. Linux Kernel Debugging

  • Implementing kernel logging with printk()
  • Utilizing the dmesg command
  • Applying dynamic debugging methods
  • Analyzing kernel panics
  • Interpreting Oops messages
  • Debugging with GDB
  • Using basic performance tracing tools

8. Character Device Drivers

  • The Linux device driver model
  • Concepts behind character devices
  • Procedures for registering drivers
  • Handling file operations
  • Implementing read and write operations
  • Utilizing the IOCTL interface
  • Managing memory within drivers
  • Proper driver cleanup procedures

9. Driver Integration and Hardware Access

  • Platform devices and corresponding drivers
  • Programming GPIOs
  • Mechanisms for interrupt handling
  • Using timers and deferred work queues
  • Techniques for accessing hardware registers
  • Working with memory-mapped I/O

10. Version Control with Git

  • Core Git concepts
  • Managing kernel source code with Git
  • Techniques for branching and merging
  • Process for creating patches
  • Methods for reviewing changes
  • Collaborative practices in kernel development

11. Hands-on Kernel Development Labs

  • Practical exercise: Configuring a custom kernel
  • Practical exercise: Building and deploying the kernel
  • Practical exercise: Creating a simple kernel module
  • Practical exercise: Developing a basic character device driver
  • Practical exercise: Modifying Device Tree files
  • Practical exercise: Debugging kernel issues on BeagleBone Black

12. Best Practices and Summary

  • Adhering to kernel coding style guidelines
  • Strategies for writing maintainable drivers
  • Identifying and avoiding common development pitfalls
  • Accessing kernel documentation resources
  • Understanding the open-source contribution workflow
  • Recap of key concepts
  • Session for questions and answers
  • Recommendations for next steps in Linux kernel development

Requirements

Participants should possess fundamental knowledge of operating a GNU/Linux system.

Number of participants


Price per participant

Testimonials (2)

Upcoming Courses

Related Categories