一种残膜回收机防缠绕挑膜装置的制 一种秧草收获机用电力驱动行走机构

一种SDIO通信异常的监测方法、架构及计算机可读存储介质与流程

2021-11-20 02:59:00 来源:中国专利 TAG:

一种sdio通信异常的监测方法、架构及计算机可读存储介质
技术领域
1.本发明属于汽车电子技术领域,具体涉及一种sdio通信异常的监测方法、架构及计算机可读存储介质。


背景技术:

2.车载娱乐系统向多功能,智能化方向发展,导致其系统越来越庞大,越来越复杂。目前很多车载娱乐系统都基于linux操作系统上开发,控制芯片上使用大量外围设备,sdio(secure digital input and output,安全数字输入输出卡)接口广泛应用在控制芯片与外围设备的通信上。车载环境的复杂增加控制芯片与sdio外围设备之间的干扰,增加sdio外设通信异常的概率,但是车载领域对通信质量有高于一般电子产品的要求。很多场景下sdio外设出现通信异常,要求能够不断电的情况下恢复外设的使用,因此需要对于sdio通信异常进行监控。
3.现有的一些对sdio接口的wifi模块出现异常的监控方法,是通过sdio设备节点的接口向wifi模块发送请求消息,若未接收到wifi模块的响应信息则判定与wifi模块的通信异常。这种方案是一种被动轮询方法,不仅消耗cpu资源,而且只能发现sdio出现通信异常,并不能定位具体的异常类型。


技术实现要素:

4.本发明实施例所要解决的技术问题在于,提供一种sdio通信异常的监测方法、架构及计算机可读存储介质,以在sdio外围设备发生通信异常时,主动通知上层应用具体的sdio异常码,从而获知具体的异常类型以便进行相应的处理。
5.为解决上述技术问题,本发明提供一种sdio通信异常的监测方法,所述监测方法基于linux实施,包括:
6.步骤s1,在sdio通信出现异常时,从sdio外围设备驱动通信接口获取与sdio通信异常类型相对应的sdio异常码;
7.步骤s2,将所述sdio异常码保存至内核的环境变量中;
8.步骤s3,通过内核uevent机制发送携带有所述环境变量的内核事件到用户空间;
9.步骤s4,用户空间提取所述环境变量,从中获得所述sdio异常码。
10.进一步地,所述步骤s2具体包括:将所述sdio异常码转换为ascii码,以“sdioevt=xxx”的格式保存到内核的环境变量中,其中xxx表示所述sdio异常码。
11.进一步地,所述步骤s3具体包括:内核中的虚拟文件系统sysfs通过netlink向用户空间发出kobj_change类型的uevent事件消息,所述uevent事件消息中携带有所述步骤s2中保存的环境变量。
12.进一步地,所述步骤s4具体包括:用户空间的可执行文件uevent helper从接收的kobj_change类型的uevent事件消息中提取“sdioevt=xxx”格式的环境变量,从中获得所述sdio异常码。
13.进一步地,用户空间获得所述sdio异常码后,进行sdio的重新初始化,或者对sdio外围设备进行重新上下电。
14.进一步地,所述sdio异常码为负的数值。
15.本发明还提供一种sdio通信异常的监测架构,所述监测架构基于linux实现,包括:
16.获取模块,用于在sdio通信出现异常时,从sdio外围设备驱动通信接口获取与sdio通信异常类型相对应的sdio异常码;
17.保存模块,用于将所述sdio异常码保存至内核的环境变量中;
18.发送模块,用于通过内核uevent机制发送携带有所述环境变量的内核事件到用户空间;
19.提取模块,用于供用户空间提取所述环境变量,并从中获得所述sdio异常码。
20.本发明还提供一种计算机可读存储介质,所述计算机可读存储介质包括存储的计算机程序;其中,所述计算机程序在运行时控制所述计算机可读存储介质所在的设备执行所述的sdio通信异常的监测方法。
21.实施本发明具有如下有益效果:通过向sdio外围设备驱动通信接口函数内注入linux内核的uevent通知机制,在sdio通信出现异常的时候捕捉sdio异常码,以特定格式存入到uevent的环境变量envp中,并向用户空间发送kobj_change事件,实现对sdio通信异常进行检测和通知;用户空间在处理kobj_change事件的时候,可以通过提取特定格式的环境变量获得sdio异常码,使得sdio外围设备的通信故障可以被用户空间获取,由用户空间对异常做进一步的处理,实现外设功能的恢复,是对sdio规范的一种延伸。
附图说明
22.为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
23.图1为本发明实施例一一种sdio通信异常的监测方法的流程示意图。
24.图2为本发明实施例的原理示意图。
具体实施方式
25.以下各实施例的说明是参考附图,用以示例本发明可以用以实施的特定实施例。
26.请参照图1所示,本发明实施例一提供一种sdio通信异常的监测方法,该监测方法基于linux实施,包括:
27.步骤s1,在sdio通信出现异常时,从sdio外围设备驱动通信接口获取与sdio通信异常类型相对应的sdio异常码;
28.步骤s2,将所述sdio异常码保存至内核的环境变量中;
29.步骤s3,通过内核uevent机制发送携带有所述环境变量的内核事件到用户空间;
30.步骤s4,用户空间提取所述环境变量,从中获得所述sdio异常码。
31.具体地,请同时结合图2所示,本实施例中,采用sdio异常码来表征sdio通信异常
类型,sdio异常码可以是负的数值,例如下表所示,-110表示sdio通信超时,-84表示字节序非法。
32.linux错误代码异常码说明enodata-61/*no data available*/没有可用数据eilseq-84/*illegal byte sequence*/字节序非法emsgsize-90/*message too long*/消息过长enobufs-105/**/没有可用的缓冲空间enotconn-107/*transport endpoint is not connected*/传输端点未连接etimedout-110/*connection timed out*/通信超时
33.需要说明的是,linux并没有针对异常提供进一步的处理机制,在发生sdio通信异常时,sido外围设备只能处于不可用状态。在车载环境中,sdio外围设备出现异常的概率更高,需要在失效时及时恢复,因此,在sdio出现通信异常的时候,本实施例将异常情况通过前述sdio异常码的形式通知上层应用,以便对应进行处理。
34.步骤s2中,将sdio异常码转换为ascii码,以字符串类型的“sdioevt=xxx”(xxx代表sdio异常码)的格式保存到内核的环境变量(envp)中。
35.步骤s3具体是由内核中的sysfs通过netlink向用户空间发出kobj_change类型的uevent事件消息,消息中携带步骤s2中保存的环境变量。如前所述,该环境变量里包含有“sdioevt=xxx”格式的sdio异常码。
36.可以理解的是,sysfs是linux 2.6所提供的一种虚拟文件系统,不仅可以把硬件(device)和驱动(driver)的信息从内核输出到用户空间,也可以用来对硬件和驱动做设置。sysfs虚拟文件系统中最基本的结构是kobject,kobject可以代表一个设备,一条总线等。uevent是kobject的一部分,用于在kobject状态发生改变时,例如增加、移除等,通知用户空间。kobj_change一般用于表示设备状态或者内容发生改变,在本实施例中,即表示sido外围设备状态发生了改变——发生了通信异常。netlink是linux提供的用于内核和用户空间之间的通信方式。
37.步骤s4中,用户空间的可执行文件(或者脚本,简称为uevent helper)从接收的kobj_change类型的uevent事件消息中提取“sdioevt=xxx”格式的环境变量,从而获得sdio异常码,进而对sdio异常做进一步处理。用户空间可以定制不同策略处理不同异常,例如进行sdio的重新初始化,或者对sdio外设进行重新上下电等操作,实现外设功能的恢复。
38.相应于本发明实施例一提供的一种sdio通信异常的监测方法,本发明实施例二提供一种sdio通信异常的监测架构,所述监测架构基于linux实现,包括:
39.获取模块,用于在sdio通信出现异常时,从sdio外围设备驱动通信接口获取与sdio通信异常类型相对应的sdio异常码;
40.保存模块,用于将所述sdio异常码保存至内核的环境变量中;
41.发送模块,用于通过内核uevent机制发送携带有所述环境变量的内核事件到用户空间;
42.提取模块,用于供用户空间提取所述环境变量,并从中获得所述sdio异常码。
43.本发明实施例三还提供一种计算机可读存储介质,所述计算机可读存储介质包括存储的计算机程序;其中,所述计算机程序在运行时控制所述计算机可读存储介质所在的
设备执行如上所述的sdio通信异常的监测方法。优选地,所述计算机程序可以被分割成一个或多个模块/单元(如计算机程序1、计算机程序2、
……
),所述一个或者多个模块/单元被存储在所述存储器中,并由所述处理器执行,以完成本发明。所述一个或多个模块/单元可以是能够完成特定功能的一系列计算机程序指令段,该指令段用于描述所述计算机程序在所述装置中的执行过程。
44.所述处理器可以是中央处理单元(central processing unit,cpu),还可以是其他通用处理器、数字信号处理器(digital signal processor,dsp)、专用集成电路(application specific integrated circuit,asic)、现成可编程门阵列(field-programmable gate array,fpga)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件等,通用处理器可以是微处理器,或者所述处理器也可以是任何常规的处理器,所述处理器是所述装置的控制中心,利用各种接口和线路连接所述装置的各个部分。
45.所述存储器主要包括程序存储区和数据存储区,其中,程序存储区可存储操作系统、至少一个功能所需的应用程序等,数据存储区可存储相关数据等。此外,所述存储器可以是高速随机存取存储器,还可以是非易失性存储器,例如插接式硬盘,智能存储卡(smart media card,smc)、安全数字(secure digital,sd)卡和闪存卡(flash card)等,或所述存储器也可以是其他易失性固态存储器件。
46.需要说明的是,上述装置可包括,但不仅限于,处理器、存储器,本领域技术人员可以理解。
47.通过上述说明可知,与现有技术相比,本发明的有益效果在于:通过向sdio外围设备驱动通信接口函数内注入linux内核的uevent通知机制,在sdio通信出现异常的时候捕捉sdio异常码,以特定格式存入到uevent的环境变量envp中,并向用户空间发送kobj_change事件,实现对sdio通信异常进行检测和通知;用户空间在处理kobj_change事件的时候,可以通过提取特定格式的环境变量获得sdio异常码,使得sdio外围设备的通信故障可以被用户空间获取,由用户空间对异常做进一步的处理,例如进行sdio的重新初始化,或者对sdio外设进行重新上下电等操作,实现外设功能的恢复,是对sdio规范的一种延伸。
48.以上所揭露的仅为本发明较佳实施例而已,当然不能以此来限定本发明之权利范围,因此依本发明权利要求所作的等同变化,仍属本发明所涵盖的范围。
再多了解一些

本文用于企业家、创业者技术爱好者查询,结果仅供参考。

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表

相关文献