快速业务通道

嵌入式Linux驱动程序开发要点

作者 佚名技术 来源 Linux系统 浏览 发布时间 2012-04-13

在Linux操作系统下有3类主要的设备文件类型:块设备、字符设备和网络设备.这种分类方法可以将控制输入/输出设备的驱动程序与其他操作系统软件分离开来.

字符设备与块设备的主要区别是:在对字符设备发出读/写请求时,实际的硬件I/O一般紧接着发生.块设备则不然,它利用一块系统内存作为缓冲区,若用户进程对设备的请求能满足用户的要求,就返回请求的数据;否则,就调用请求函数来进行实际的I/O操作.块设备主要是针对磁盘等慢速设备设计的,以免耗费过多的CPU时间用来等待.网络设备可以通过BSD套接口访问数据.

每个设备文件都有其文件属性(c/b),表示是字符设备还是块设备.另外每个文件都有2个设备号,第一个是主设备号,标识驱动程序;第二个是从设备号,标识使用同一个设备驱动程序的、不同的硬件设备.设备文件的主设备号与设备驱动程序在登记时申请的主设备号一致,否则用户进程将无法访问驱动程序.

系统调用时操作系统内核与应用程序之间的接口,设备驱动程序是操作系统内核与机器硬件之间的接口.设备驱动程序是内核的一部分,它完成以下功能:

*对设备初始化和释放

*把数据从内核传送到硬件和从硬件读取数据

*读取应用程序传送给设备文件的数据和回送应用程序请求的数据

*检测和处理设备出现的错误

MTD(Memory Technology Device)设备是闪存芯片、小型闪存卡、记忆棒之类的设备,它们在嵌入式设备中的使用正在不断增加.MTD驱动程序是在Linux下专门为嵌入式环境开发的新的一类驱动程序.相对于常规块设备驱动程序,使用MTD驱动程序的优点在于他们能更好的支持、管理给予闪存设备,有基于扇区的擦除和读/写操作的更好的接口.

驱动程序结构

Linux的设备驱动程序可以分为3个主要组成部分:

1. 自动配置和初始化子程序,负责监测所要驱动的硬件设备是否存在和能否正常工作.如果该设备正常,则对这个设备及其相关的设备驱动程序需要的软件状态进行初始化.这部分驱动程序仅在初始化时被调用一次.

2. 服务于I/O请求的子程序,又称为驱动程序的上半部分.调用这部分程序是系统调用的结果.这部分程序在执行时,系统仍认为是与进行调用的进程属于同一个进程,只是由用户态变成了核心态,具有进行此系统调用的用户程序的运行环境,因而可以在其中调用sleep()等与进行运行环境有关的函数.

3. 中断服务子程序,又称为驱动程序的下半部分.在Linux系统中,并不是直接从中断向量表中调用设备驱动程序的中断服务子程序,而是由Linux系统来接收硬件中断,再由系统调用中断服务子程序.中断可以在任何一个进程运行时产生,因而在中断服务程序被调用时,不能依赖于任何进程的状态,也就不能调用任何与进程运行环境有关的函数.设备驱动程序一般支持同一类型的若干设备,一般在系统调用中断服务子程序时,都带有一个或多个参数,以唯一标识请求服务的设备.

在系统内部,I/O设备的存/取通过一组固定的入口点来进行,这组入口点是由每个设备的驱动程序提供的.具体到Linux系统,设备驱动程序所提供的这组入口点由一个文件操作结构来向系统进行说明.file_operation结构定义于linux/fs.h文件中.
struct file_operation{
int (*lseek)(struct inode *inode, struct file *filp, off_t off, int pos);
int (*read)(struct inode *inode, struct file *filp, char *buf, int count);
int (*write)(struct inode *inode, struct file *filp, const char *buf, int count);
int (*readdir)(struct inode *inode, struct file *filp, struct dirent *dirent, int count);
int (*select)(struct inode *inode, struct file *filp, int sel_type, select_table *wait);
int (*ioctl)(struct inode *inode, struct file *filp, unsigned int cmd, unsigned int arg);
int (*mma

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号