大总结:动手写Linux驱动练习--Apple的学习笔记

之前手写驱动比较少,一般来说设备树配置下就可以用了。然后简单的框架代码也会看会调试。但是这属于初级,所以呢要通过针对性的练习来提升技能。

1. 先复习下驱动框架相关理论及API

设备文件及字符设备驱动复习--Apple的学习笔记
设备驱动并发/阻塞非阻塞/异步通知复习--Apple的学习笔记
内存与IO访问--Apple的学习笔记
设备驱动模型的传参源码分析--Apple的学习笔记
linuxPWM子系统源码分析--Apple的学习笔记

2. 开始动手写驱动(平台驱动)

目的是用这些API,深入理解,提高熟练度。另外通过解决过程中遇到的问题来增加调试经验。正所谓解决问题的方法越多,那么处理问题的效率也会越高。
动手写linux驱动(1)--Apple的学习笔记
动手写linux驱动(2)--Apple的学习笔记
动手写linux驱动(3)--Apple的学习笔记
动手写linux驱动(4)--Apple的学习笔记
动手写linux驱动(5)--Apple的学习笔记
动手写linux驱动(6)--Apple的学习笔记
动手写linux驱动(7)--Apple的学习笔记
以上对应的是我虚拟applepaper的驱动
工程1 最小的注册设备框架
工程2 添加read和write
工程3 添加ioctl和llseek
工程4 添加多设备及互斥锁
工程5 添加阻塞条件满足后进行进程切换,非阻塞条件满足后进行唤醒,APP通过读写FIFO来应用阻塞。
工程6 添加poll非阻塞。APP通过多路复用select来测试5s timeout后非阻塞。
工程7 添加异步io。之前是同步io。
工程8 添加内核定时器。fifo写入后,每隔2s弹出,直到清空fifo位置。
工程9 基于工程8,将applepaper设备作为平台设备,通过设备树关联到platform虚拟总线上。

3. 动手写驱动(i2c总线驱动)

工程10 i2c配置完设备树为i2c2后,自制的app测试程序。
i2c子系统及eeprom驱动--Apple的学习笔记
工程11 自己写的基于i2c总线的eeprom设备驱动。实现最简单的框架,没有添加同步及阻塞,仅支持从0地址的1个字节读写,将来有需要再扩展。
动手写i2c总线设备驱动--Apple的学习笔记

3. 动手写驱动(misc类的PWM驱动)

工程12 自己写的基于misc的SG90PMW驱动。
linux舵机硬件环境搭建成功--Apple的学习笔记
动手写linux下PWM驱动--Apple的学习笔记

3. 动手写驱动(串口驱动)

工程13 基于串口的US100超声波传感器驱动。
linux下串口raw驱动(US100超声波)--Apple的学习笔记

4. 动手写驱动(gpio驱动+中断)

工程14
a.基于GPIO的US100超声波传感器驱动。后来发生triq由io口改成了PWM来输出10us高电平。
b.US100_drv8.c将自定义设备从全局变量改成临时变量,并且添加信号量锁来限制仅有一个进程打开设备文件。
linux下GPIO中断驱动US100传感器--Apple的学习笔记

5. usb及lib库交叉编译移植

试用下家里现有的usb camera。所以又复习了下usb协议及驱动框架。主要了解了热拔插udev和netlink作为内核和用户层的双向通信方式。另外提高了库文件交叉编译移植的经验。过程中还配置了usb鼠标驱动,看了mousedev.c源码,了解了下input子系统框架。
工程15 libusb交叉编译后的使用。 v4l2在内核配置完成后的使用。
libusb移植与v4l2使用--Applecai的学习笔记

你可能感兴趣的:(大总结:动手写Linux驱动练习--Apple的学习笔记)