课程大纲

引言

  • 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
  • 非锁定ioctl
  • 兼容ioctl
  • 用户空间API
  • 内核空间API
  • 进程生命周期
  • 睡眠/阻塞
  • 睡眠/唤醒
  • 等待队列
  • 惊群效应
  • poll/select

内核调试

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

追踪

  • gcov
  • lcov
  • oprofile
  • ftrace
    • nop追踪器
    • 函数追踪器
    • 调度切换追踪器
    • 函数图追踪器
    • 动态追踪器
  • 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) 许可协议

要求

  • 具备基本的GNU/Linux系统终端用户使用经验
  • 熟悉命令行操作
  • 具备用户空间/应用开发的基础知识
  • 具备中级C语言编程能力
  • 建议先参加嵌入式GNU/Linux系统架构课程,或对其中涉及的主题有深入理解
 35 小时

客户评论 (5)

即将举行的公开课程

课程分类