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)许可。
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
香港 - 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