本文摘录参考书《Linux设备驱动开发详解》--宋宝华
驱动程序就是搭起应用软件和硬件之间的桥梁,做到软硬隔离。
1. 无操作系统 的驱动
功能单一的硬件设备,比如单片机是无需Linux操作系统的,其驱动程序可以理解为将点亮一个LED灯的写寄存器程序抽象出来,封装为一个借口,应用软件只需要调用该接口即可实现LED灯的控制,其架构可以理解为:
2. 有操作系统的驱动
1. 一个复杂的软件需要处理多个并发的任务,没有操作系统是不行的;
2. 操作系统提供了内存管理机制
驱动的分类:
1. 字符设备:触摸屏,鼠标(字符设备不经过系统的快速缓存)
2. 块设备:硬盘,软驱(需要系统快速缓存)
3. 网络设备 :
基本的接口是,系统调用open(), close(), read() , write()等函数访问字符和块设备。有你哥哥程序可以使用Linux的系统调用接口编程,也可以使用C库函数。处于代码可移植性的考虑,最好使用C函数库。fopen(), fclose(), fwrite(), fread(), 其本质也是调用了操作系统的API, open(), close(), read() , write()。
驱动知识必备:
1 硬件基础:SRAM,flash, SDRAM,磁盘读写方式, UART ,I2C , USB ,轮询,中断,DMA原理,PCT总线的工作方式,以及CPU的内存管理单元MMU等;
2. 编程基础:C语言,结构体,指针,函数指针,内存动态申请和释放;
3. Linux基础:设备驱动与内核接口,块设备,字符设备,串口设备,网络设备
4. 多线程: 多任务并发控制,同步机制,自旋锁,互斥,信号量,消息队列
设备驱动的学习方法:
动手实践是学习的最有效的方法,最好有个开发板,搭建虚拟机。
阅读Linux源码
驱动设备硬件相关
嵌入式微控制器也常被称为片上系统(SoC),含义是在一个芯片上设计整个系统;
典型的MCU结构:
处理器的分类:
存储器分类:
串口
RS232总线
RS232: 单机发送,多机接受的单向、平衡传输规范
RS422:改进了RS232通信距离短、速率低的缺点
RS485:增加了多点、双向通信能力即允许多个发送器连接到同一条总线上,同时增加了发送器的驱动能力和冲突保护性,并扩展了总线共模范围;
UART:通用异步接收发送器,完成并、串口转换;
I2C总线
由飞利浦开发的两线串行总线,用于连接微控制器和外围设备。管脚少,设计成本低。支持多主控模式,任何能够进行发送和接收的设备都可以成为主设备。主控制能够控制数据的传输和时钟频率,在任意时刻只有一个主控。
USB总线
以太网接口
PCI总线
存储器、外设控制器资源占用表