Course Outline

Introduction

  • quick history of GNU/Linux
  • licensing
  • kernel versioning
  • release cycle
  • kernel trees
  • mainline
  • kernel vs. user space
  • mechanism vs. policy
  • kernel driver alternatives
  • RTOS vs. Linux

Memory Management

  • Virtual memory vs. physical memory
  • memory allocation in kernel
  • pages
  • zones
  • API
  • slab

Kernel Patch

  • life cycle
  • git
  • kernel source
  • create patch
  • check patch
  • fix patch
  • ship patch
  • audited code

Kernel Modules

  • get kernel sources
  • configure/build/install
  • device drivers (statically linked, loaded at runtime)
  • init/exit
  • licensing
  • EXPORT SYMBOL GPL
  • out of tree makefile
  • module-init-tools
  • module in kernel tree
  • Kconfig
  • parameter passing
  • sparse

Char Drivers

  • architecture
  • user/kernel interface
  • I/O subsystem
  • VFS
  • sysfs (devices, bus, drivers, classes),
  • kobject/ktype/kset
  • linux kernel driver model
  • device files
  • char driver
    • initialization
    • registration
    • open, release
    • cdev, cdev add, cdev del,...
    • major/minor numbers
    • udev, udevmonitor, udevadm

Advanced Charachter Driver Operations

  • ioctl
  • unlocked ioctl
  • compat ioctl
  • user space API
  • kernel space API
  • process lifecycle
  • sleeping/blocking
  • sleeping/waking up
  • wait queue
  • thundering herd
  • poll/select

Kernel Debugging

  • bug
  • debugging
  • debugging the kernel
    • binary search with git
    • debug support from kernel
    • printk syslogd, klogd, loglevels, rate limit, debug levels, debug selective subsystems
    • debugging by querying debugfs
    • oops debugging, asserting oops
    • Magic SysRq Key
    • kgdb/kdb
    • JTAG

Tracing

  • gcov
  • lcov
  • oprofile
  • ftrace
    • nop tracer
    • function tracer
    • sched switch tracer
    • function graph tracer
    • dynamic tracer
  • trace-cmd/kernelshark
  • perf
  • LTTng

Interrupts

  • interrupts vs. polling
  • interrupt
  • program sections
  • reentrancy
  • events
  • interrupt handler
  • shared interrupt handler
  • interrupt flow
  • interrupt control

Deferring Work

  • top/bottom halves
  • softirqs
  • tasklets
  • work queues
  • threaded interrrupts

Concurrency

  • critical region/section
  • atomic
  • race condition
  • synchronization
  • locking
  • locking solutions
  • deadlock
  • contention
  • what to lock?
  • what can be used?
    • atomic operations
    • spin locks
    • reader-writer spin locks
    • semaphore
    • binary semaphore
    • mutex
    • reader-writer semaphore
    • completion variables
    • sequential locks
    • disable preemption
    • orderig and barriers

Time

  • HZ
  • Jiffies
  • big/small delays
  • kernel timers

Hardware I/O

  • I/O Ports
  • I/O Memory
  • How to deal with side effects accessing registers?

User-Kernel Communication

  • put(get)_user()
  • copy to(from)_user()
  • Kernel I/O
  • memory mapping
  • procfs
  • sysfs
  • debugfs
  • relayfs
  • netlink
  • ioctl

Portability

  • word size
  • opaque types
  • signed/unsigned char
  • data alignment
  • integral promotion
  • code reuse
  • endianess
  • system tick
  • page size
  • instruction ordering
  • SMP/preemption/high memory

Except where otherwise noted content and this course outline are licensed under Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0).

Requirements

  • Basic familiarity with using a GNU/Linux system as an end user
  • Basic familiarity with a command line shell
  • Basic knowledge of user space / application development
  • Intermediate C programming knowledge
  • Should have attended Embedded GNU/Linux Systems Architecture before (strongly recommended!) and/or have a good understanding of the topics outlined there
  35 Hours
 

Testimonials

Related Courses

Advanced Flutter

  14 hours

BLoC Pattern

  14 hours

Build Native iOS and Android Apps with Flutter

  14 hours

Flutter Development Bootcamp with Dart

  35 hours

Buildroot: a Firmware Generator for Embedded Systems

  7 hours

Ionic1: Build a Mobile App with Ionic 1 and Angular 1

  14 hours

Ionic2

  14 hours

Ionic2 and Angular2

  14 hours

LEDE: Set Up a Linux Wireless Router

  7 hours

Shadowsocks: Set Up a Proxy Server

  7 hours

Meteor for Cross-Platform Development

  14 hours

Meteor and React

  14 hours

IBM MobileFirst Platform for Hybrid Mobile Application Development

  21 hours

Xamarin for Cross-Platform Development

  21 hours

Yocto Project

  28 hours