CN102830970A - 一种适用于Linux嵌入式系统的热插拔处理方法 - Google Patents

一种适用于Linux嵌入式系统的热插拔处理方法 Download PDF

Info

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
Application number
CN2012102838796A
Other languages
English (en)
Other versions
CN102830970B (zh
Inventor
申常扳
王金桂
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Shenzhen Gongjin Electronics Co Ltd
Original Assignee
Shenzhen Gongjin Electronics Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Shenzhen Gongjin Electronics Co Ltd filed Critical Shenzhen Gongjin Electronics Co Ltd
Priority to CN201210283879.6A priority Critical patent/CN102830970B/zh
Publication of CN102830970A publication Critical patent/CN102830970A/zh
Application granted granted Critical
Publication of CN102830970B publication Critical patent/CN102830970B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Stored Programmes (AREA)

Abstract

本发明提供了一种适用于Linux嵌入式系统的热插拔处理方法,包括步骤:设置热插拔配置文件,用于配置需要处理的热插拔事件信息及其相应的处理动作;监听热插拔事件;在监听到新的热插拔事件时,通过查询Linux的sysfs文件系统获取该热插拔事件的信息,并据此查询热插拔配置文件以判断该热插拔事件是否需要处理,如需要则建立一个子进程进行处理,并且按先后顺序串行地处理各热插拔事件。与现有技术相比,本发明实施例占用空间小,适合资源受限的嵌入式系统使用;适应性、可重用性、可扩展性强,满足嵌入式系统应用环境多变,外设多样化的需求;稳定性强,单个设备的热插拔处理程序崩溃不会影响整个热插拔系统。

Description

一种适用于Linux嵌入式系统的热插拔处理方法
技术领域
本发明涉及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嵌入式系统的热插拔处理方法,其特征在于,该方法中还包括:
监听热插拔处理进程超时事件;在监听到热插拔处理进程超时事件时,从所述先进先出队列的尾元素中获取该事件的处理进程,杀死该处理进程,之后删除先进先出队列的尾元素;
判断所述先进先出队列是否为空,若不为空,则处理先进先出队列的尾元素。
CN201210283879.6A 2012-08-10 2012-08-10 一种适用于Linux嵌入式系统的热插拔处理方法 Expired - Fee Related CN102830970B (zh)

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)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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 中标软件有限公司 一种智能信息设备及其操作系统

Patent Citations (3)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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