一种适用于实时操作系统的热插拔软件方案的制作方法

文档序号:13207118阅读:341来源:国知局
一种适用于实时操作系统的热插拔软件方案的制作方法

本发明涉及一种硬件热插拔管理方案,尤其涉及一种适用于实时操作系统的热插拔软件方案,属于计算机技术领域。



背景技术:

热插拔(hot-plugging或hotswap)功能就是允许用户在不关闭系统,不切断电源的情况下对支持热插拔的硬件设备进行热插拔操作,例如硬盘的带电更换操作,usb设备的热插拔操作等。

实现热插拔需要有以下几个方面支持:总线电气特性、主板bios、操作系统和设备驱动。

计算机科学技术已经在硬件上完全满足了热插拔的特性,例如使用中断的方式当插入或者拔出一个设备时产生一个硬件上的中断来通知操作系统,或者当硬件出现插拔事件时置硬件上的一个状态位。

当前已存在操作系统在软件上对热插拔的支持,例如linux、windows等。linux操作系统对热插拔的支持过程如下:

1.外设插入;

2.总线发现新设备,调用相应的系统函数添加新设备到系统;

3.同时使用固定的通知消息通知应用层新设备的加入;

4.在应用层运行的后台程序检测到通知消息后做相应的处理;

5.同时另一个后台程序会根据消息类型自动生成对应的设备节点。

从以上热插拔处理过程可以发现几个问题:

1.每一种热插拔消息都会向系统添加新的设备;

2.对应热插拔消息的响应和处理需要两个后台程序;

3.热插拔消息需要复杂的结构体类型。

以上问题在一个嵌入式系统中通常是不希望存在的,因此现有的热插拔机制并不适合于嵌入式实时系统中。



技术实现要素:

本发明充分考虑了热插拔设备的硬件特性,以非常巧妙的机制实现了硬件的发现操作,实现方法如下:。

本发明解决技术问题采用如下技术方案:一种适用于实时操作系统的热插拔软件方案,其特征在于,所述实时操作系统包括驱动模块(1)、热插拔消息处理模块(2)、热插拔消息存储模块(3)和上层应用程序(4),

所述热插拔消息处理模块(2)包括t_hotplug线程(21)、热插拔消息处理函数(22)和热插拔消息检测函数(23),所述t_hotplug线程(21)监测所述热插拔消息处理函数(22)和所述热插拔消息检测函数(23)的状态;

所述驱动模块(1)调用所述热插拔消息处理模块(2)注册所述热插拔消息检测函数(23);硬件插入或拔出产生中断时,所述驱动模块(1)接收中断,调用所述热插拔消息处理模块(2)注册所述热插拔消息处理函数(22);硬件插入或拔出不产生中断时,所述驱动模块(1)调用所述热插拔消息处理模块(2)更新所述热插拔消息检测函数(23)的状态;

所述热插拔消息存储模块(3)存储若干个硬件热插拔消息(31),所述上层应用程序(4)通过所述热插拔消息存储模块(3)获得所述硬件热插拔消息(31);

所述适用于实时操作系统的热插拔软件方案包含以下步骤:

s1、所述驱动模块(1)调用所述热插拔消息处理模块(2)注册所述热插拔消息检测函数(23),执行步骤s2;

s2、硬件插入或者拔出,产生中断时,执行步骤s3,不产生中断时,执行步骤s6;

s3、所述驱动模块(1)调用所述热插拔消息处理模块(2)注册所述热插拔消息处理函数(22),执行步骤s4;

s4、所述热插拔消息处理模块(2)中的t_hotplug线程(21)监测到所述驱动模块(1)注册的所述热插拔消息处理函数(22)后被唤醒,执行步骤s5;

s5、所述热插拔消息处理模块(2)调用所述驱动模块(1)注册的所述热插拔消息处理函数(22),所述热插拔消息处理函数(22)调用所述驱动模块(1)获得插入或拔出的硬件信息,执行步骤s8;

s6、所述热插拔消息处理模块(2)中的t_hotplug线程(21)监测到所述驱动模块(1)注册的所述热插拔消息检测函数(23)状态改变后被唤醒,执行步骤s7;

s7、所述热插拔消息处理模块(2)调用所述驱动模块(1)注册的所述热插拔消息检测函数(23),所述热插拔消息检测函数(23)调用所述驱动模块(1)获得插入或拔出的硬件信息,执行步骤s8;

s8、所述热插拔消息处理模块(2)将所述硬件热插拔消息(31)存储到所述热插拔消息存储模块(3),执行步骤s9;

s9、所述上层应用程序(4)从所述热插拔消息存储模块(3)中获得所述硬件热插拔消息(31)。

前述的适用于实时操作系统的热插拔软件方案,其特征在于,所述t_hotplug线程(21)是长期运行的后台线程。

前述的适用于实时操作系统的热插拔软件方案,其特征在于,所述步骤s6中,在指定的时间内没有检测到所述硬件热插拔信息(31)时,所述t_hotplug线程(21)主动轮询系统事件链表查看是否存在需要处理的硬件热插拔事件。

前述的适用于实时操作系统的热插拔软件方案,其特征在于,所述硬件热插拔消息(31)以大端模式字节序存储,缓存区的前4个字节存储热插拔消息的设备类型,缓存区的第5个字节存放热插拔消息的动作类型(插入或者拔出),缓存区的第6个字节开始存放设备路径,紧随设备路径的缓存区中16个字节用来存放消息的其他信息。

前述的适用于实时操作系统的热插拔软件方案,其特征在于,所述步骤s9中,所述上层应用程序(4)通过open函数打开设备文件,然后通过select函数监控文件描述符是否可读,如果发现可读,则可以通过read函数读取所述硬件热插拔消息(31)。

本发明具有如下有益效果:

(1)实现的代码量小,节省了大量系统资源,非常适合于资源匮乏的嵌入式设备;另外,对于不支持主动上报热插拔的设备,使用定时轮询的机制,这种机制最大程度低节省了cpu资源,极大地提高了主动热插拔事件的响应速度,并且由于超时机制的存在大大地节省了cpu资源;

(2)本发明只需要调用一个接口支持各种硬件热插拔,只需要消耗很少的线程运行资源、队列资源、管理热插拔消息的队列资源等系统资源,用户不再需要关心太多的细节,使用简单,不需要任何其他辅助工具;

(3)热插拔消息以大端模式字节序的方式将4字节数据拆分成字节形式的数据,便于在网络中传递。

附图说明

图1为本发明的一种适用于实时操作系统的热插拔软件方案的一个具体实施例的结构示意图;

图2为图1的一种适用于实时操作系统的热插拔软件方案的一个具体实施例的t_hotplug线程的工作示意图;

图3为图1的一种适用于实时操作系统的热插拔软件方案的一个具体实施例的上层程序获取硬件热插拔消息的工作示意图;

图中标记示意为:1-驱动模块;2-热插拔消息处理模块;21-t_hotplug线程;22-热插拔消息处理函数;23-热插拔消息检测函数;3-热插拔消息存储模块;4-上层应用程序。

具体实施方式:

下面对本发明的具体实施方式详细说明。

实施例1:

参考图1、图2和图3,本发明的一种适用于实时操作系统的热插拔软件方案,实时操作系统包括驱动模块1、热插拔消息处理模块2、热插拔消息存储模块3和上层应用程序4,

热插拔消息处理模块2包括t_hotplug线程21、热插拔消息处理函数22和热插拔消息检测函数23,t_hotplug线程21监测热插拔消息处理函数22和热插拔消息检测函数23的状态;

驱动模块1调用热插拔消息处理模块2注册热插拔消息检测函数23;硬件插入或拔出产生中断时,驱动模块1接收中断,调用热插拔消息处理模块2注册热插拔消息处理函数22;硬件插入或拔出不产生中断时,驱动模块1调用热插拔消息处理模块2更新热插拔消息检测函数23的状态;

热插拔消息存储模块3存储多个硬件热插拔消息31,上层应用程序4通过热插拔消息存储模块3获得硬件热插拔消息31。

适用于实时操作系统的热插拔软件方案包含以下步骤:

s1、驱动模块1调用热插拔消息处理模块2注册热插拔消息检测函数23,执行步骤s2;

s2、硬件插入或者拔出,产生中断时,执行步骤s3,不产生中断时,执行步骤s6;

s3、驱动模块1调用热插拔消息处理模块2注册热插拔消息处理函数22,执行步骤s4;

s4、热插拔消息处理模块2中的t_hotplug线程21监测到驱动模块1注册的热插拔消息处理函数22后被唤醒,执行步骤s5;

s5、热插拔消息处理模块2调用驱动模块1注册的热插拔消息处理函数22,热插拔消息处理函数22调用所述驱动模块1获得插入或拔出的硬件信息,执行步骤s8;

s6、热插拔消息处理模块2中的t_hotplug线程21监测到驱动模块1注册的热插拔消息检测函数23状态改变后被唤醒,执行步骤s7;

s7、热插拔消息处理模块2调用驱动模块1注册的热插拔消息检测函数23,热插拔消息检测函数23调用驱动模块1获得插入或拔出的硬件信息,执行步骤s8;

s8、热插拔消息处理模块2将硬件热插拔消息31存储到热插拔消息存储模块3,执行步骤s9;

s9、上层应用程序4从热插拔消息存储模块3中获得硬件热插拔消息31。

作为一种优选的方案,t_hotplug线程21是长期运行的后台线程。

作为一种优选的方案,步骤s6中,在指定的时间内没有检测到硬件热插拔信息31时,t_hotplug线程21主动轮询系统事件链表查看是否存在需要处理的硬件热插拔事件。

作为一种优选的方案,硬件热插拔消息31以大端模式字节序存储,缓存区的前4个字节存储热插拔消息的设备类型,是usb设备、pci设备还是其他设备产生的热插拔消息;缓存区的第5个字节存放热插拔消息的动作类型(插入或者拔出),缓存区的第6个字节开始存放设备路径,紧随设备路径的缓存区中16个字节用来存放消息的其他信息。

作为一种优选的方案,步骤s9中,上层应用程序4通过open函数打开设备文件,然后通过select函数监控文件描述符是否可读,如果发现可读,则可以通过read函数读取硬件热插拔消息31。

实施例2:

当一个usb键盘硬件插入时,将产生一个插入中断,依次执行步骤s1、步骤s2、步骤s3、步骤s4、步骤s5、步骤s8和步骤s9:

s1、驱动模块1调用热插拔消息处理模块2注册热插拔消息检测函数23,执行步骤s2;

s2、usb键盘硬件插入产生中断,执行步骤s3;

s3、驱动模块1调用热插拔消息处理模块2注册热插拔消息处理函数22,执行步骤s4;

s4、热插拔消息处理模块2中的t_hotplug线程21监测到驱动模块1注册的热插拔消息处理函数22后被唤醒,执行步骤s5;

s5、热插拔消息处理模块2调用驱动模块1注册的热插拔消息处理函数22,热插拔消息处理函数22调用所述驱动模块1获得插入或拔出的usb键盘硬件的信息,执行步骤s8;

s8、热插拔消息处理模块2将usb键盘硬件的热插拔消息31存储到热插拔消息存储模块3,执行步骤s9;

s9、上层应用程序4从热插拔消息存储模块3中获得usb键盘的硬件热插拔消息31。

当一个上层应用程序4需要检测一个usb键盘是否已经插入或者拔出时,通过open函数打开“/dev/hotplug”设备文件,然后调用select函数查usb键盘设备文件的可读状态,当usb键盘设备文件可读的时候,调用read函数读取该usb键盘设备文件的硬件热插拔消息31。

实施例3:

当一个sd卡设备插入时,该设备并不支持主动上报热插拔消息,依次执行步骤s1、步骤s2、步骤s6、步骤s7、步骤s8和步骤s9:

s1、驱动模块1调用热插拔消息处理模块2注册热插拔消息检测函数23,执行步骤s2;

s2、sd卡硬件插入不产生中断,执行步骤s6;

s6、热插拔消息处理模块2中的t_hotplug线程21监测到驱动模块1注册的热插拔消息检测函数23状态改变后被唤醒,此时t_hotplug线程21主动轮询系统事件链表查看硬件热插拔事件以确认是否产生了sd卡插入或者拔出消息,执行步骤s7;

s7、热插拔消息处理模块2调用驱动模块1注册的热插拔消息检测函数23,热插拔消息检测函数23调用驱动模块1获得插入或拔出的sd卡硬件信息,执行步骤s8;

s8、热插拔消息处理模块2将sd卡的硬件热插拔消息31存储到热插拔消息存储模块3,执行步骤s9;

s9、上层应用程序4从热插拔消息存储模块3中获得sd卡的硬件热插拔消息31。

上面对本发明的实施方式做了详细说明。但是本发明并不限于上述实施方式,在所属技术领域普通技术人员所具备的知识范围内,还可以在不脱离本发明宗旨的前提下做出各种变化。

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