设备驱动程序是操作系统内核和机器硬件之间的接口,它为应用程序屏蔽硬件的细节,一般来说,Linux的设备驱动程序需要完成如下功能:
·设备初始化、释放;
·提供各类设备服务;
·负责内核和设备之间的数据交换;
·检测和处理设备工作过程中出现的错误。
Linux下的设备驱动程序被组织为一组完成不同任务的函数的集合,通过这些函数使得Windows的设备操作犹如文件一般。在应用程序看来,硬件设备只是一个设备文件,应用程序可以象操作普通文件一样对硬件设备进行操作,如open ()、close ()、read ()、write () 等。
Linux主要将设备分为二类:字符设备和块设备。字符设备是指设备发送和接收数据以字符的形式进行;而块设备则以整个数据缓冲区的形式进行。在对字符设备发出读/写请求时,实际的硬件I/O一般就紧接着发生了;而块设备则不然,它利用一块系统内存作缓冲区,当用户进程对设备请求能满足用户的要求,就返回请求的数据,如果不能,就调用请求函数来进行实际的I/O操作。块设备主要针对磁盘等慢速设备。
1.内存分配
由于Linux驱动程序在内核中运行,因此在设备驱动程序需要申请/释放内存时,不能使用用户级的malloc/free函数,而需由内核级的函数kmalloc/kfree () 来实现,kmalloc()函数的原型为:
| void kmalloc (size_t size ,int priority); |
参数size为申请分配内存的字节数,kmalloc最多只能开辟128k的内存;参数priority说明若kmalloc()不能马上分配内存时用户进程要采用的动作:GFP_KERNEL 表示等待,即等kmalloc()函数将一些内存安排到交换区来满足你的内存需要,GFP_ATOMIC 表示不等待,如不能立即分配到内存则返回0 值;函数的返回值指向已分配内存的起始地址,出错时,返回0。
kmalloc ()分配的内存需用kfree()函数来释放,kfree ()被定义为:
| # define kfree (n) kfree_s( (n) ,0) |
其中kfree_s () 函数原型为:
| void kfree_s (void * ptr ,int size); |
参数ptr为kmalloc()返回的已分配内存的指针,size是要释放内存的字节数,若为0 时,由内核自动确定内存的大小。
2.中断
许多设备涉及到中断操作,因此,在这样的设备的驱动程序中需要对硬件产生的中断请求提供中断服务程序。与注册基本入口点一样,驱动程序也要请求内核将特定的中断请求和中断服务程序联系在一起。在Linux中,用request_irq()函数来实现请求:
| int request_irq (unsigned int irq ,void( * handler) int ,unsigned long type ,char * name); |
参数irq为要中断请求号,参数handler为指向中断服务程序的指针,参数type 用来确定是正常中断还是快速中断(正常中断指中断服务子程序返回后,内核可以执行调度程序来确定将运行哪一个进程;而快速中断是指中断服务子程序返回后,立即执行被中断程序,正常中断type 取值为0 ,快速中断type 取值为SA_INTERRUPT),参数name是设备驱动程序的名称。
相关图文阅读
频道图文推荐
健 康 咨 询
时 尚 咨 询
相关专题
·Linux集群技术 (7516篇文章)
·体验Linux的音影世界 (7270篇文章)
·Linux驱动大全 (7867篇文章)
·Linux下的路由的配置与应用 (10650篇文章)
·Linux命令简介 (8871篇文章)
·无线设备专题 (3724篇文章)
·Linux防火墙 (8747篇文章)
·Linux日志专题 (7634篇文章)
·.NET移动与嵌入式技术 (5126篇文章)
·Linux服务器的安全性能 (17942篇文章)
·体验Linux的音影世界 (7270篇文章)
·Linux驱动大全 (7867篇文章)
·Linux下的路由的配置与应用 (10650篇文章)
·Linux命令简介 (8871篇文章)
·无线设备专题 (3724篇文章)
·Linux防火墙 (8747篇文章)
·Linux日志专题 (7634篇文章)
·.NET移动与嵌入式技术 (5126篇文章)
·Linux服务器的安全性能 (17942篇文章)
·visual studio 2005 简体中文团队开发版 S (11199次浏览)
·遭遇Trojan.PSW.Lmir等病毒(第2版) (5742次浏览)
·Windows XP中实用快捷键操作技巧大集锦 (2823次浏览)
·中间件技术的概念和分类 (1206次浏览)
·Vista开发新技术之XAML简介 (1109次浏览)
·ARM的嵌入式Linux移植体验之应用实例 (1060次浏览)
·在VC6中创建wxWidgets项目[附图] (1046次浏览)
·用Shell写DEAMON后台来控制安全访问的方法 (16次浏览)
·Karrigell 入门简介 (0次浏览)
·遭遇Trojan.PSW.Lmir等病毒(第2版) (5742次浏览)
·Windows XP中实用快捷键操作技巧大集锦 (2823次浏览)
·中间件技术的概念和分类 (1206次浏览)
·Vista开发新技术之XAML简介 (1109次浏览)
·ARM的嵌入式Linux移植体验之应用实例 (1060次浏览)
·在VC6中创建wxWidgets项目[附图] (1046次浏览)
·用Shell写DEAMON后台来控制安全访问的方法 (16次浏览)
·Karrigell 入门简介 (0次浏览)
·Karrigell 入门简介 10-25
·Vista开发新技术之XAML简介 10-05
·ARM的嵌入式Linux移植体验之应用实例 10-05
·在VC6中创建wxWidgets项目[附图] 10-05
·中间件技术的概念和分类 10-05
·Windows XP中实用快捷键操作技巧大集锦 09-28
·visual studio 2005 简体中文团队开发版 SQL serve 09-23
·遭遇Trojan.PSW.Lmir等病毒(第2版) 09-23
·用Shell写DEAMON后台来控制安全访问的方法 09-18
·Shell脚本显示当前网络连接与对应物理地址 09-01
·Vista开发新技术之XAML简介 10-05
·ARM的嵌入式Linux移植体验之应用实例 10-05
·在VC6中创建wxWidgets项目[附图] 10-05
·中间件技术的概念和分类 10-05
·Windows XP中实用快捷键操作技巧大集锦 09-28
·visual studio 2005 简体中文团队开发版 SQL serve 09-23
·遭遇Trojan.PSW.Lmir等病毒(第2版) 09-23
·用Shell写DEAMON后台来控制安全访问的方法 09-18
·Shell脚本显示当前网络连接与对应物理地址 09-01
最新论坛文章
站内各频道最新更新文档
站内最新制作专题
热门关键字导读
站内频道文章精选
百度推荐,商机无限
搜索您感兴趣的内容



