2nd course in the Advanced Embedded Linux Development​.

Instructor: Dan Walkes

This course provides an introduction to Kernel programming for the Linux operating system, and the development of Linux kernel drivers for Embedded devices. The Yocto build system is introduced, which students use to build their own custom Embedded Linux system through programming assignments.

Prior knowledge needed: 

Learning Outcomes

  • Describe the fundamentals of Linux Kernel driver development, the basic components of a Linux Kernel driver, and utilities use to build and load Linux Kernel Modules. Develop modifications to the socket application. Setup and configure a Yocto based embedded system build.
  • Describe fundamental driver data structure and call back functions. Describe file operations used to interact with Kernel drivers from userspace. Describe the basics of debugging in the kernel and how this differs from debugging in Userspace. Design a circular buffer in C code. Build an embedded image using Buildroot or Yocto which includes a modified out of tree Linux device driver.
  • Describe concurrency considerations for Linux kernel development. Describe the difference between atomic and non atomic context. Design a linux kernel driver which interacts with user space and the socket application used in previous assignments. Build into a Buildroot or Yocto based image.
  • Describe how to use the ioctl command with a Linux kernel driver. Describe rules for sleeping and waking up in a Linux kernel driver. Describe how to implement block and non-blocking I/O from a Linux kernel driver. Design a modification to your linux kernel module and socket application which uses ioctl to communicate between user space and kernel. Build this into a new Embedded System image using Buildroot or Yocto build systems.

Syllabus

Duration: 9 hours

In this module, you will learn the basics of Linux Device Drivers, including how to build and run a Linux Device Driver.  You will modify the socket application you developed in the previous course and add threading.  You will also be introduced to the Yocto Project and build a custom Yocto image which includes your custom socket application developed in the previous course.

Duration: 8 hours

In this module, you will learn about the different types of Linux Kernel drivers and the kernel support for character device drivers.  You will learn about fundamental driver data structures and functions for interacting with user space.  You will understand the basics of Kernel debugging and how this differs from application debugging.  You will implement a unit-tested circular buffer which will be used in future assignments.  Finally, you will build a Yocto embedded device image with support for an out of tree kernel module.

Duration: 12 hours

In this module, you will learn the basics of concurrency in the Linux kernel, and how to use semaphore and mutex in your device driver to design for concurrent access.  You will learn the difference between atomic and non atomic context and strategies for locking in each context.  You will modify your socket application to interact with a custom character device based on your tested circular buffer implementation using the concurrency concepts discussed in the module.

Duration: 12 hours

In this module, you will learn the purpose and use of the ioctl command for Linux drivers and how the ioctl command is implemented in a driver.  You will learn the basics of sleeping and waking up in the Linux kernel and how to handle blocking and non-blocking IO.  You will modify your custom Linux kernel driver and Linux application to include ioctl support.

Duration: 1 hour

Demonstrate mastery of the material presented in this course.

To learn about ProctorU's exam proctoring, system test links, and privacy policy, visit www.colorado.edu/ecee/online-masters/current-students/proctoru.

Grading

Assignment
Percentage of Grade
Q​uiz: Intro to Device Drivers
3.33%
Q​uiz: Building and Running Kernel Modules
3.33%
Assignment 6 Parts 1 and 2
16.25%
Q​uiz: Character Device Drivers
3.33%
Q​uiz: Kernel Debugging Techniques
3.33%
Assignment 7 Parts 1 and 2
16.25%
Quiz: Concurrency
3.33%
A​ssignment 8: Char Driver and Multithreading Concepts
16.25
Q​uiz: Advanced Char Driver Operations
3.33%
A​ssignment 9: Advanced Char Driver Operations
16.25%
Final Exam
15%

Letter Grade Rubric

Letter Grade 
Minimum Percentage

A

93%

A-

90%

B+

87%

B

83%

B-

80%

C+

77%

C

73%

C-

70%

D+ 67%
D 60%

F

0%