Embedded GNU/Linux Kernel Internals and Device Drivers ( ldd | 35 hours )

Prerequisites:
  • 基本熟悉最终使用者使用 GNU/Linux 系统
  • 基本熟悉命令行shell
  • 用户空间 / 应用程式开发的基本知识
  • 中级 C 语言程式设计知识
  • 应该以前参加 过嵌入式 GNU/Linux Systems Architecture 并且/或对那里概述的主题有很好的理解
Overview:

描述

这个为期 5 天的培训课程使用动手练习和指导来说明 GNU/Linux 内核内部和设备驱动程序开发的概念。它旨在让您快速上手。我们通过理论和在职培训相结合的方式,描述了编写 GNU/Linux 设备驱动程式所需的过程、概念和命令。

不要重新发明轮子,而是向经验丰富的培训师学习,并将应用知识带回家,并在您自己的嵌入式开发专案中有效使用它。

谁应该参加?

对开发 GNU/Linux 设备驱动程式感兴趣或负责开发或评估的人,如软体工程师、现场工程师、(专案)经理、硬体工程师。

Course Outline:

介绍

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

记忆体 Management

  • 虚拟记忆体与物理记忆体
  • 内核中的记忆体分配
  • 页面
  • 应用程式介面

内核补丁

  • 生命周期
  • git
  • 内核源
  • 创建补丁
  • 检查补丁
  • 修复补丁
  • 船舶补丁
  • 经审核的代码

内核模组

  • 获取内核源
  • 配置/构建/安装
  • 装置驱动程式(静态连结,在运行时载入)
  • 初始化/退出
  • 发 牌
  • 汇出元件 GPL
  • 树外makefile
  • 模组初始化工具
  • 内核树中的模组
  • K配置
  • 参数传递
  • 稀疏

Char 驱动程式

  • 建筑
  • 使用者/内核介面
  • I/O 子系统
  • VFS
  • sysfs (设备、总线、驱动程式、类)、
  • kobject/ktype/kset
  • Linux 内核驱动程式模型
  • 设备档
  • char 驱动程式
    • 初始化
    • 注册
    • 打开、释放
    • cdev, cdev add, cdev del,...
    • 主/辅编号
    • udev、udevmonitor、udevadm

高级 Charachter 驱动程式操作

  • ioctl
  • 解锁的ioctl
  • Compat ioctl
  • 用户空间 API
  • 内核空间 API
  • 流程生命周期
  • 休眠/阻塞
  • 睡觉/醒来
  • 等待伫列
  • 雷霆群
  • 轮询/选择

内核调试

  • 错误
  • 调试
  • 调试内核
    • 使用 Git 进行二进位搜索
    • 内核的调试支援
    • printk syslogd, klogd, loglevels, 速率限制, debug levels, 调试级别, debug selective subsystems 调试选择性子系统
    • 通过查询 debugFS 进行调试
    • OOPS 调试, 断言 OOPS
    • Magic SysRq 金钥
    • KGDB/KDB 资料库
    • JTAG

描图

  • 全球科夫
  • LCOV
  • oprofile
  • ftrace
    • 不,追踪者
    • 函数跟踪器
    • sched 开关跟踪器
    • 函数 Graph Tracer
    • 动态示踪剂
  • 跟踪 cmd/内核鲨鱼
  • 性能
  • LTTng

中断

  • 中断与轮询
  • 中断
  • 程式部分
  • 可重入性
  • 事件
  • 中断处理程式
  • 共用中断处理程式
  • 中断流
  • 中断控制

推迟工作

  • 上半部分/下半部分
  • SoftIRQ
  • 微线程
  • 工作伫列
  • 螺纹交互

并发

  • 关键区域/区域
  • 原子
  • 争用条件
  • 同步
  • 锁定
  • 锁定解决方案
  • 僵局
  • 冲突
  • 要锁定什么?
  • 可以使用什么?
    • 原子操作
    • 旋转锁
    • 读写器自旋锁
    • 信号
    • 二进位信号量
    • 互斥锁
    • reader-writer 信号量
    • 完成变数
    • 顺序锁
    • 禁用抢占
    • Orderig 和 Barriers

时间

  • 赫兹
  • 吉菲斯
  • 大/小延迟
  • 内核计时器

硬体 I/O

  • I/O 埠
  • I/O 记忆体
  • 如何处理访问寄存器的副作用?

使用者-内核 Communication

  • put(get)_user()
  • 复制到(从)_user()
  • 内核 I/O
  • 记忆体映射
  • procfs
  • sysfs
  • 调试
  • 继电器FS
  • 网联
  • 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 - Embedded GNU/Linux Kernel Internals and Device Drivers

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

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

USA - Embedded GNU/Linux Kernel Internals and Device Drivers

Österreich - Embedded GNU/Linux Kernel Internals and Device Drivers

Schweiz - Embedded GNU/Linux Kernel Internals and Device Drivers

Deutschland - Embedded GNU/Linux Kernel Internals and Device Drivers

Czech Republic - Embedded GNU/Linux Kernel Internals and Device Drivers

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 - Embedded GNU/Linux Kernel Internals and Device Drivers

Magyarország - Embedded GNU/Linux Kernel Internals and Device Drivers

Ireland - Embedded GNU/Linux Kernel Internals and Device Drivers

Israel - 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 - Embedded GNU/Linux Kernel Internals and Device Drivers

Italia - Embedded GNU/Linux Kernel Internals and Device Drivers

Lithuania - Embedded GNU/Linux Kernel Internals and Device Drivers

Nederland - Embedded GNU/Linux Kernel Internals and Device Drivers

Norway - Embedded GNU/Linux Kernel Internals and Device Drivers

Portugal - Embedded GNU/Linux Kernel Internals and Device Drivers

România - Embedded GNU/Linux Kernel Internals and Device Drivers

Sverige - Embedded GNU/Linux Kernel Internals and Device Drivers

Türkiye - Embedded GNU/Linux Kernel Internals and Device Drivers

Malta - Embedded GNU/Linux Kernel Internals and Device Drivers

Belgique - Embedded GNU/Linux Kernel Internals and Device Drivers

France - Embedded GNU/Linux Kernel Internals and Device Drivers

日本 - Embedded GNU/Linux Kernel Internals and Device Drivers

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 - Embedded GNU/Linux Kernel Internals and Device Drivers

India - Embedded GNU/Linux Kernel Internals and Device Drivers

Argentina - Embedded GNU/Linux Kernel Internals and Device Drivers

Chile - Embedded GNU/Linux Kernel Internals and Device Drivers

Costa Rica - Embedded GNU/Linux Kernel Internals and Device Drivers

Ecuador - Embedded GNU/Linux Kernel Internals and Device Drivers

Guatemala - Embedded GNU/Linux Kernel Internals and Device Drivers

Colombia - Embedded GNU/Linux Kernel Internals and Device Drivers

México - Embedded GNU/Linux Kernel Internals and Device Drivers

Panama - Embedded GNU/Linux Kernel Internals and Device Drivers

Peru - Embedded GNU/Linux Kernel Internals and Device Drivers

Uruguay - Embedded GNU/Linux Kernel Internals and Device Drivers

Venezuela - Embedded GNU/Linux Kernel Internals and Device Drivers

Polska - Embedded GNU/Linux Kernel Internals and Device Drivers

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

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

Pakistan - Embedded GNU/Linux Kernel Internals and Device Drivers

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

Bulgaria - Embedded GNU/Linux Kernel Internals and Device Drivers

Bolivia - Embedded GNU/Linux Kernel Internals and Device Drivers

Indonesia - Embedded GNU/Linux Kernel Internals and Device Drivers

Kazakhstan - Embedded GNU/Linux Kernel Internals and Device Drivers

Moldova - Embedded GNU/Linux Kernel Internals and Device Drivers

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