一种基于Linux的PXI/PXIe总线设备驱动系统技术方案

技术编号:26170090 阅读:26 留言:0更新日期:2020-10-31 13:36
本发明专利技术提供一种基于Linux的PXI/PXIe总线设备驱动系统,事先搭建好资源管理服务模块和内核驱动模块,在驱动新的PXI/PXIe总线设备时,只需要为不同PXI/PXIe总线设备写一个配置文件,再将新的配置文件加入资源管理服务模块,该新的PXI/PXIe总线设备接入Linux系统时,资源管理服务模块即可自动加载相应的内核驱动模块,也即成功加载PXI/PXIe总线设备的底层驱动,实现PXI/PXIe总线设备各种功能的通用接口,使开发人员只需要关注PXI/PXIe总线设备应用程序本身的逻辑关系,专注于用户空间驱动程序的开发,无需再关注硬件的具体操作,从而减少开发虚拟仪器驱动的工作量,简化PXI/PXIe总线设备的开发流程。

【技术实现步骤摘要】
一种基于Linux的PXI/PXIe总线设备驱动系统
本专利技术属于测试设备
,尤其涉及一种基于Linux的PXI/PXIe总线设备驱动系统。
技术介绍
PXI/PXIe总线设备大部分都是作为虚拟仪器使用,每种不同的仪器设备都需要相应的设备驱动。在Linux系统中基于PCI总线的做法是根据总线设备的具体情况开发内核模块以及用户空间的应用程序。内核驱动模块运行于内核空间,用于初始化、操作寄存器、处理中断等一些直接操作硬件的工作。为了把PXI/PXIe总线设备作为虚拟仪器使用还需要开发用户空间的应用程序来实现相应的功能。在做仪器应用程序开发时也要关注内核,对于不同的PXI/PXIe总线设备都要修改编译内核模块,需要进行很多重复性工作。
技术实现思路
为解决上述问题,本专利技术提供一种基于Linux的PXI/PXIe总线设备驱动系统,能够减少开发虚拟仪器驱动的工作量,简化PXI/PXIe总线设备的开发流程。一种基于Linux的PXI/PXIe总线设备驱动系统,包括资源管理服务模块与内核驱动模块,其中,所述内核驱动模块包括初始化子单元、探测子单元、输入输出子单元、块读子单元、块写子单元以及中断服务子单元;所述资源管理服务模块用于存储待驱动的PXI/PXIe总线设备的配置文件,其中,所述配置文件包括厂家代码、仪器代码、中断标志寄存器、偏移地址、掩码以及回读数值;资源管理服务模块还用于根据Linux系统的system()函数来调用insmod命令加载所述初始化子单元;所述初始化子单元用于被加载后,通过Linux系统内核中传递参数的宏module_param_array来获取资源管理服务模块中存储的配置文件,然后将其中的厂家代码和仪器代码存储于Linux系统中;Linux系统探测当前接入的PXI/PXIe总线设备的配置文件与其自身存储的厂家代码和仪器代码是否匹配,若匹配成功,所述探测子单元用于将匹配成功的PXI/PXIe总线设备存储空间中所有bar寄存器的物理基地址分别映射为Linux系统内存的虚拟地址;同时,若匹配成功的PXI/PXIe总线设备的配置文件中包含有效的中断标志寄存器,则探测子单元还用于根据该PXI/PXIe总线设备存储空间中的中断号向Linux系统注册中断,使得发生该中断号的中断时,Linux系统可自动调用所述中断服务子单元;用户空间程序调用匹配成功的PXI/PXIe总线设备时,使用Linux系统的ioctl函数将设定的CMD命令码传给输入输出子单元,其中,CMD命令码包括普通读写指令、块读指令以及块写指令;当CMD命令码为普通读写指令时,所述输入输出子单元从CMD命令码中解析出bar寄存器的物理基地址和寄存器地址偏移量,Linux系统获取该bar寄存器的物理基地址对应的虚拟地址与寄存器地址偏移量的和值,再确定该和值所在的虚拟地址对应的bar寄存器地址,然后用户空间程序从所述bar寄存器地址中读取或写入指定位数的数据;当CMD命令码为块读指令时,所述输入输出子单元用于从CMD命令码中解析并存储块读bar寄存器的物理基地址、寄存器地址偏移量以及读取方法,其中,所述读取方法包括读取一段寄存器或者循环读取同一个寄存器的同一位置;当CMD命令码为块写指令时,所述输入输出子单元用于从CMD命令码中解析并存储块写bar寄存器的物理基地址、寄存器地址偏移量以及写入方法,其中,所述写入方法包括写入一段寄存器或者循环写入同一个寄存器的同一位置;当CMD命令码为块读指令时,用户空间程序使用Linux系统的read函数调用所述块读子单元,并将待读取的设定长度和设定内容传给所述块读子单元;所述块读子单元用于根据输入输出子单元中存储的块读bar寄存器的物理基地址与寄存器地址偏移量的和值确定块读地址,然后按照读取方法在匹配成功的PXI/PXIe总线设备的块读地址中读取设定长度的设定内容;当CMD命令码为块写指令时,用户空间程序使用Linux系统的write函数调用所述块写子单元,并将待写入的设定长度传给所述块写子单元;所述块写子单元用于根据输入输出子单元中存储的块写bar寄存器的物理基地址与寄存器地址偏移量的和值确定块写地址,然后按照写入方法在匹配成功的PXI/PXIe总线设备的块写地址中写入设定长度的数据;当发生已注册的中断号的中断时,Linux系统自动调用所述中断服务子单元;所述中断服务子单元用于判断当前中断号对应的中断标志寄存器、偏移地址、掩码以及回读数值与当前匹配成功的PXI/PXIe总线设备的配置文件是否匹配,若匹配,则Linux系统向用户空间程序发送SIGIO信号,通知用户空间程序发生中断。进一步地,当CMD命令码为普通读指令PXIIn8时,用户空间程序从所述bar寄存器地址中读取8位数据。进一步地,当CMD命令码为普通写指令PXIOut8时,用户空间程序从所述bar寄存器地址中写入8位数据。进一步地,所述初始化子单元还用于为待驱动的PXI/PXIe总线设备向Linux系统申请主设备号和次设备号,其中,不同种类的PXI/PXIe总线设备的主设备号不同,同一种类的多个PXI/PXIe总线设备的次设备号不同。有益效果:本专利技术提供一种基于Linux的PXI/PXIe总线设备驱动系统,事先搭建好资源管理服务模块和内核驱动模块,在驱动新的PXI/PXIe总线设备时,只需要为不同PXI/PXIe总线设备写一个配置文件,再将新的配置文件加入资源管理服务模块,该新的PXI/PXIe总线设备接入Linux系统时,资源管理服务模块即可自动加载相应的内核驱动模块,也即成功加载PXI/PXIe总线设备的底层驱动,实现PXI/PXIe总线设备各种功能的通用接口,使开发人员只需要关注PXI/PXIe总线设备应用程序本身的逻辑关系,专注于用户空间驱动程序的开发,无需再关注硬件的具体操作,从而减少开发虚拟仪器驱动的工作量,简化PXI/PXIe总线设备的开发流程。附图说明图1为本专利技术提供的一种基于Linux的PXI/PXIe总线设备驱动系统的框图;图2为本专利技术提供的资源管理服务模块加载内核驱动模块的流程图。具体实施方式为了使本
的人员更好地理解本申请方案,下面将结合本申请实施例中的附图,对本申请实施例中的技术方案进行清楚、完整地描述。如图1所示,一种基于Linux的PXI/PXIe总线设备驱动系统,用户空间程序可以通过PXI/PXIe总线设备驱动系统调用所述PXI/PXIe总线设备,所述PXI/PXIe总线设备驱动系统包括资源管理服务模块与内核驱动模块,其中,所述内核驱动模块包括初始化子单元、探测子单元、输入输出子单元、块读子单元、块写子单元以及中断服务子单元。需要说明的是,资源管理服务模块与内核驱动模块都基于Linux系统,用C语言编写,其中,资源管理服务模块为用户空间可执行文件,内核驱动模块为.ko内核模块。所述资源管理服务模块用于存储待驱动的PXI/PXIe总线设备的配置文件,其中,所述配置文本文档来自技高网
...

【技术保护点】
1.一种基于Linux的PXI/PXIe总线设备驱动系统,其特征在于,包括资源管理服务模块与内核驱动模块,其中,所述内核驱动模块包括初始化子单元、探测子单元、输入输出子单元、块读子单元、块写子单元以及中断服务子单元;/n所述资源管理服务模块用于存储待驱动的PXI/PXIe总线设备的配置文件,其中,所述配置文件包括厂家代码、仪器代码、中断标志寄存器、偏移地址、掩码以及回读数值;资源管理服务模块还用于根据Linux系统的system()函数来调用insmod命令加载所述初始化子单元;/n所述初始化子单元用于被加载后,通过Linux系统内核中传递参数的宏module_param_array来获取资源管理服务模块中存储的配置文件,然后将其中的厂家代码和仪器代码存储于Linux系统中;/nLinux系统探测当前接入的PXI/PXIe总线设备的配置文件与其自身存储的厂家代码和仪器代码是否匹配,若匹配成功,所述探测子单元用于将匹配成功的PXI/PXIe总线设备存储空间中所有bar寄存器的物理基地址分别映射为Linux系统内存的虚拟地址;同时,若匹配成功的PXI/PXIe总线设备的配置文件中包含有效的中断标志寄存器,则探测子单元还用于根据该PXI/PXIe总线设备存储空间中的中断号向Linux系统注册中断,使得发生该中断号的中断时,Linux系统可自动调用所述中断服务子单元;/n用户空间程序调用匹配成功的PXI/PXIe总线设备时,使用Linux系统的ioctl函数将设定的CMD命令码传给输入输出子单元,其中,CMD命令码包括普通读写指令、块读指令以及块写指令;当CMD命令码为普通读写指令时,所述输入输出子单元从CMD命令码中解析出bar寄存器的物理基地址和寄存器地址偏移量,Linux系统获取该bar寄存器的物理基地址对应的虚拟地址与寄存器地址偏移量的和值,再确定该和值所在的虚拟地址对应的bar寄存器地址,然后用户空间程序从所述bar寄存器地址中读取或写入指定位数的数据;当CMD命令码为块读指令时,所述输入输出子单元用于从CMD命令码中解析并存储块读bar寄存器的物理基地址、寄存器地址偏移量以及读取方法,其中,所述读取方法包括读取一段寄存器或者循环读取同一个寄存器的同一位置;当CMD命令码为块写指令时,所述输入输出子单元用于从CMD命令码中解析并存储块写bar寄存器的物理基地址、寄存器地址偏移量以及写入方法,其中,所述写入方法包括写入一段寄存器或者循环写入同一个寄存器的同一位置;/n当CMD命令码为块读指令时,用户空间程序使用Linux系统的read函数调用所述块读子单元,并将待读取的设定长度和设定内容传给所述块读子单元;所述块读子单元用于根据输入输出子单元中存储的块读bar寄存器的物理基地址与寄存器地址偏移量的和值确定块读地址,然后按照读取方法在匹配成功的PXI/PXIe总线设备的块读地址中读取设定长度的设定内容;/n当CMD命令码为块写指令时,用户空间程序使用Linux系统的write函数调用所述块写子单元,并将待写入的设定长度传给所述块写子单元;所述块写子单元用于根据输入输出子单元中存储的块写bar寄存器的物理基地址与寄存器地址偏移量的和值确定块写地址,然后按照写入方法在匹配成功的PXI/PXIe总线设备的块写地址中写入设定长度的数据;/n当发生已注册的中断号的中断时,Linux系统自动调用所述中断服务子单元;所述中断服务子单元用于判断当前中断号对应的中断标志寄存器、偏移地址、掩码以及回读数值与当前匹配成功的PXI/PXIe总线设备的配置文件是否匹配,若匹配,则Linux系统向用户空间程序发送SIGIO信号,通知用户空间程序发生中断。/n...

【技术特征摘要】
1.一种基于Linux的PXI/PXIe总线设备驱动系统,其特征在于,包括资源管理服务模块与内核驱动模块,其中,所述内核驱动模块包括初始化子单元、探测子单元、输入输出子单元、块读子单元、块写子单元以及中断服务子单元;
所述资源管理服务模块用于存储待驱动的PXI/PXIe总线设备的配置文件,其中,所述配置文件包括厂家代码、仪器代码、中断标志寄存器、偏移地址、掩码以及回读数值;资源管理服务模块还用于根据Linux系统的system()函数来调用insmod命令加载所述初始化子单元;
所述初始化子单元用于被加载后,通过Linux系统内核中传递参数的宏module_param_array来获取资源管理服务模块中存储的配置文件,然后将其中的厂家代码和仪器代码存储于Linux系统中;
Linux系统探测当前接入的PXI/PXIe总线设备的配置文件与其自身存储的厂家代码和仪器代码是否匹配,若匹配成功,所述探测子单元用于将匹配成功的PXI/PXIe总线设备存储空间中所有bar寄存器的物理基地址分别映射为Linux系统内存的虚拟地址;同时,若匹配成功的PXI/PXIe总线设备的配置文件中包含有效的中断标志寄存器,则探测子单元还用于根据该PXI/PXIe总线设备存储空间中的中断号向Linux系统注册中断,使得发生该中断号的中断时,Linux系统可自动调用所述中断服务子单元;
用户空间程序调用匹配成功的PXI/PXIe总线设备时,使用Linux系统的ioctl函数将设定的CMD命令码传给输入输出子单元,其中,CMD命令码包括普通读写指令、块读指令以及块写指令;当CMD命令码为普通读写指令时,所述输入输出子单元从CMD命令码中解析出bar寄存器的物理基地址和寄存器地址偏移量,Linux系统获取该bar寄存器的物理基地址对应的虚拟地址与寄存器地址偏移量的和值,再确定该和值所在的虚拟地址对应的bar寄存器地址,然后用户空间程序从所述bar寄存器地址中读取或写入指定位数的数据;当CMD命令码为块读指令时,所述输入输出子单元用于从CMD命令码中解析并存储块读bar寄存器的物理基地址、寄存器地址偏移量以及读取方法,其中,所述读取方法包括读取一段寄存器或者循环读取同一个寄存器的同一位置;当CMD命...

【专利技术属性】
技术研发人员:毕硕杜影刘康丽安佰岳赵砚博
申请(专利权)人:北京航天测控技术有限公司
类型:发明
国别省市:北京;11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1