1-Linux驱动程序分类
- 字符设备驱动(我们学习中90%的都是字符设备驱动)
- 块设备驱动
- 网络设备驱动
(块设备驱动、网络设备驱动基本上固定好了—需要开发内容比较少)
2-常用机制:
中断
内核定时器,延时操作
并发控制
内存分配管理
阻塞、非阻塞IO
3-我们需要掌握Linux模块的编译和装载
4-什么是驱动程序?
操控硬件,是应用程序和硬件设备之间的一个接口
优点: 隐藏硬件细节,提高软件可移植性
5-设备驱动程序:提供机制而不是策略
机制:驱动程序能实现什么功能
策略:用户如何使用这些功能
6-字符设备特点:
1.如字节流一样操作,如同文件,对它的读写以字节为单位
如串口
2.通常需要实现open,write,read,close
3.APP可以通过/dev下文件系统结点来访问字符设备
如:/dev/led, /dev/ttySAC0 (com0)
4.只能顺序访问,不能前后移动指针
特例:framebuffer设备,APP可以使用mmp或者lseek来访问图像各个区域
7-块设备
1.以块的形式
如:Nandflash以页为单位
2.Open等,也可以/dev/mtdblock0
3.与字符设备区别:
1.以块为单位读写
2.块设备按照一定格式存放数据,不同文件系统类型就是用来定义这种格式。
8-网络设备:
1.有结构,大小不固定
2.任何网络事务都通过一个网络接口
如: 网卡,软件设备:回环接口loopback
3. 一个网络接口负责数据报文发送和接收
9-驱动程序加入内核的方法
Linux提供(module)机制
- 每个模块由目标代码组成(没有连接成一个完整可执行程序)
insmod
将模块动态加载到正在运行的内核
rmmod
程序移除模块