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
Delivery Options
Private Group Training
Our identity is rooted in delivering exactly what our clients need.
- Pre-course call with your trainer
- Customisation of the learning experience to achieve your goals -
- Bespoke outlines
- Practical hands-on exercises containing data / scenarios recognisable to the learners
- Training scheduled on a date of your choice
- Delivered online, onsite/classroom or hybrid by experts sharing real world experience
Private Group Prices RRP from €11400 online delivery, based on a group of 2 delegates, €3600 per additional delegate (excludes any certification / exam costs). We recommend a maximum group size of 12 for most learning events.
Contact us for an exact quote and to hear our latest promotions
Public Training
Please see our public courses
Testimonials (5)
Edward is an awesome facilitator
Zibusiso Ncube - Agricatural Research Council
Course - Ionic 4 and Angular for Developers
Maybe more exercises could be better for lerning but the time was to little
Gianpiero Arico' - Urmet Spa
Course - Embedded Linux Systems Architecture
Miguel's knowledge of the subject was extensive. He made the training easy to understand and the flow was balanced; adding on to each section with new features as needed. He covered everything that was asked and answered each and every question thoroughly. It was a very pleasant experience.
Paul Coaton - SEMPCheck Services
Course - Flutter Development Bootcamp with Dart
That the trainer adapts to our needs
Eduardo Fontecha - ORMAZABAL PROTECTION & AUTOMATION S.L.U.
Course - The Yocto Project - An Overview - hands-on
The trainer was enthusiastic, kind, and loved the topic