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