What is Linux Kernel? The Linux Kernel is a course in which you learn about the core of the Linux operating system. Its role is to provide all the necessary tools and services to user-space programs so that they can perform their tasks efficiently and quickly.
The Linux Kernel course provides, among other things, a solid approach to "Kernel Blocks" — different parts of the kernel such as File Systems, Networking Stacks, Scheduler, Kernel Device Drivers, Kernel Entities/Objects, achieved through System Calls.
Part of the functionality of the Linux Kernel involves controlling hardware through Kernel Device Drivers. These device drivers must be stable and sometimes even serve as modules for the kernel (Loadable Kernel Modules — LKMs). The development in the Kernel environment is challenging and unique.
During development, a wide range of topics needs to be considered, including Kernel Processes, HW/SW Interrupts, Synchronization, and more.
For comparison with developing programs as processes in the User Space environment: if a program has a bug or an unnoticed issue, only that process is affected. While this is very serious, it's unlikely to cause a system crash, and terminating that process can resolve the issue.
In contrast, a bug in the Kernel will inevitably impact the entire operating system. In the best case scenario, it might crash all processes in the Kernel.
Linux Kernel Server Management Course Objectives
The Linux Kernel course focuses on all the topics required for developing modules and device drivers in the environment of Linux Kernel servers. It doesn't require prior knowledge of Kernel development.
The course's objective is to provide engineers in the high-tech industry with theoretical and practical knowledge in the field, including the necessary tools and interfaces, resource management provided by the operating system, utilization of objects and services, usage of debugging tools, resolution of typical issues, Board Support Package (BSP) development, and more.
Upon completion of the course, a section will be dedicated to Linux Kernel & User Space development within the YOCTO environment.
The course focuses on ARM and Intel architectures, using development boards based on Cortex A-8 / i.MX-8. It emphasizes decoding "Kernel Blocks," optimal development of Kernel Device Drivers, and updated utilization of Linux Kernel APIs.
Throughout this course, students will learn:
- Kernel Development Environment setup
- Loadable Kernel Module
- Platform Device Drivers
- Devices, drivers, and bus matching
- Device tree mechanism
- Delay and timer management
- Kernel locking mechanism
Who is the Linux Kernel course for?
The Linux Kernel course is suitable for:
- Architects, software engineers, developers, and programmers interested in learning Kernel development along with developing Device Drivers.
- Embedded Bare-Board engineers who want to learn how to develop Device Drivers under the Linux operating system.
- Hardware, software, and computer science engineers interested in practical knowledge in the world of Linux Kernel.
Linux Kernel Course Prerequisites:
- Knowledge and experience in Linux operating systems.
- Knowledge and experience in programming User Mode Applications in Linux operating systems.
- Background and/or experience in C/C++ programming (mandatory for professional transition track).
Linux Kernel Course Description
The Linux Kernel course is a practical course that includes lectures and hands-on exercises.
The course duration is approximately 90 academic hours — 60 practical hours + 30 lab exercise hours.
The course includes:
- Learning Linux with exercises and solutions.
- Class exercises accompanied by explanations, homework assignments, and solutions on the course website.
- Course booklet – Learning Linux.
- Videos and presentations on the course website.
- Usage of development boards for working with Embedded Systems.
At the end of the Linux Kernel course, each student will complete a practical project that summarizes the acquired knowledge throughout the course.
The lectures take place once a week in the evenings or mornings.