首 页文档资料下载资料维修视频包年699元
请登录  |  免费注册
当前位置:精通维修下载 > 文档资料 > 家电技术 > 单元电路介绍 > 其它电路
嵌入式Linux下PCI设备驱动的设计与实现
来源:本站整理  作者:佚名  2011-10-10 07:24:47




2.3 中断处理
 流媒体数据缓存卡驱动中的中断处理程序主要负责识别中断、响应中断和唤醒睡眠的进程,中断处理代码如下:
 inl(PCI_card->iobase+PCI_CARD_INT_STA); // 识别中断
 outl(status&INT_MASK, pci_card->iobase + PCI_CARD_
INT_STA);                                         //响应中断
 wake_up_interruptible(&pci_card->wq);   //唤醒睡眠进程
2.4 系统调用
 用户进程利用系统调用对设备文件进行诸如read/write操作时,系统调用通过设备文件的主设备号找到相应的设备驱动程序,然后读取这个数据结构相应的函数指针,接着把控制权交给该函数。流媒体数据缓存PCI卡的系统调用函数主要包括设备的打开、关闭、读写和控制等。
 在使用PCI设备之前,必须先打开所要使用的PCI设备。当用户在应用程序中调用open()函数时,应用程序就会自动进入驱动程序中的pci_card_open()函数。pIC_card_open()函数主要负责增加模块的使用计数,并根据pic_card_probe()读到的中断号申请中断,注册中断处理程序。具体实现如下:
 MOD_INC_USE_COUNT
 request_IRQ(pci_card->irq,pci_card_interrupt,SA_SHIRQ,"pci_card",pci_card));
 在使用完PCI设备后,必须关闭PCI设备。当用户在应用程序中调用close()函数时,应用程序就会自动进入驱动程序中的pci_card_release()函数。pci_card_release()函数的主要工作是释放中断和减少模块的使用计数。
 用户在应用程序中调用read()函数和write()函数对设备文件进行读写操作时,应用程序就会自动进入驱动程序中的pci_card_read()函数和pci_card_write()函数。pci_card_read()函数首先会阻塞在以pci_card->wq为队头的等待队列上。当流媒体数据缓存卡上的数据准备好,即pci_card->state变为READY时,pci_card_read()函数会被唤醒。函数被唤醒后,会先将数据从设备I/O内存拷贝到内核空间,再从内核空间拷贝给用户进程,实现方式如下:
 wait_event_interruptible(pci_card->wq,pci_card->state==READY);
 mEMCpy_fromio(pbuf,pci_card->mem_start,count);
 copy_to_user(buf,pbuf,count));
 而pci_card_write()函数的主要工作是将数据从用户进程拷贝到内核空间,再将内核空间中的数据拷贝到设备I/O内存,实现代码如下:
 copy_from_user(pbuf,buf,count);
 mEMCpy_toio(pci_card->mem_start,pbuf,count);
 Linux是一种日趋成熟完善的操作系统,PCI总线已成为计算机系统中一种应用广泛、通用的总线标准。本文针对流媒体数据缓存卡设备,结合PCI总线的特点,开发实现了流媒体数据缓存PCI卡在Linux环境下的设备驱动程序,本文介绍的驱动原理同样适用其他PCI设备的开发。
参考文献
[1] 陈颖,唐超. 基于PCI总线驱动程序设计方法研究[J].微计算机信息,2008,12(1):272-274.
[2] 李善平,刘文峰,王焕龙. Linux与嵌入式系统[M].北京:清华大学出版社,2003.
[3] 宋有泉,高小鹏,龙翔. 嵌入式PCI网卡驱动程序的设计与优化[J]. 计算机工程,2007,3(2):264-266.
[4] 王峰,张文军,余松煜. PCI设备驱动程序中几个关键问题的设计与实现[J]. 测控技术,2002,21(8):58-60.
[5] 钱晨,徐荣华,王钦若. 基于Linux操作系统的设备驱动程序开发[J]. 微计算机信息,2004,20(9):131-133.
 

上一页  [1] [2] 

关键词:

文章评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分)
Copyright © 2007-2017 down.gzweix.Com. All Rights Reserved .
页面执行时间:58,601.56000 毫秒