手写第一个字符设备驱动

📟 从零实战 · 30章
  • 什么是字符设备驱动
  • 课程目标与路径
  • Ubuntu+QEMU+Busybox
  • 内核下载编译
  • 模块概念
  • Hello World模块
  • Makefile编译
  • insmod/rmmod
  • lsmod/modinfo
  • module_param
  • EXPORT_SYMBOL
  • 多文件模块
  • 设备号
  • /dev文件
  • file_operations
  • 交互流程
  • register_chrdev_region
  • cdev_init/add
  • open/release
  • 测试App
  • 手动节点弊端
  • udev/mdev
  • class_create
  • device_create
  • read/write实现
  • copy_to_user
  • copy_from_user
  • 注意事项
  • ioctl概念
  • unlocked_ioctl
  • _IO/_IOR/_IOW
  • 命令码定义
  • 文件定位概念
  • llseek实现
  • 管理偏移量
  • 并发产生原因
  • atomic_t
  • 自旋锁spinlock
  • 信号量semaphore
  • 互斥体mutex
  • 读写锁rwlock
  • 锁选择
  • 阻塞IO概念
  • 等待队列
  • 阻塞读写
  • O_NONBLOCK
  • select/poll/epoll
  • poll函数实现
  • POLLIN/POLLOUT
  • 信号驱动IO
  • fasync_struct
  • fasync函数
  • fcntl设置
  • 中断子系统
  • request_irq
  • 上半部
  • IRQF_SHARED
  • 下半部: tasklet
  • workqueue
  • threaded IRQ
  • 共享中断
  • timer_list
  • 超时回调
  • 动态/静态定时器
  • 定时轮询
  • kthread_create/run
  • 同步与停止
  • 后台任务处理
  • kmalloc/vmalloc/kzalloc
  • GFP标志
  • 内存泄漏防范
  • IO内存概念
  • ioremap
  • ioread/iowrite
  • 操作硬件寄存器
  • Platform总线
  • platform_device
  • platform_driver
  • 匹配过程
  • 设备树描述
  • of_match_table
  • platform_get_resource
  • 概念与语法
  • 节点属性
  • compatible
  • reg与地址编码
  • 中断控制器
  • GPIO描述
  • 时钟复位
  • dtc编译/反编译
  • printk日志级别
  • dynamic_debug
  • ftrace跟踪
  • kgdb调试
  • procfs创建
  • sysfs属性文件
  • kobject/attribute
  • 导出驱动信息
  • 系统休眠唤醒
  • suspend/resume
  • runtime PM
  • 自动休眠唤醒
  • DMA概念原理
  • dma_alloc_coherent
  • dma_map_single
  • DMA引擎
  • 需求分析
  • 硬件原理图
  • 驱动框架
  • 中断检测按键
  • 防抖处理
  • 阻塞读+ poll
  • 测试App
  • 课程总结与进阶