- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
QNX .设备驱动程序的编写
QNX 4.25设备驱动程序的编写4700字
摘要:介绍实时操作系统QNX4.25下编写设备驱动程序的大体框架、底层细节以及诸多注意点。针对使用较为普遍的PCI设备作为较为详细的描述。
关键词:驱动程序 QNX 实时操作系统 PCI
引言
QNX是一个多任务、多用户、分布式、可嵌入式符合POSIX标准的微内核的主流实时操作系统,广泛用于实时性能、开发灵活性、络灵活性要求较高的场合,如电信系统、医疗仪器、航空航天、工业自动化、交通运输、POS机、信息家电等。
QNX是一个适合软件/硬件定制的实时操作系统。如果你曾经试图在传统的UNIX或man.hgt;
#includelt;sys/osinfo.hgt;
#includelt;sys/pci.hgt;
#includelt;i86.hgt;
#define YOUR_PCI_DEVICE_ID0x1713 //根据具体设备提供对应的厂商标识及设备标识
#define YOUR_PCI_VENDOR_ID 0x13fe
int main(void){
unsigned busnum,devfuncnum; //总线号(PC仅有一条)及设备功能号
long address;
long io_base; //I/O基地址
unsigned char irq; //中断号
int pci_index=0 //标识为零标识第一块此种型号设备
if(_CA_PCI_Fin
d_Device(YOUR_PCI_DEVICE_ID,
YOUR_PCI_VENDOR_ID,pci_index,amp;busnum,amp;devfuncnum)!=PCI_SUCCESS){
printf(“Can not find device”);
exit(EXIT_FAILURE);
}
//侦测设备中断
if(_CA_PCI_Read_Config_Byte(busnum,devfuncnum,offsetof(struct_pci_config_regs,Interrupt_Line),
1,amp;irq)!=PCI_SUCCESS){
printf(“Error reading interrupt”);
exit(EXIT_FAILURE);
}
//侦测设备I/O基地址
if_CA_PCI_Read_Config_D,devfuncnum,offsetof(struct_pci_config_regs,Base_[2]),
1,(char *)amp;address)!=PCI_SUCCESS){
printf(“Error reading address”);
exit(EXIT_FAILURE);
}
io_base=PCI_IO_ADDR(adress);
printf(“IO address:%x”,io_base);
printf(“IRQ:”%x”,irq);
exit(EXIT_SUCCESS);
}
注意:各种设备的Base_Address_Regs[x],x可能不尽相同,需要查看具体的硬件手册决定。
2 进入硬件
一旦获得了系统分配给某个硬件设备的资源信息,就可以同这个设备进行通信了。至于如何做取决于需要访问的硬件资源。
2.1 I/O资源
一个进程试图进行I/O操作,必须具有正确的权限等级。你必须是超及用户(root),在编译的时候加上适当参数T1,以确何该进程拥有访问I/O口的权限。若忽视这一点,该运行进程将获得一个口的权限。若忽视这一点,该运行进行将获得一个SIGSEGV信号,表示一个非法的内存引用,并结束进程运行。
现在就可以利用inp()、inpd()、inpp; ~0x80);
2.2 存储映射资源
某些设备,可以通过一般的内存操作进入寄存器,这就需要获得内存基地址(memory base address)。为了能够获进入此类设备的寄存器,需要将其映射到驱动程序虚拟地址空间。QNX下的技术资料/etc/readme/technotes/shmem.txt描述了如何创建一个共享内存对象,然后将这个内存对象的一段内存映射到PCI卡中,以便能够进入这个PCI设备。(接着上面的代码)可以利用mmap():
char *mem_base;
if(PCI_IS_MEM(address)){ //判断内存基地址
int fd;
char *page_ptr;
fd=shm_open(“Physical”,O_RDAP_SHARED,fd,PCI_MEM_ADDR(address)amp;~0xfff);//将内存基地址映射
if(page_ptr= =(char *)
perror(“Error mmap:”);
exit(EXIT_FAILURE);
}
mem_b
您可能关注的文档
- Palm Beach County Diversity Venture Fund(一).doc
- p2p流媒体节点选择策略的研究.pdf
- Pan-European structures for Private Equity & Venture Capital(一).ppt
- ORT250-400介紹資料.ppt
- Panorama Atual da Indústria de Venture Capital no Brasil.ppt
- Panorama Atual da Indústria de Venture Capital no Brasil(七).ppt
- Partnerships, Private Placements, & Venture Capital(一).ppt
- PBL教学法在口腔正畸研究生教学中的应用.doc
- PBL教学法在《基础护理学》教学中的应用.doc
- Panorama Atual da Indústria de Venture Capital no Brasil(一).ppt
最近下载
- 小学体育三年级下册全册教案表格式小学体育三年级下册全册教案表格式.doc VIP
- (2025)冠脉介入培训试题答案.docx VIP
- 毛利人的传统文化.pptx VIP
- 新西兰毛利文化课件.pptx VIP
- 固体物理学 -课件(3.1.1)--第三单元课件.pdf VIP
- 小学三年级上册体育计划及教案(全册)(表格式107页).doc VIP
- Dell戴尔Dell 32 Plus 4K QD-OLED显示器 - S3225QC用户指南.pdf
- 部编版小学二年级下册道德与法治第三单元《绿色小卫士》教材解读.pdf VIP
- 遗失补办户口本授权委托书.doc VIP
- 2020年自考《播音与主持创作基础》练习试题及答案.doc VIP
文档评论(0)