内存设备驱动程序设计分析

内存设备驱动程序设计分析

ID:13661605

大小:124.50 KB

页数:15页

时间:2018-07-23

内存设备驱动程序设计分析_第1页
内存设备驱动程序设计分析_第2页
内存设备驱动程序设计分析_第3页
内存设备驱动程序设计分析_第4页
内存设备驱动程序设计分析_第5页
资源描述:

《内存设备驱动程序设计分析》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库

1、完整的内存设备驱动程序目录一、设备驱动中的并发控制21、并发22、自旋锁22.1、自旋锁的使用23、信号量23.1、信号量的相关操作33.2、信号量用于同步3二、设备驱动中的阻塞与非阻塞31、阻塞操作32、非阻塞操作33、等待队列33.1、等待队列的相关操作34、轮询操作4三、设备驱动中的异步通知41、异步通知42、信号的接收43、信号的释放43.1、异步通知编程用到一项数据结构和两个函数4四、设备I/O端口和I/O内存的访问51、I/O端口与I/O内存52、可以使用以下函数访问定位于I/O空间端口52.1、I/O内存52.2、对设备内存映射的虚拟地址的读写53、申请与释放设备I/O端口和

2、I/O内存54、设备I/O端口和I/O内存访问流程54.1、设备I/O端口访问流程54.2、I/O内存访问流程5五、globalfifo驱动涉及的结构体、操作及代码51、globalfifo设备结构体51.1、cdev结构体61.2、设备号的分配和释放61.3、structfile_operations结构体62、使globalfifo驱动实现异步通知73、文件打开函数于释放函数74、读写函数74.1读函数74.2、写函数85、ioctl设备控制函数106、轮询操作107、初始化并注册cdev118、文件操作结构体1115/159、设备驱动模块加载函数129.1自动创建设备文件1310、模

3、块卸载函数1311、其他代码1311.1、必要的头文件1311.2模块的相关信息14六、Makefile14七、模块加载141、直接编译内核142、使用模块法15设备驱动最通俗的理解是“驱使硬件设备行动”。驱动与底层硬件直接打交道,按照硬件设备的具体工作方式,读写设备的寄存器,完成设备的轮询、中断处理、DMA通信,进行物理内存向虚拟内存的映射等,最终让通信设备能收发数据,让显示设备能显示文字和画面,让存储设备能记录文件和数据。现以globalfifo设备驱动为例介绍完整的内存设备驱动程序。首先描述一下该驱动中所涉及到的并发控制、自旋锁、信号量、阻塞与非阻塞I/O、轮询操作、异步通知与异步I

4、/O和I/O访问等。一、设备驱动中的并发控制1、并发指的是多个执行单元同时、并行被执行。而并发的执行单元对共享资源(硬件资源和软件上的全局变量、静态变量等)的访问很容易导致竞态。处理并发的常用技术是加锁或者互斥,即确保在任何时候只有一个执行单元可以操作共享资源。在Linux内核中主要通过信号量机制和自旋锁机制实现。2、自旋锁可以从它的工作方式理解,即,在某CPU上运行的代码需要先执行一个原子操作,该操作测试并设置某个内存变量,由于它是原子操作,所以在该操作完成之前其他执行单元不可能访问这个内存变量。如果测试结果表明锁已经空闲,则程序获得这个自旋锁并继续执行;如果测试结果表明锁仍被占用,程序

5、将在一个小的循环内重复这个“测试并设置”操作,即进行所谓的“自旋锁”。自旋锁最多只能被一个可执行单元持有。2.1、自旋锁的使用a.定义自旋锁spinlock_tlock;b.初始化自旋锁spin_lock_init(lock)该宏用于动态初始化自旋锁lock。c.获得自旋锁spin_lock(lock)该宏用于获得自旋锁lock,如果能立即获得锁,马上返回,否则,它将自旋在那里,直到该自旋锁的保持者释放。d.释放自旋锁spin_unlock(lock)3、信号量15/15它主要提供对进程间共享资源访问控制机制。与自旋锁类似,只有得到信号量的进程才能执行临界区代码。与自旋锁不同的是,当获得不

6、到信号量时,进程不会原地打转而是进入休眠等待状态。3.1、信号量的相关操作a.定义信号量structsemaphoresem;定义名为sem的信号量。b.初始化信号量voidsema_init(structsemaphore*sem,intval);该函数初始化信号量,并设置信号量sem的值为val。c.获得信号量voiddown(structsemaphore*sem);该函数用于获得信号量sem,它可能会导致睡眠。d.释放信号量voidup(structsemaphore*sem);该函数释放信号量sem,唤醒等待者。3.2、信号量用于同步如果信号量被初始化为0,则它可以用于同步,同步

7、意味着一个执行单元的继续执行需等待另一个执行单元完成某事,保证执行的先后顺序。二、设备驱动中的阻塞与非阻塞1、阻塞操作是指在执行设备操作时,若不能获得资源,则挂起进程直到满足操作的条件后在进行操作。被挂起的进程进入休眠状态,被从调度器的运行队列移走,直到等待的条件被满足。2、非阻塞操作是指进程在不能进行设备操作时,并不挂起,它或者放弃,或者不停地查询,直至可以进行操作为止。3、等待队列用来实现进程的阻塞。等待队列可看作保

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。