qnx 设备驱动开发_一种QNX系统的USB驱动加载方法与流程

本文介绍了一种QNX系统中USB驱动的加载方法,旨在解决USB驱动加载异常的问题。方法包括系统启动时读取USB设备状态,监测USB插拔,判断设备类型,检查安装状态,并在加载失败时进行错误诊断和模拟驱动进程拉起,以确保USB设备驱动的准确加载。
摘要由CSDN通过智能技术生成

本发明涉及QNX软件技术领域,尤其涉及一种QNX系统的USB驱动加载方法。

背景技术:

QNX系统是由加拿大QSSL公司(QNX Software System Ltd.)开发的分布式实时操作系统,以其稳定著称,因此非常适合作用对稳定性要求较高的车载信息系统的操作系统。

USB作为车机系统上一个重要的娱乐模块,备受终端用户关注,USB设备在某些情况下,如反复插拔、反复开关机ACC ON/OFF,或者是CPU占用率很高时,USB驱动可能会出现加载不正常的情况。

因此,现有技术有待进一步改进。

技术实现要素:

本发明提供一种QNX系统的USB驱动加载方法,旨在解决现有技术中的缺陷,实现USB驱动的准确加载。

为达到上述目的,本发明所采取的技术方案为:

S1、系统启动,首次读取USB设备寄存器,获取USB设备初始状态并保存,启动USB状态监测线程;

S2、以预设周期T监测USB设备的插拔状态,若检测到USB设备已插入,则进入下一步;

S3、判断是否为USB存储设备,是则进入下一步,否则进入步骤S7;

S4、监测USB设备安装状态是否OK,是则进入步骤S5,否则进入步骤S6;

S5、检测在预设时间t1内USB设备目录下的相应PPS文件是否创建成功,是则进入步骤S6,否则进入步骤S7;

S6、检测在预设时间t2内USB盘符路径是否创建成功,是则进入步骤S12,否则进入步骤S7;

S7、判断USB驱动加载失败;

S8、发送预设USB驱动错误诊断码;

S9、接收所述预设USB驱动错误诊断码,结束当前USB驱动进程;

S10、判断模拟USB驱动进程拉起是否成功,是则返回步骤S3,否则进入下一步;

S11、判断为不可识别的设备,返回步骤S2;

S12、USB设备驱动加载成功,返回步骤S2。

具体地,所述判断是否为USB存储设备,包括如下步骤:

步骤301、检测USB设备版本目录下的版本PPS文件是否生成;

步骤302、判断所述版本PPS文件中的设备数目是否为1,是则进入下一步;

步骤303、判断所述版本PPS文件中的class ID是否为预设值,是则判断为USB设备,否则判断为非USB设备。

具体地,所述判断模拟USB驱动进程拉起是否成功,包括如下步骤:

步骤1001、检测模拟USB驱动进程拉起次数是否超过预设次数n,是则判断为不可识别的设备,否则进入下一步;

步骤1002、开始模拟USB驱动进程拉起,当监测到USB设备寄存器的状态由插入变为拔出时,将其判断为模拟USB驱动进程拉起运行中;

步骤1003、当监测到USB设备寄存器的状态由拔出变为插入时,判断模拟USB驱动进程拉起结束,并返回步骤3。

具体地,所述预设周期T=2s。

具体地,所述预设时间t1=5s。

具体地,所述预设时间t2=5s。

具体地,所述预设次数n=3。

本发明的有益效果在于:本发明通过检测USB的插拔状态,当检测到USB驱动加载失败后,发送预设USB驱动错误诊断码,结束当前USB驱动进程,然后模拟USB驱动进程拉起,实现USB设备驱动的重新加载。

附图说明

图1是本发明的QNX系统的USB驱动加载的流程示意图。

具体实施方式

下面结合附图具体阐明本发明的实施方式,附图仅供参考和说明使用,不构成对本发明专利保护范围的限制。

请参见图1,本实施例提供的QNX系统的USB驱动加载方法,主要包括以下步骤:

步骤1、系统启动,首次读取USB设备寄存器,获取USB设备初始状态并保存,启动USB状态监测线程。

所述USB设备初始状态为插入或者拔出。

步骤2、以预设周期T监测USB设备的插拔状态,若检测到USB设备已插入,则进入下一步。

在本实施例中,所述预设周期T=2s。

在具体实施时,所述监测USB设备的插拔状态通过读取USB设备寄存器来实现。

步骤3、判断是否为USB存储设备,是则进入下一步,否则进入步骤7。

具体地,所述判断是否为USB存储设备,包括如下步骤:

步骤301、检测USB设备版本目录下的版本PPS文件是否生成。

PPS即Persistent Pusblish/SubScribe的缩写,是QNX系统特有的多进程间的一种通讯方式。PPS文件是一个文件节点信息,里面记录了一些状态信息。

在本实施例中,所述USB设备版本目录为/pps/qnx/driver,该目录在QNX系统在USB设备已插入的情况下,会生成的一个版本PPS文件。例如,

/pps/qnx/driver/usb-1.0.1的PPS文件记录的就是当前的USB的1.0.1版本USB设备的状态信息。

步骤302、判断所述版本PPS文件中的设备数目是否为1,是则进入下一步。

步骤303、判断所述版本PPS文件中的class ID是否为预设值,是则判断为USB设备,否则判断为非USB设备。

按照USB通讯协议,USB的class ID=0x08。

步骤4、监测USB设备安装状态是否OK,是则进入步骤5,否则进入步骤6。

在具体实施时,通过检测/pps/qnx/mount节点是否生成来判断USB设备安装状态是否已OK。

步骤5、检测在预设时间t1内USB设备目录下的相应PPS文件是否创建成功,是则进入步骤6,否则进入步骤7。

在本实施例中,所述预设时间t1=5s。

在本实施例中,使用Linux的select函数来监控USB设备版本目录(/pps/qnx/device)、USB设备驱动目录(/pps/qnx/driver)及PPS文件是否已经生成。

步骤6、检测在预设时间t2内USB盘符路径是否创建成功,是则进入步骤12,否则进入步骤7。

在本实施例中,所述预设时间t2=5s。

步骤7、判断USB驱动加载失败。

步骤8、发送预设USB驱动错误诊断码。

步骤9、接收所述预设USB驱动错误诊断码,结束当前USB驱动进程。

在具体实施时,QNX系统通过资源管理器接收所述预设USB驱动错误诊断码,执行相应脚本结束所述当前USB驱动进程。

在具体实施时,所述USB驱动进程是指USBLauncher,它是QNX系统负责加载USB驱动的进程。

步骤10、判断模拟USB驱动进程拉起是否成功,是则返回步骤3,否则进入下一步。

在本实施例中,所述判断模拟USB驱动进程拉起是否成功,包括如下步骤:

步骤1001、检测模拟USB驱动进程拉起次数是否超过预设次数n,是则判断为不可识别的设备,否则进入下一步。

在本实施例中,所述预设次数n=3。

步骤1002、开始模拟USB驱动进程拉起,当监测到USB设备寄存器的状态由插入变为拔出时,将其判断为模拟USB驱动进程拉起运行中;

步骤1003、当监测到USB设备寄存器的状态由拔出变为插入时,判断模拟USB驱动进程拉起结束,并返回步骤3。

在重新启动USB驱动进程的过程中,最开始读取USB设备寄存器时,读取到的值为0,表示USB设备已拔出,然后寄存器读取到的值变为1,表示USB设备已插入;但实际上所述USB设备并未真正拔下然后插入,因此为了将重新启动USB驱动进程的过程与USB的物理拔插的过程区分,定义了重新启动USB驱动进程的过程中的三种状态:模拟USB驱动进程拉起开始、模拟USB驱动进程拉起运行中、模拟USB驱动进程拉起结束,从而实现重新启动USB驱动进程的目的。

步骤11、判断为不可识别的设备,返回步骤2。

步骤12、USB设备驱动加载成功,返回步骤2。

以上所揭露的仅为本发明的较佳实施例,不能以此来限定本发明的权利保护范围,因此依本发明申请专利范围所作的等同变化,仍属本发明所涵盖的范围。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值