CN102830970A - 一种适用于Linux嵌入式系统的热插拔处理方法 - Google Patents
一种适用于Linux嵌入式系统的热插拔处理方法 Download PDFInfo
- Publication number
- CN102830970A CN102830970A CN2012102838796A CN201210283879A CN102830970A CN 102830970 A CN102830970 A CN 102830970A CN 2012102838796 A CN2012102838796 A CN 2012102838796A CN 201210283879 A CN201210283879 A CN 201210283879A CN 102830970 A CN102830970 A CN 102830970A
- Authority
- CN
- China
- Prior art keywords
- hot plug
- hot
- incident
- fifo queue
- plug
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Landscapes
- Stored Programmes (AREA)
Abstract
本发明提供了一种适用于Linux嵌入式系统的热插拔处理方法,包括步骤:设置热插拔配置文件,用于配置需要处理的热插拔事件信息及其相应的处理动作;监听热插拔事件;在监听到新的热插拔事件时,通过查询Linux的sysfs文件系统获取该热插拔事件的信息,并据此查询热插拔配置文件以判断该热插拔事件是否需要处理,如需要则建立一个子进程进行处理,并且按先后顺序串行地处理各热插拔事件。与现有技术相比,本发明实施例占用空间小,适合资源受限的嵌入式系统使用;适应性、可重用性、可扩展性强,满足嵌入式系统应用环境多变,外设多样化的需求;稳定性强,单个设备的热插拔处理程序崩溃不会影响整个热插拔系统。
Description
技术领域
本发明涉及Linux嵌入式系统技术领域,尤其涉及一种适用于Linux嵌入式系统的热插拔处理方法。
背景技术
热插拔(Hot swapping 或 Hot plugging)即“带电插拔”,指可以在电脑运作时插上或拔除硬件。配合适当的软件,便可以在不用关闭电源,不关闭系统的情况下插入或拔除支援热插拔的周边装置,不会导致主机或周边装置烧毁并且能够即时侦测及使用新的装置。这个过程可以是取出或者更换损坏的硬盘、电源或者板卡等部件,从而提高了系统的扩展性、灵活性以及对灾难的及时恢复能力。
Linux系统支持热插拔功能,在历史上发生了很大的变化,这里简介当前使用的处理方案。
当前Linux热插拔系统,分为内核驱动和用户空间应用程序,当插入新的硬件时,Linux内核会产生一个热插拔信息,具体为硬件的位置信息即DEVPATH,所属的子系统信息即SUBSYSTEM,动作信息即ACTION等,根据这些字段,可以通过查看sysfs文件系统获取到插入或拔出的硬件的详细信息。内核通过2个方法通知应用层空间的进程。一个方法为把标识热插拔的字符信息设置成环境变量,然后执行/proc/sys/kernel/hotplug文件指定的应用层程序,具体热插拔方案把热插拔处理入口程序的名称写入/proc/sys/kernel/hotplug文件,应用层程序可以从环境变量中得知热插拔消息。另一个方法为内核通过一个称为NETLINK的socket(套接字)广播一条热插拔信息,该信息为字符串,消息的内容包括了硬件的位置即DEVPATH、所属的子系统即SUBSYSTEM字段、动作即ACTION字段等,根据这些字段,可以通过查看sysfs文件系统获取到插入或拔出的硬件的详细信息;用户空间的热插拔处理程序可建立一个PF_NETLINK类型的socket接收这些消息,然后进行处理。
当前PC上使用UDEV软件包处理热插拔事件,这个软件包相当完善,可配配置性很好,很灵活,但是太大了,需要用到SHELL脚本,并不适合在对资源要求很苛刻的嵌入式系统中。
在Linux嵌入式系统中,普遍配置的SHELL工具busybox有一个MDEV的热插拔处理系统,该系统是UDEV的简化版,但还是比较大,配置不灵活。
一般的嵌入式热插拔代方法都是直接进行编程,即直接写一个程序,程序名写入/proc/sys/kernel/hotplug文件,或直接建立PF_NETLINK类型的socket接收热插拔消息,收到特定的消息即进行特定的处理,但是这会导致很多问题,具体有采用/proc/sys/kernel/hotplug方法时,热插拔处理不能太久,否则会阻塞内核驱动程序的进一步工作,采用监听socket方式时,会出现丢失事件等问题,并且这种简单的方法不够灵活,不便于处理不同的硬件。
发明内容
本发明的目的在于提供一种适用于Linux嵌入式系统的热插拔处理方法,有较强的通用性和灵活性,且比较简单。
本发明的目的是通过以下技术方案实现的。
一种适用于Linux嵌入式系统的热插拔处理方法,包括步骤:
设置热插拔配置文件,用于配置需要处理的热插拔事件信息及其相应的处理动作;
监听Linux的Netlink套接字发来的热插拔事件;
在监听到新的热插拔事件时,通过查询Linux的sysfs文件系统获取该热插拔事件的信息,并据此查询热插拔配置文件以判断该热插拔事件是否需要处理,如需要则建立一个子进程进行处理,并且按先后顺序串行地处理各热插拔事件。
上述方法中还包括:设置一个先进先出队列,用于缓存待处理的热插拔事件;所述先进先出队列的元素为一个事件描述符,记录从Netlink套接字收到的所有字符串,包括硬件的位置信息、 所属的子系统信息、动作信息、处理该热插拔事件的进程号、处理该热插拔事件的方法、处理该热插拔事件的时长。
上述方法中,所述热插拔配置文件中由至少一个条目组成,所述条目包括索引、处理方法和处理时长;所述索引为所述事件描述符中记录的硬件的位置信息、 所属的子系统信息、动作信息。
上述方法中,对各热插拔事件按先后顺序串行地处理的过程为:
在监听到新的热插拔事件时,判断所述先进先出队列长度是否超过设定值;若未超过设定值,则判断该热插拔事件是否需要处理,如需要处理,则从所述热插拔配置文件中获取处理该热插拔事件的方法及时长,建立一个事件描述符记录该内容,并插入到先进先出队列排队等候处理;若超过设定值,则丢弃当前监听到的热插拔事件,返回监听状态;
判断所述先进先出队列是否为空,若不为空,则处理先进先出队列的尾元素。
上述方法中,判断当前的热插拔事件是否需要处理的方法为:
以当前的热插拔事件的硬件的位置信息、 所属的子系统信息和/或动作信息的内容为索引,查找所述热插拔配置文件,若有匹配的记录,则该热插拔事件需要处理,否则不需要处理。
上述方法中,还包括:监听热插拔处理进程退出事件;在监听到热插拔处理进程退出事件时,删除所述先进先出队列的尾元素;
判断所述先进先出队列是否为空,若不为空,则处理先进先出队列的尾元素。
上述方法中,还包括:监听热插拔处理进程超时事件;在监听到热插拔处理进程超时事件时,从所述先进先出队列的尾元素中获取该事件的处理进程,杀死该处理进程,之后删除先进先出队列的尾元素;
判断所述先进先出队列是否为空,若不为空,则处理先进先出队列的尾元素。
与现有技术相比,本发明实施例具有以下有益效果:占用空间小,适合资源受限的嵌入式系统使用;适应性、可重用性、可扩展性强,可以满足嵌入式系统应用环境多变,外设多样化的需求;稳定性强,单个设备的热插拔处理程序崩溃不会影响整个热插拔系统。
附图说明
图1是本发明实施例中适用于Linux嵌入式系统的热插拔处理方法流程图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
本发明的核心思想为:建立一个热插拔后台进程,用于监听和处理Linux的Netlink套接字发来的热插拔事件,并配置一热插拔配置文件,用于配置需要进行处理的具体热插拔事件的处理动作;对于所监听到的热插拔事件,通过查询Linux的sysfs文件系统获取热插拔事件的细节,根据热插拔配置文件判断每一个热插拔事件是否需要处理,如需要则建立一个子进程进行处理,并且各事件按先后顺序串行地处理。
本发明中,需设置一个FIFO(先进先出)队列,用于缓存待处理的热插拔事件,其中FIFO队列的元素为一个事件描述符,包括从Netlink套接字收到的所有字符串,DEVPATH, SUBSYSTEM和ACTION部分的内容,处理该事件的进程号,处理该事件的方法,处理该事件的时长。
判断每一个热插拔事件是否需要处理的方法如下:设置一个热插拔配置文件,用于配置具体热插拔事件的处理动作,文件由多个条目组成,条目包括索引,处理方法和处理时长,索引为所述的事件记录的DEVPATH, SUBSYSTEM, ACTION内容,处理方法为一个处理函数,或一个外部命令,对于一个热插拔事件,用其DEVPATH, SUBSYSTEM,ACTION的内容作为索引,查找上述配置文件,有匹配的记录,则事件需要处理。
请参阅图1,本实施例中适用于Linux嵌入式系统的热插拔处理方法包括以下步骤。
101、等待热插拔事件、热插拔处理进程退出事件和热插拔处理进程超时事件。如收到热插拔事件跳到步骤102, 如收到热插拔处理进程退出事件跳到105,如收到热插拔处理进程超时事件跳到步骤104。
102、判断FIFO队列长度是否超过设定值,如超过,即缓冲区满,则丢弃当前监听到的热插拔事件,跳到步骤101,重新回到监听状态;若未超过,则继续执行步骤103。
103、判断当前接收到的热插拔事件是否需要处理,如不需要跳到步骤101, 如需要则从所述的配置文件中获取该事件的处理方法和处理时长,建立一个事件描述符记录该内容,并插入到FIFO队列中等候处理,然后跳到步骤106。
104、从FIFO队列的尾元素中获取该事件的处理进程,然后杀死该进程。
105、删除FIFO队列的尾元素。
106、查看FIFO队列是否为空,如为空跳到步骤101, 否则建立一个新进程处理该事件,原进程跳到步骤101。
以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内所作的任何修改、等同替换和改进等,均应包含在本发明的保护范围之内。
Claims (7)
1.一种适用于Linux嵌入式系统的热插拔处理方法,其特征在于,该方法包括步骤:
设置热插拔配置文件,用于配置需要处理的热插拔事件信息及其相应的处理动作;
监听Linux的Netlink套接字发来的热插拔事件;
在监听到新的热插拔事件时,通过查询Linux的sysfs文件系统获取该热插拔事件的信息,并据此查询热插拔配置文件以判断该热插拔事件是否需要处理,如需要则建立一个子进程进行处理,并且按先后顺序串行地处理各热插拔事件。
2.如权利要求1所述适用于Linux嵌入式系统的热插拔处理方法,其特征在于,该方法中还包括:设置一个先进先出队列,用于缓存待处理的热插拔事件;所述先进先出队列的元素为一个事件描述符,记录从Netlink套接字收到的所有字符串,包括硬件的位置信息、 所属的子系统信息、动作信息、处理该热插拔事件的进程号、处理该热插拔事件的方法、处理该热插拔事件的时长。
3.如权利要求2所述适用于Linux嵌入式系统的热插拔处理方法,其特征在于,所述热插拔配置文件中由至少一个条目组成,所述条目包括索引、处理方法和处理时长;所述索引为所述事件描述符中记录的硬件的位置信息、 所属的子系统信息、动作信息。
4.如权利要求3所述适用于Linux嵌入式系统的热插拔处理方法,其特征在于, 该方法中,对各热插拔事件按先后顺序串行地处理的过程为:
在监听到新的热插拔事件时,判断所述先进先出队列长度是否超过设定值;若未超过设定值,则判断该热插拔事件是否需要处理,如需要处理,则从所述热插拔配置文件中获取处理该热插拔事件的方法及时长,建立一个事件描述符记录该内容,并插入到先进先出队列排队等候处理;若超过设定值,则丢弃当前监听到的热插拔事件,返回监听状态;
判断所述先进先出队列是否为空,若不为空,则处理先进先出队列的尾元素。
5.如权利要求4所述适用于Linux嵌入式系统的热插拔处理方法,其特征在于, 该方法中,判断当前的热插拔事件是否需要处理的方法为:
以当前的热插拔事件的硬件的位置信息、 所属的子系统信息和/或动作信息的内容为索引,查找所述热插拔配置文件,若有匹配的记录,则该热插拔事件需要处理,否则不需要处理。
6.如权利要求2所述适用于Linux嵌入式系统的热插拔处理方法,其特征在于,该方法中还包括:
监听热插拔处理进程退出事件;在监听到热插拔处理进程退出事件时,删除所述先进先出队列的尾元素;
判断所述先进先出队列是否为空,若不为空,则处理先进先出队列的尾元素。
7.如权利要求2所述适用于Linux嵌入式系统的热插拔处理方法,其特征在于,该方法中还包括:
监听热插拔处理进程超时事件;在监听到热插拔处理进程超时事件时,从所述先进先出队列的尾元素中获取该事件的处理进程,杀死该处理进程,之后删除先进先出队列的尾元素;
判断所述先进先出队列是否为空,若不为空,则处理先进先出队列的尾元素。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210283879.6A CN102830970B (zh) | 2012-08-10 | 2012-08-10 | 一种适用于Linux嵌入式系统的热插拔处理方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210283879.6A CN102830970B (zh) | 2012-08-10 | 2012-08-10 | 一种适用于Linux嵌入式系统的热插拔处理方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102830970A true CN102830970A (zh) | 2012-12-19 |
CN102830970B CN102830970B (zh) | 2016-04-27 |
Family
ID=47334120
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210283879.6A Expired - Fee Related CN102830970B (zh) | 2012-08-10 | 2012-08-10 | 一种适用于Linux嵌入式系统的热插拔处理方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102830970B (zh) |
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103019653A (zh) * | 2012-11-27 | 2013-04-03 | 康佳集团股份有限公司 | 一种基于linux系统的内核消息分发方法 |
CN105808299A (zh) * | 2016-03-09 | 2016-07-27 | 深圳Tcl数字技术有限公司 | 外部设备自动挂载和通知的控制方法及系统 |
CN106095413A (zh) * | 2016-05-31 | 2016-11-09 | 青岛海信电器股份有限公司 | 一种蓝牙驱动程序的配置方法及装置 |
CN106951790A (zh) * | 2016-12-15 | 2017-07-14 | 中国电子科技集团公司第三十研究所 | Usb存储介质透明加密方法 |
CN107168896A (zh) * | 2017-04-26 | 2017-09-15 | 烽火通信科技股份有限公司 | 一种usb设备的控制系统及控制方法 |
CN108228425A (zh) * | 2017-12-29 | 2018-06-29 | 成都三零嘉微电子有限公司 | 一种Linux系统实施获取设备热插拔信息的系统 |
CN109032972A (zh) * | 2018-07-25 | 2018-12-18 | 郑州云海信息技术有限公司 | 一种热插拨事件的处理方法及系统 |
CN109726079A (zh) * | 2018-12-29 | 2019-05-07 | 深圳市科陆电子科技股份有限公司 | 一种usb设备热插拔监控方法和系统 |
CN110308938A (zh) * | 2019-07-01 | 2019-10-08 | 青岛海信传媒网络技术有限公司 | 插拔外设事件的管理方法和装置 |
CN110825677A (zh) * | 2018-08-09 | 2020-02-21 | 中兴通讯股份有限公司 | 显示器热拔插处理方法、系统、设备及存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7383429B2 (en) * | 2003-12-18 | 2008-06-03 | Hewlett-Packard Development Company, L.P. | Configuring settings of a computer system to be compatible with an operating system |
CN102222207A (zh) * | 2011-05-23 | 2011-10-19 | 深圳市共进电子有限公司 | 在Linux系统中通过切换3G数据卡工作模式实现联网的方法 |
CN102567667A (zh) * | 2011-12-13 | 2012-07-11 | 中标软件有限公司 | 一种智能信息设备及其操作系统 |
-
2012
- 2012-08-10 CN CN201210283879.6A patent/CN102830970B/zh not_active Expired - Fee Related
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7383429B2 (en) * | 2003-12-18 | 2008-06-03 | Hewlett-Packard Development Company, L.P. | Configuring settings of a computer system to be compatible with an operating system |
CN102222207A (zh) * | 2011-05-23 | 2011-10-19 | 深圳市共进电子有限公司 | 在Linux系统中通过切换3G数据卡工作模式实现联网的方法 |
CN102567667A (zh) * | 2011-12-13 | 2012-07-11 | 中标软件有限公司 | 一种智能信息设备及其操作系统 |
Cited By (16)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103019653B (zh) * | 2012-11-27 | 2018-02-06 | 康佳集团股份有限公司 | 一种基于linux系统的内核消息分发方法 |
CN103019653A (zh) * | 2012-11-27 | 2013-04-03 | 康佳集团股份有限公司 | 一种基于linux系统的内核消息分发方法 |
CN105808299B (zh) * | 2016-03-09 | 2018-07-03 | 深圳Tcl数字技术有限公司 | 外部设备自动挂载和通知的控制方法及系统 |
WO2017152526A1 (zh) * | 2016-03-09 | 2017-09-14 | 深圳Tcl数字技术有限公司 | 外部设备自动挂载和通知的控制方法及系统 |
CN105808299A (zh) * | 2016-03-09 | 2016-07-27 | 深圳Tcl数字技术有限公司 | 外部设备自动挂载和通知的控制方法及系统 |
CN106095413B (zh) * | 2016-05-31 | 2019-09-17 | 青岛海信电器股份有限公司 | 一种蓝牙驱动程序的配置方法及装置 |
CN106095413A (zh) * | 2016-05-31 | 2016-11-09 | 青岛海信电器股份有限公司 | 一种蓝牙驱动程序的配置方法及装置 |
CN106951790A (zh) * | 2016-12-15 | 2017-07-14 | 中国电子科技集团公司第三十研究所 | Usb存储介质透明加密方法 |
CN106951790B (zh) * | 2016-12-15 | 2019-12-13 | 中国电子科技集团公司第三十研究所 | Usb存储介质透明加密方法 |
CN107168896A (zh) * | 2017-04-26 | 2017-09-15 | 烽火通信科技股份有限公司 | 一种usb设备的控制系统及控制方法 |
CN108228425A (zh) * | 2017-12-29 | 2018-06-29 | 成都三零嘉微电子有限公司 | 一种Linux系统实施获取设备热插拔信息的系统 |
CN109032972A (zh) * | 2018-07-25 | 2018-12-18 | 郑州云海信息技术有限公司 | 一种热插拨事件的处理方法及系统 |
CN110825677A (zh) * | 2018-08-09 | 2020-02-21 | 中兴通讯股份有限公司 | 显示器热拔插处理方法、系统、设备及存储介质 |
CN109726079A (zh) * | 2018-12-29 | 2019-05-07 | 深圳市科陆电子科技股份有限公司 | 一种usb设备热插拔监控方法和系统 |
CN110308938A (zh) * | 2019-07-01 | 2019-10-08 | 青岛海信传媒网络技术有限公司 | 插拔外设事件的管理方法和装置 |
CN110308938B (zh) * | 2019-07-01 | 2022-03-22 | 青岛海信传媒网络技术有限公司 | 插拔外设事件的管理方法和装置 |
Also Published As
Publication number | Publication date |
---|---|
CN102830970B (zh) | 2016-04-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102830970A (zh) | 一种适用于Linux嵌入式系统的热插拔处理方法 | |
CN100481040C (zh) | 电视机嵌入式Linux系统下USB存储设备实现实时热拔插的方法 | |
US20170277561A1 (en) | Operating System Hot-Switching Method and Apparatus and Mobile Terminal | |
CN103530124B (zh) | 一种在Linux系统下共享热插拔设备的方法与装置 | |
CN101014942B (zh) | 使用高级主机控制器接口来传送数据的方法和仪器 | |
US20120179845A1 (en) | Method for switching working mode, usb device, and host device | |
CN103955441B (zh) | 一种设备管理系统、方法及一种io扩展接口 | |
CN101477498B (zh) | Usb设备切换端口的方法及设备 | |
CN103154922A (zh) | 虚拟usb复合装置枚举 | |
US9806959B2 (en) | Baseboard management controller (BMC) to host communication through device independent universal serial bus (USB) interface | |
CN100382058C (zh) | 设备管理方法 | |
CN103049327A (zh) | 一种android系统挂载多存储设备的方法及装置 | |
JP2014006726A (ja) | コントローラ、電子機器及びusbデバイスの制御方法 | |
CN105068946A (zh) | 一种安卓设备的识别方法和装置 | |
CN110399171A (zh) | 一种硬盘管理方法、系统及相关组件 | |
US20130318142A1 (en) | Remote card content management using synchronous server-side scripting | |
US8261050B2 (en) | Vital product data collection during pre-standby and system initial program load | |
CN103176832B (zh) | 一种类unix操作系统运行虚拟操作系统的方法及装置 | |
CN108762983A (zh) | 多媒体数据恢复方法及装置 | |
JP2007279834A (ja) | 認証システム、認証方法 | |
CN101971562B (zh) | 控制自动运行过程执行的方法、装置及系统 | |
CN103581749A (zh) | 一种支持电视访问mtp模式外接设备的方法和装置 | |
KR101487763B1 (ko) | Usb통신을 이용한 스마트기기와 주변기기의 동기화 및 제어시스템과 그 방법 | |
CN102436386A (zh) | 一种软件升级方法 | |
CN201600923U (zh) | 3g优盘 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20160427 Termination date: 20180810 |