外部设备自动挂载和通知的控制方法及系统与流程

文档序号:14848198发布日期:2018-07-03 19:06阅读:354来源:国知局
外部设备自动挂载和通知的控制方法及系统与流程

本发明涉及嵌入式技术领域,尤其涉及外部设备自动挂载和通知的控制方法及系统。



背景技术:

在嵌入式设备的应用中,经常会出现接入外部设备的需求,其中,典型的外部设备的接入有热插拔U盘、移动硬盘等,毫无疑问,用户希望能自动挂载这些外部设备后直接使用。现有技术中,将外部设备挂载在PC(personal computer:个人电脑)上一般采用udev方案,然而udev作为后台执行程序并不适用于嵌入式系统,其会消耗较多的CPU(中央处理器:Central Processing Unit)资源,同时占用过多的内存,并且,对于嵌入式系统来说,应用层除了自动挂载以外,还希望外部设备在插入后能自动通知,从而使得应用层在获取相关挂载信息后能够使用该外部设备,该方案在现有技术中尚未出现。



技术实现要素:

本发明的目的在于提供一种外部设备自动挂载和通知的控制方法及系统,用以在嵌入式系统中自动挂载外部设备的同时,实现将该挂载信息通知需要获取外部设备挂载信息的各应用程序,且在满足嵌入式系统的需求的同时,能够节约CPU资源,减少内存占用,进而提升用户体验度。

根据本发明实施例的第一方面,提供一种外部设备自动挂载和通知的控制方法,包括:

检测当前是否存在外部设备的插拔;

当检测到存在外部设备的热插拔时,解析插拔环境变量,并根据解析结果在sysfs文件系统中创建或删除对应的文件和路径;

在预设路径下创建或删除与所述外部设备对应的设备节点;

将外部设备的插拔信息发送至已订阅消息的应用列表中的各应用程序。

优选地,所述当检测到存在外部设备的热插拔时,解析插拔环境变量,并根据解析结果在sysfs文件系统中创建或删除对应的文件和路径包括:

当检测到存在外部设备的热插拔时,接收并根据预设规则解析与所述外部设备的热插拔事件对应的插拔环境变量;

根据解析所述插拔环境变量所得到的外部设备的热插拔信息在sysfs文件系统中创建或删除与外部设备对应的文件和路径;

将所述外部设备的热插拔信息封装为XML消息并发送至核心进程。

优选地,所述的外部设备自动挂载和通知的控制方法还包括:

开机时遍历sysfs文件系统以查找冷插拔信息;

将遍历sysfs文件系统后所得到的外部设备的冷插拔信息封装为XML消息并发送至所述核心进程。

优选地,所述在预设路径下创建或删除与所述外部设备对应的设备节点包括:

接收所述XML消息并将其解包;

根据所述XML消息在所述sysfs文件系统中的dev文件所对应的路径下创建或删除与外部设备对应的设备节点,以完成所述外部设备的挂载或卸载;

将所述外部设备的创建或删除信息更新至外设列表。

优选地,所述将外部设备的插拔信息发送至已订阅消息的应用列表中的各应用程序包括:

接收应用程序发出的订阅消息请求并建立应用列表;

将更新后的外设列表或所述外设列表的更新信息通知所述应用列表中的各应用程序;

接收所述应用程序发出的取消订阅消息请求并根据所述取消订阅消息请求将对应的应用程序从所述应用列表中删除。

优选地,所述核心进程与所述应用列表的各应用程序之间,通过socket或者共享内存的方式通信;

所述检测当前是否存在外部设备的插拔之前还包括:

将所述核心进程写入开机自启动脚本文件中;

创建所述外设列表和所述应用列表。

根据本发明实施例的第二方面,还提供一种外部设备自动挂载和通知的控制系统,包括:

检测模块,用于检测当前是否存在外部设备的插拔;

解析模块,用于当检测到存在外部设备的热插拔时,解析插拔环境变量,并根据解析结果在sysfs文件系统中创建或删除对应的文件和路径;

挂载模块,用于在预设路径下创建或删除与所述外部设备对应的设备节点;

通知模块,用于将外部设备的插拔信息发送至已订阅消息的应用列表中的各应用程序。

优选地,所述解析模块包括:

解析子模块,用于当检测到存在外部设备的热插拔时,接收并根据预设规则解析与所述外部设备的热插拔事件对应的插拔环境变量;

信息变更子模块,用于根据解析所述插拔环境变量所得到的外部设备的热插拔信息在sysfs文件系统中创建或删除与外部设备对应的文件和路径;

消息传送子模块,用于将所述外部设备的热插拔信息封装为XML消息并发送至核心进程。

优选地,所述外部设备自动挂载和通知的控制系统还包括:

冷插拔检测模块,用于开机时遍历sysfs文件系统以查找冷插拔信息;

消息传送模块,用于将遍历sysfs文件系统后所得到的外部设备的冷插拔信息封装为XML消息并发送至所述核心进程。

优选地,所述挂载模块包括:

消息接收子模块,用于接收所述XML消息并将其解包;

设备节点管理子模块,用于根据所述XML消息在所述sysfs文件系统中的dev文件所对应的路径下创建或删除与外部设备对应的设备节点,以完成所述外部设备的挂载或卸载;

挂载子模块,用于将所述外部设备的创建或删除信息更新至外设列表。

优选地,所述通知模块包括:

订阅子模块,用于接收应用程序发出的订阅消息请求并建立应用列表;

通知子模块,用于将更新后的外设列表或所述外设列表的更新信息通知所述应用列表中的各应用程序;还用于接收所述应用程序发出的取消订阅消息请求并根据所述取消订阅消息请求将对应的应用程序从所述应用列表中删除。

优选地,所述核心进程与所述应用列表的各应用程序之间,通过socket或者共享内存的方式通信;所述外部设备自动挂载和通知的控制系统还包括:

进程写入模块,用于将所述核心进程写入开机自启动脚本文件中;

列表创建模块,用于创建所述外设列表和所述应用列表。

本发明实施例提供的技术方案可产生以下有益效果:检测当前是否存在外部设备的插拔;当检测到存在外部设备的热插拔时,解析插拔环境变量,并根据解析结果在sysfs文件系统中创建或删除对应的文件和路径;在预设路径下创建或删除与所述外部设备对应的设备节点;将外部设备的插拔信息发送至已订阅消息的应用列表中的各应用程序。本发明在嵌入式系统中自动挂载外部设备的同时,实现将该挂载信息通知需要获取外部设备挂载信息的各应用程序,在满足嵌入式系统的需求的同时,能够节约CPU资源,减少内存占用,进而提升用户体验度。

本发明的其它特征和优点将在随后的说明书中阐述,并且,部分地从说明书中变得显而易见,或者通过实施本发明而了解。本发明的目的和其他优点可通过在所写的说明书、权利要求书、以及附图中所特别指出的结构来实现和获得。

下面通过附图和实施例,对本发明的技术方案做进一步的详细描述。

附图说明

图1为本发明根据一示例性实施例示出的一种外部设备自动挂载和通知的控制方法的流程图;

图2为本发明根据一示例性实施例示出的一种外部设备自动挂载和通知的控制方法的步骤S20的流程图;

图3为本发明根据一示例性实施例示出的另一种外部设备自动挂载和通知的控制方法的流程图;

图4为本发明根据一示例性实施例示出的一种外部设备自动挂载和通知的控制方法的步骤S30的的流程图;

图5为本发明根据一示例性实施例示出的一种外部设备自动挂载和通知的控制方法的步骤S40的流程图;

图6为本发明根据一示例性实施例示出的又一种外部设备自动挂载和通知的控制方法的流程图;

图7为本发明根据一示例性实施例示出的一种外部设备自动挂载和通知的控制系统的框图;

图8为本发明根据一示例性实施例示出的外部设备自动挂载和通知的控制系统的解析模块62的框图;

图9为本发明根据一示例性实施例示出的另一种外部设备自动挂载和通知的控制系统的图;

图10为本发明根据一示例性实施例示出的一种外部设备自动挂载和通知的控制系统的挂载模块63的框图;

图11为本发明根据一示例性实施例示出的一种外部设备自动挂载和通知的控制系统的通知模块64的框图;

图12为本发明根据一示例性实施例示出的又一种外部设备自动挂载和通知的控制系统的框图。

具体实施方式

为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅用以解释本发明,并不用于限定本发明。

本发明实施例提供了一种外部设备自动挂载和通知的控制方法及系统,用以在嵌入式系统中自动挂载外部设备的同时,实现将该挂载信息通知需要获取外部设备挂载信息的各应用程序,且在满足嵌入式系统的需求的同时,能够节约CPU资源,减少内存占用,进而提升用户体验度。如图1所示,该方法包括步骤S10-S40:

在步骤S10中,检测当前是否存在外部设备的插拔;其中,所述外部设备的插拔(插入或拔出)包括热插拔和冷插拔,在开机之前进行的外部设备的插拔定义为冷插拔;而在开机之后进行的外部设备的插拔均被定义为热插拔。

在步骤S20中,当检测到存在外部设备的热插拔时,解析插拔环境变量,并根据解析结果在sysfs文件系统中新建或删除对应的文件和路径;也即,当检测到在开机之后插入或者拔出了外部设备,此时,由于在嵌入式系统中预先定义了外部设备热插拔时会被配置的插拔环境变量,因此当有外部设备在开机之后插入或者拔出时,会接收并解析外部设备的热插拔所对应的插拔环境变量,并根据解析后的插拔环境变量,在sysfs文件系统中新建或删除对应的文件和路径。其中,对外部设备的插拔行为的检测是由外设感知进程执行的,外设感知进程执行以下操作:当检测到外部设备插入时,在sysfs文件系统中新建对应的文件和路径,当检测到外部设备拔出时,将sysfs文件系统中已存在的该外部设备的文件和路径删除,也即对由该外部设备的热插拔所引起的文件系统中的文件和路径的变化进行同步变更。

在一些实施例中,如图2所示,所述步骤S20包括:

步骤S201、当检测到存在外部设备的热插拔时,接收并根据预设规则解析与所述外部设备的热插拔事件对应的插拔环境变量;具体的,在一实施例中,当检测到存在外部设备的热插拔时,linux(嵌入式系统)内核中的预设机制(如uevent_helper机制)调用所述外设感知进程,接收与所述外部设备的热插拔事件对应的插拔环境变量,并根据linux系统中预先定义的插拔环境变量的配置规则,解析所述插拔环境变量,以判断当前外部设备是插入或拔出;比如,解析后的插拔环境变量ACTION为add,表示外部设备插入,解析后的插拔环境变量ACTION为remove,则表示外部设备拔出。

步骤S202、根据解析所述插拔环境变量所得到的外部设备的热插拔信息在sysfs文件系统中创建或删除与外部设备对应的文件和路径;也即根据解析所述插拔环境变量后所得到的外部设备的热插拔信息同步变更sysfs文件系统中的文件和路径,并将所述路径赋值给路径环境变量;在一实施例中,所述路径环境变量为DEVPATH,也即,在外部设备的路径发生变化后,需要将其赋值给DEVPATH,以更改其路径,且赋值给DEVPATH后的路径下保存的文件(即为/dev目录下的dev文件)也应该根据所述外部设备的插拔时间进行同步变更。

步骤S203、将所述外部设备的热插拔信息封装为XML消息并发送至核心进程。其中,封装的所述外部设备的热插拔信息包括外部设备的热插拔事件所对应变更的文件和路径信息,还包括解析后的所述插拔环境变量信息。

如图6所示,所述步骤S10之前还包括步骤S70:将外设感知进程和核心进程写入开机自启动脚本文件中;创建所述外设列表和所述应用列表。在一个实施例中,所述步骤S70具体为:将上述外设感知进程与上述核心进程写入开机自启动脚本文件(所述自启动脚本文件可以是/etc/inittab或者/etc/rc.d/rc.local)中;其中,所述核心进程的开机自启动完成时间先于所述外设感知进程,且所述外部设备的冷插拔在开机自运行所述外设感知进程之后可以被检测到。

在一些实施例中,如图3所示,所述步骤S10之后还包括步骤S50和步骤S60:

在步骤S50中,开机时遍历sysfs文件系统以查找冷插拔信息;具体的,可以在嵌入式系统中设置接口环境变量如SUBSYSTEM,在开机时自动检测该接口环境变量,进而获取外部设备的冷插拔信息。同时,在检测到存在外部设备的冷插拔时,通过所述外设感知进程遍历sysfs文件系统中的文件;其中,遍历的所述sysfs文件系统中的文件包括/sys/class、/sys/block、/sys/device等路径下的文件。

在步骤S60中,将遍历sysfs文件系统后所得到的外部设备的冷插拔信息封装为XML消息并发送至所述核心进程。其中,封装的所述外部设备的冷插拔信息包括外部设备的冷插拔事件所对应的文件和路径信息,还包括所述外部设备的插或拔的信息。

在步骤S30中,在预设路径下创建或删除与所述外部设备对应的设备节点;具体的,在一个实施例中,所述核心进程在接收到封装的XML消息后,将其解包并找寻预设的路径并在该路径下创建/删除所述外部设备的设备节点,完成所述外部设备的挂载/卸载。

在一些实施例中,如图4所示,所述步骤S30包括:

步骤S301、接收所述XML消息并将其解包;其中,所述XML消息包括外部设备的冷插拔信息和外部设备的热插拔信息,且一个XML消息可能包含多个设备的插拔情况(例如包含开机时检测到的多个外部设备的冷插拔),也可能只有一个热插拔设备的情况。

步骤S302、根据所述XML消息在所述sysfs文件系统中的dev文件所对应的路径下创建或删除与外部设备对应的设备节点,以完成所述外部设备的挂载或卸载;所述dev文件为路径环境变量DEVPATH所关联的路径,也即为sysfs文件系统中/dev目录下的文件。

步骤S303、将所述外部设备的创建或删除信息更新至外设列表。也即,如果是外部设备的热插拔,比如,如果解析后XML信息中的插拔环境变量ACTION为add,那么在/dev目录下面创建新的设备节点,同时根据预定的规则(比如,可以使用正则表达式表示该规则,且该规则可以使用配置文件进行配置)挂载到某个目录下,并且设置该外部设备的读写权限和属主、群属主,同时,将该外部设备添加到设备列表,从而完成所述外部设备的挂载;而如果解析后XML信息中的插拔环境变量ACTION为remove,此时需要删除/dev目录下的设备节点,卸载与其对应的目录,同时把所述外部设备设备从设备列表中移除。可理解的,如果是所述外部设备的冷插拔,也可以参照以上方式,在直接根据检测到的插拔信息将所述外部设备挂载/卸载的同时,创建/删除信息变更至外设列表,完成所述外部设备的挂载/卸载。

在步骤S40中,将外部设备的插拔信息发送至已订阅消息的应用列表中的各应用程序。也即,在一个实施例中,所有应用可以连接至所述核心进程并向其发送消息,如果一个应用对所述核心进程发送订阅信息表示其对外部设备的插拔变化是感兴趣的,此时把该应用加入到应用列表中,以便于向其发送外部设备的插拔信息。同时,应用列表中的各应用也可以发送取消订阅信息来表示其并不想不关注外部设备的插拔变化情况,此时,所述核心进程将从所述应用列表中删除所述应用,并且断开与所述应用的连接。当然,在所有应用第一次连接所述核心进程时,所述核心进程都需要发送此时外设列表中的设备信息给该应用,以便于该应用确定其是否需要订阅。

在一些实施例中,如图5所示,所述步骤S40包括:

步骤S401、接收应用程序(例如多媒体扫描程序、文件浏览器等应用)发出的订阅消息请求并建立应用列表;也即,所有应用可以连接至所述核心进程并向其发送消息,如果一个应用对所述核心进程发送订阅信息表示其对外部设备的插拔变化是感兴趣的,此时把该应用加入到应用列表中,以便于向其发送外部设备的插拔信息。

步骤S402、将更新后的外设列表或所述外设列表的更新信息通知所述应用列表中的各应用程序;其中,所述核心进程还用于接收所述应用程序发出的取消订阅消息请求并根据所述取消订阅消息请求将对应的应用程序从所述应用列表中删除。其中,广播通知的所述外部设备的插拔信息为所述外设列表中的设备信息,所述设备信息包括冷插拔的外部设备信息和开机之后的所有热插拔的外部设备的信息。同时,应用列表中的各应用也可以发送取消订阅信息来表示其并不想不关注外部设备的插拔变化情况,此时,所述核心进程将从所述应用列表中删除所述应用,并且断开与所述应用的连接。

在一些实施例中,所述核心进程与所述应用列表的各应用程序之间,通过socket(网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket)或者共享内存的方式通信;同时,所述外设感知进程与所述核心进程之间也通过socket或者共享内存的方式通信;其中,所述核心进程与所述应用列表之间的通信是双向的,且两者之间可以长时间保持连接也可以连接一次就断开。

如图6所示,所述步骤S10之前还包括步骤S80:在步骤S80中,创建外设列表和应用列表。在所述核心进程开机自启动之后,即需要自行创建所述外设列表和应用列表,以便于所述核心进程循环接收信息并进行处理。

本发明实施例提供的上述方法,检测当前是否存在外部设备的插拔;当检测到存在外部设备的热插拔时,解析插拔环境变量,并根据解析结果在sysfs文件系统中创建或删除对应的文件和路径;在预设路径下创建或删除与所述外部设备对应的设备节点;将外部设备的插拔信息发送至已订阅消息的应用列表中的各应用程序。本发明在嵌入式系统中自动挂载外部设备的同时,实现将该挂载信息通知需要获取外部设备挂载信息的各应用程序,且在满足嵌入式系统的需求的同时,能够节约CPU资源,减少内存占用,进而提升用户体验度。

对应本发明实施例提供的外部设备自动挂载和通知的控制方法,本发明还提供一种外部设备自动挂载和通知的控制系统,如图7所示,该系统可包括:

检测模块61,用于检测当前是否存在外部设备的插拔;

解析模块62,用于当检测到存在外部设备的热插拔时,解析插拔环境变量,并根据解析结果在sysfs文件系统中创建或删除对应的文件和路径;

挂载模块63,用于在预设路径下创建或删除与所述外部设备对应的设备节点;

通知模块63,用于将外部设备的插拔信息发送至已订阅消息的应用列表中的各应用程序。

优选地,如图8所示,所述解析模块62包括:

解析子模块621,用于当检测到存在外部设备的热插拔时,接收并根据预设规则解析与所述外部设备的热插拔事件对应的插拔环境变量;

信息变更子模块622,用于根据解析所述插拔环境变量所得到的外部设备的热插拔信息在sysfs文件系统中创建或删除与外部设备对应的文件和路径;

消息传送子模块623,用于将所述外部设备的热插拔信息封装为XML消息并发送至核心进程。

优选地,如图9所示,所述外部设备自动挂载和通知的控制系统还包括:

冷插拔检测模块65,用于开机时遍历sysfs文件系统以查找冷插拔信息;

消息传送模块66,用于将遍历sysfs文件系统后所得到的外部设备的冷插拔信息封装为XML消息并发送至核心进程。

优选地,如图10所示,所述挂载模块63包括:

消息接收子模块631,用于接收所述XML消息并将其解包;

设备节点管理子模块632,用于根据所述XML消息在所述sysfs文件系统中的dev文件所对应的路径下创建或删除与外部设备对应的设备节点,以完成所述外部设备的挂载或卸载;

挂载子模块633,用于将所述外部设备的创建或删除信息更新至外设列表。

优选地,如图11所示,所述通知模块64包括:

订阅子模块641,用于接收应用程序发出的订阅消息请求并建立应用列表;

通知子模块642,用于将更新后的外设列表或所述外设列表的更新信息通知所述应用列表中的各应用程序;还用于接收所述应用程序发出的取消订阅消息请求并根据所述取消订阅消息请求将对应的应用程序从所述应用列表中删除。

优选地,所述核心进程与所述应用列表的各应用程序之间,通过socket或者共享内存的方式通信;如图12所示,所述外部设备自动挂载和通知的控制系统还包括:

进程写入模块67,用于将所述核心进程写入开机自启动脚本文件中;

列表创建模块68,用于创建所述外设列表和所述应用列表。

本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器和光学存储器等)上实施的计算机程序产品的形式。

本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。

这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。

这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。

以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1