Course Code: ldd
Duration: 35 hours
Prerequisites:

  • 基本熟悉作为终端用户使用GNU/Linux系统
  • 基本熟悉命令行shell
  • 具备用户空间/应用开发的基础知识
  • 具备中级C语言编程知识
  • 建议先参加嵌入式GNU/Linux系统架构课程(强烈推荐!),或对该课程所涵盖的主题有较好的理解

Overview:

描述

本课程为期5天,通过动手练习与讲解相结合,深入探讨GNU/Linux内核与设备驱动开发的概念。课程旨在让您快速上手,通过理论与实践相结合的方式,介绍编写GNU/Linux设备驱动所需的过程、概念和命令。

不要重复造轮子,而是向经验丰富的培训师学习,带回家实际应用的知识,并能够在自己的嵌入式开发项目中有效运用。

适合人群?

对开发或评估GNU/Linux设备驱动感兴趣或负责相关工作的人员,如软件工程师、现场工程师、(项目)经理、硬件工程师。

Course Outline:

简介

  • GNU/Linux的简史
  • 许可
  • 内核版本控制
  • 发布周期
  • 内核树
  • 主线
  • 内核与用户空间
  • 机制与策略
  • 内核驱动替代方案
  • RTOS与Linux

内存管理

  • 虚拟内存与物理内存
  • 内核中的内存分配
  • 页面
  • 区域
  • API
  • slab

内核补丁

  • 生命周期
  • git
  • 内核源码
  • 创建补丁
  • 检查补丁
  • 修复补丁
  • 提交补丁
  • 代码审计

内核模块

  • 获取内核源码
  • 配置/构建/安装
  • 设备驱动(静态链接,运行时加载)
  • init/exit
  • 许可
  • EXPORT SYMBOL GPL
  • 外部树makefile
  • module-init-tools
  • 内核树中的模块
  • Kconfig
  • 参数传递
  • sparse

字符驱动

  • 架构
  • 用户/内核接口
  • I/O子系统
  • VFS
  • sysfs(设备、总线、驱动、类)
  • kobject/ktype/kset
  • Linux内核驱动模型
  • 设备文件
  • 字符驱动
    • 初始化
    • 注册
    • open, release
    • cdev, cdev add, cdev del,...
    • 主/次设备号
    • udev, udevmonitor, udevadm

高级字符驱动操作

  • ioctl
  • unlocked ioctl
  • compat ioctl
  • 用户空间API
  • 内核空间API
  • 进程生命周期
  • 睡眠/阻塞
  • 睡眠/唤醒
  • 等待队列
  • 惊群效应
  • poll/select

内核调试

  • 调试
  • 内核调试
    • 使用git进行二分查找
    • 内核的调试支持
    • printk syslogd, klogd, 日志级别, 速率限制, 调试级别, 选择性子系统调试
    • 通过debugfs查询调试
    • oops调试, 断言oops
    • Magic SysRq Key
    • kgdb/kdb
    • JTAG

跟踪

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

中断

  • 中断与轮询
  • 中断
  • 程序段
  • 可重入性
  • 事件
  • 中断处理程序
  • 共享中断处理程序
  • 中断流程
  • 中断控制

延迟工作

  • 上半部/下半部
  • 软中断
  • 任务队列
  • 工作队列
  • 线程化中断

并发

  • 临界区/段
  • 原子操作
  • 竞态条件
  • 同步
  • 锁解决方案
  • 死锁
  • 争用
  • 锁什么?
  • 可以使用什么?
    • 原子操作
    • 自旋锁
    • 读写自旋锁
    • 信号量
    • 二进制信号量
    • 互斥锁
    • 读写信号量
    • 完成变量
    • 顺序锁
    • 禁用抢占
    • 排序与屏障

时间

  • HZ
  • Jiffies
  • 大/小延迟
  • 内核定时器

硬件I/O

  • I/O端口
  • I/O内存
  • 如何应对访问寄存器的副作用?

用户-内核通信

  • put(get)_user()
  • copy to(from)_user()
  • 内核I/O
  • 内存映射
  • procfs
  • sysfs
  • debugfs
  • relayfs
  • netlink
  • ioctl

可移植性

  • 字长
  • 不透明类型
  • 有符号/无符号字符
  • 数据对齐
  • 整型提升
  • 代码复用
  • 字节序
  • 系统时钟
  • 页面大小
  • 指令顺序
  • SMP/抢占/高内存

除非另有说明,本课程内容及大纲均遵循署名-非商业性使用-相同方式共享 4.0 国际 (CC BY-NC-SA 4.0)许可。

Sites Published:

United Arab Emirates - Embedded GNU/Linux Kernel Internals and Device Drivers

Qatar - Embedded GNU/Linux Kernel Internals and Device Drivers

Egypt - Embedded GNU/Linux Kernel Internals and Device Drivers

Saudi Arabia - Embedded GNU/Linux Kernel Internals and Device Drivers

South Africa - Embedded GNU/Linux Kernel Internals and Device Drivers

Brasil - Integridade do Kernel GNU/Linux Embarcado e Drivers de Dispositivo

Canada - Embedded GNU/Linux Kernel Internals and Device Drivers

中国 - 嵌入式GNU/Linux内核与设备驱动

香港 - Embedded GNU/Linux Kernel Internals and Device Drivers

澳門 - Embedded GNU/Linux Kernel Internals and Device Drivers

台灣 - Embedded GNU/Linux Kernel Internals and Device Drivers

USA - Embedded GNU/Linux Kernel Internals and Device Drivers

Österreich - Interne Struktur des GNU/Linux-Kernels und Gerätetreiber

Schweiz - Interne Struktur des GNU/Linux-Kernels und Gerätetreiber

Deutschland - Interne Struktur des GNU/Linux-Kernels und Gerätetreiber

Czech Republic - Interní struktura jádra GNU/Linuxu a ovladače zařízení

Denmark - Embedded GNU/Linux Kernel Internals and Device Drivers

Estonia - Embedded GNU/Linux Kernel Internals and Device Drivers

Finland - Embedded GNU/Linux Kernel Internals and Device Drivers

Greece - Εσώτερο Λειτουργικό των Πυρήνων GNU/Linux και Οδηγοί Συσκευών

Magyarország - Beágyazott GNU/Linux Kernel Belső Működése és Eszközmeghajtók

Ireland - Embedded GNU/Linux Kernel Internals and Device Drivers

Luxembourg - Embedded GNU/Linux Kernel Internals and Device Drivers

Latvia - Embedded GNU/Linux Kernel Internals and Device Drivers

España - Integridades internas del kernel y controladores de dispositivos GNU/Linux integrados

Italia - Interni del kernel GNU/Linux e driver di dispositivo

Lithuania - Embedded GNU/Linux Kernel Internals and Device Drivers

Nederland - Inwendige werking van de GNU/Linux-kernel en apparaatstuurprogramma's

Norway - Inne i Linux-kjernen for innbygde systemer og enhetsdrivere

Portugal - Integridade do Kernel GNU/Linux Embarcado e Drivers de Dispositivo

România - Internele Nucleului GNU/Linux și Driverele de Dispozitive

Sverige - Inbyggd GNU/Linux-kärninterna funktioner och enhetsdrivrutiner

Türkiye - Gömülü GNU/Linux Çekirdek İç Yapıları ve Cihaz Sürücüleri

Malta - Embedded GNU/Linux Kernel Internals and Device Drivers

Belgique - Internalités du noyau GNU/Linux et pilotes de périphériques intégrés

France - Internalités du noyau GNU/Linux et pilotes de périphériques intégrés

日本 - 埋め込み GNU/Linux カーネルの内部構造とデバイスドライバ

Australia - Embedded GNU/Linux Kernel Internals and Device Drivers

Malaysia - Embedded GNU/Linux Kernel Internals and Device Drivers

New Zealand - Embedded GNU/Linux Kernel Internals and Device Drivers

Philippines - Embedded GNU/Linux Kernel Internals and Device Drivers

Singapore - Embedded GNU/Linux Kernel Internals and Device Drivers

Thailand - Embedded GNU/Linux Kernel Internals and Device Drivers

Vietnam - Kiến trúc Nhân GNU/Linux Nhúng và Trình điều khiển Thiết bị

India - Embedded GNU/Linux Kernel Internals and Device Drivers

Argentina - Integridades internas del kernel y controladores de dispositivos GNU/Linux integrados

Chile - Integridades internas del kernel y controladores de dispositivos GNU/Linux integrados

Costa Rica - Integridades internas del kernel y controladores de dispositivos GNU/Linux integrados

Ecuador - Integridades internas del kernel y controladores de dispositivos GNU/Linux integrados

Guatemala - Integridades internas del kernel y controladores de dispositivos GNU/Linux integrados

Colombia - Integridades internas del kernel y controladores de dispositivos GNU/Linux integrados

México - Integridades internas del kernel y controladores de dispositivos GNU/Linux integrados

Panama - Integridades internas del kernel y controladores de dispositivos GNU/Linux integrados

Peru - Integridades internas del kernel y controladores de dispositivos GNU/Linux integrados

Uruguay - Integridades internas del kernel y controladores de dispositivos GNU/Linux integrados

Venezuela - Integridades internas del kernel y controladores de dispositivos GNU/Linux integrados

Polska - Wewnętrzne mechanizmy jądra GNU/Linux i sterowniki urządzeń

United Kingdom - Embedded GNU/Linux Kernel Internals and Device Drivers

South Korea - 임베디드 GNU/리눅스 커널 내부 구조 및 장치 드라이버

Pakistan - Embedded GNU/Linux Kernel Internals and Device Drivers

Sri Lanka - Embedded GNU/Linux Kernel Internals and Device Drivers

Bulgaria - Вградени вътрешни принципи на ядрото GNU/Linux и драйвери на устройства

Bolivia - Integridades internas del kernel y controladores de dispositivos GNU/Linux integrados

Indonesia - Embedded GNU/Linux Kernel Internals and Device Drivers

Kazakhstan - Embedded GNU/Linux Kernel Internals and Device Drivers

Moldova - Internele Nucleului GNU/Linux și Driverele de Dispozitive

Morocco - Embedded GNU/Linux Kernel Internals and Device Drivers

Tunisia - Embedded GNU/Linux Kernel Internals and Device Drivers

Kuwait - Embedded GNU/Linux Kernel Internals and Device Drivers

Oman - Embedded GNU/Linux Kernel Internals and Device Drivers

Slovakia - Embedded GNU/Linux Kernel Internals and Device Drivers

Kenya - Embedded GNU/Linux Kernel Internals and Device Drivers

Nigeria - Embedded GNU/Linux Kernel Internals and Device Drivers

Botswana - Embedded GNU/Linux Kernel Internals and Device Drivers

Slovenia - Embedded GNU/Linux Kernel Internals and Device Drivers

Croatia - Embedded GNU/Linux Kernel Internals and Device Drivers

Serbia - Embedded GNU/Linux Kernel Internals and Device Drivers

Bhutan - Embedded GNU/Linux Kernel Internals and Device Drivers

Nepal - Embedded GNU/Linux Kernel Internals and Device Drivers

Uzbekistan - Embedded GNU/Linux Kernel Internals and Device Drivers

US Government - Embedded GNU/Linux Kernel Internals and Device Drivers