CN103530124A - 一种在Linux系统下共享热插拔设备的方法与装置 - Google Patents

一种在Linux系统下共享热插拔设备的方法与装置 Download PDF

Info

Publication number
CN103530124A
CN103530124A CN201310492970.3A CN201310492970A CN103530124A CN 103530124 A CN103530124 A CN 103530124A CN 201310492970 A CN201310492970 A CN 201310492970A CN 103530124 A CN103530124 A CN 103530124A
Authority
CN
China
Prior art keywords
hot
plug
hot plug
shared
information
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
CN201310492970.3A
Other languages
English (en)
Other versions
CN103530124B (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.)
China Security and Fire Technology Co Ltd
Original Assignee
China Security and Fire Technology 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 China Security and Fire Technology Co Ltd filed Critical China Security and Fire Technology Co Ltd
Priority to CN201310492970.3A priority Critical patent/CN103530124B/zh
Publication of CN103530124A publication Critical patent/CN103530124A/zh
Application granted granted Critical
Publication of CN103530124B publication Critical patent/CN103530124B/zh
Expired - Fee Related legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Landscapes

  • Stored Programmes (AREA)

Abstract

本发明公开了一种在Linux系统下共享热插拔设备的方法和装置,该方法包括:系统启动时初始化共享设备,并将热插拔设备检测模块注册为Linux热插拔系统的用户空间处理模块;检测到热插拔事件后,内核将热插拔信息设置为系统环境变量,并通过调用用户空间处理模块来调用热插拔设备检测模块;热插拔设备检测模块从系统环境变量中获取热插拔信息;根据热插拔信息获取热插拔的设备信息和动作信息;根据热插拔的动作信息和设备信息调用共享设备维护接口对共享设备进行相应地处理。采用本发明的方法和装置,能降低系统负载,增强系统稳定性,并节约内存空间。

Description

一种在Linux系统下共享热插拔设备的方法与装置
技术领域
本发明涉及设备共享领域,尤其涉及一种在Linux系统下共享热插拔设备的方法与装置。 
背景技术
为了对系统功能进行实时扩展,当前的计算机系统都支持设备热插拔操作。热插拔即“带电插拔”,是指可以在计算机系统运行期间,不切断系统电源的情况下安装或者移除外部设备。热插拔设备这个过程可以是插入USB无线网卡、添加新的SATA硬盘或者移除已损坏的SATA硬盘、添加或移除板卡等等,从而达到对系统功能进行实时扩展的目的。 
当前Linux操作系统对热插拔操作提供了完善的支持。如图1所示,Linux操作系统下的热插拔系统包括内核空间驱动模块和用户空间处理模块。当发生热插拔设备事件时,内核空间驱动模块会产生热插拔信息用于指示当前热插拔操作,热插拔信息主要包括:动作信息(即ACTION),用于指示当前是插入动作还是拔出动作;设备所属子系统信息(即SUBSYSTEM),用于指示设备分类;设备路径(即DEVPATH),用于指示具体设备位置。Linux内核通过两种方法通知设备热插拔事件,第一种:内核将热插拔信息设置为系统环境变量,并运行 
“/proc/sys/kernel/hotplug”文件所指定的用户空间处理模块,用户空间处理模块被调用而获取热插拔信息;第二种:内核通过名为NETLINK的套接字将热插拔信息广播出去,用户空间处理模块通过监听NETLINK套接字来获取热插拔信息,即用户空间处理模块主动获取热插拔信息。现有技术在管理热插拔设备时存在以下3个问题: 
1.周期性执行检测热插拔设备造成系统负载增大。 
如中国专利CN1877550A提出的电视机嵌入式Linux系统下USB存储设备实现实时热插拔的方法中,守护进程周期性地执行检测任务,为了达到实时检测热插拔事件的目的,势必会缩短检测周期从而使处理器大部分时间被守护进程占 用,造成系统负载增大。因为守护进程采取主动周期性地检测来识别设备热插拔,在没有真正发生设备热插拔事件时,该守护进程同样会周期性地执行检测任务从而占用处理器,所以即使缩短检测周期该方法依然会占用额外的处理器资源。 
2.热插拔检测模块常驻内存,浪费内存空间。 
如中国专利CN1757021A提出的设备管理方法及设备管理系统中,热插拔端口监督模块常驻内存运行,它依据来自挂钩模块的信息来收集并保存热插拔设备信息,同时用户应用模块通过热插拔类库与端口监督模块进行进程间通信获取热插拔设备信息。热插拔端口监督模块以常驻内存的方式运行,意味着在没有设备热插拔事件发生时该模块依然会在后台运行并驻留在内存中,这种方式显然会浪费内存空间。 
3.存储热插拔设备信息的内存在进程地址空间内,容易造成系统不稳定。 
如中国专利CN1757021A提出的《设备管理方法及设备管理系统》中,用于存储热插拔设备信息的内存在热插拔驱动模块的进程地址空间内,用户应用模块通过热插拔类库与热插拔驱动模块进行进程间通信获取热插拔设备信息。该方法的问题在于热插拔驱动模块异常崩溃,因为热插拔设备信息存储在热插拔驱动模块的进程地址空间内,所以热插拔设备信息将会全部丢失,因此当用户空间应用模块无法获取有效的热插拔设备信息时,可能会出现以下的异常情况:用户空间应用模块操作一个已经被卸载的热插拔设备时系统将崩溃;用户空间应用模块无法获取已经安装的热插拔设备信息时将无法使用该热插拔设备。 
发明内容
有鉴于此,本发明要解决的技术问题是提供Linux系统下共享热插拔设备的方法与装置,以解决热插拔检测模块常驻内存造成内存空间浪费,执行周期性地检测造成系统负载增大,以及热插拔设备信息保存在进程地址空间内造成系统不稳定的问题。 
本发明解决上述技术问题所采用的技术方案如下: 
根据本发明的一个方面,提供了一种在Linux系统下共享热插拔设备的方法,该方法包括以下步骤: 
系统启动时初始化共享设备,并将热插拔设备检测模块注册为Linux热插拔 系统的用户空间处理模块; 
检测到热插拔事件后,内核将热插拔信息设置为系统环境变量,并通过调用用户空间处理模块来调用热插拔设备检测模块; 
热插拔设备检测模块从系统环境变量中获取热插拔信息; 
根据热插拔信息获取热插拔的设备信息和动作信息; 
根据热插拔的动作信息和设备信息调用共享设备维护接口对共享设备进行相应地处理。 
优选地,初始化共享设备包括:创建共享内存和信号量,其中,共享内存用于存储设备列表和进程列表;信号量用于在多个进程同时访问共享内存时进行同步。 
进一步地,初始化共享设备具体包括以下步骤: 
根据公共路径名和公共项目标识符获取键; 
使用键创建信号量,并获取信号量标识符; 
设置信号量数量为1; 
使用键和指定长度创建共享内存,并获取共享内存标识符; 
连接共享内存并获取共享内存地址,并将共享内存清零。 
优选地,根据热插拔信息获取热插拔的设备信息包括:根据热插拔信息中的设备所属子系统和设备路径来获取设备信息。 
优选地,根据热插拔的动作信息和设备信息调用共享设备维护接口对共享设备进行相应地处理进一步包括: 
如果动作信息是插入动作,则将设备信息作为一个新元素添加到共享设备的设备列表中,并向共享设备的进程列表中的每一个进程发送设备添加信号;如果动作信息是拔出动作,则从共享设备的设备列表中删除该设备,并向共享设备的进程列表中的每一个进程发送设备删除信号。 
根据本发明的另一个方面,提供了一种在Linux系统下共享热插拔设备的装置,该装置包括用于检测到热插拔事件后,将热插拔信息设置为系统环境变量,并调用用户空间处理模块的内核;该装置还包括:热插拔设备共享模块、热插拔设备检测模块和热插拔设备处理模块,其中: 
热插拔设备共享模块,用于系统启动时初始化共享设备,并将热插拔设备检测模块注册为Linux热插拔系统的用户空间处理模块;还用于提供维护共享设备 的接口; 
热插拔设备检测模块,用于从系统环境变量中获取热插拔信息,并根据热插拔信息获取热插拔的设备信息和动作信息; 
热插拔设备处理模块,根据热插拔的动作信息和设备信息调用共享设备维护接口对共享设备进行相应地处理。 
优选地,热插拔设备共享模块包括: 
初始化单元,用于系统启动时创建共享内存和信号量,其中,共享内存用于存储设备列表和进程列表,信号量用于在多个进程同时访问共享内存时进行同步;还用于将热插拔设备检测模块注册为Linux热插拔系统的用户空间处理模块; 
设备管理单元,用于添加或删除共享设备的设备列表中的元素; 
进程管理单元,用于增加或删除共享设备的进程列表中的元素。 
优选地,初始化单元具体用于:根据公共路径名和公共项目标识符获取键;使用键创建信号量,并获取信号量标识符;设置信号量数量为1;使用键和指定长度创建共享内存,并获取共享内存标识符;连接共享内存并获取共享内存地址,并将共享内存清零。 
优选地,热插拔设备检测模块包括: 
热插拔信息获取单元,用于从系统环境变量中获取内核设置的热插拔信息; 
设备信息获取单元,用于根据热插拔信息中设备所属子系统和设备路径来获取设备信息。 
优选地,热插拔设备处理模块包括: 
设备处理单元,用于当前热插拔的动作信息是插入动作时,将设备信息作为一个新元素添加到共享设备的设备列表中;当前热插拔动作是拔出动作时,从共享设备的设备列表中删除该设备; 
信号发送单元,用于当前热插拔的动作信息是插入动作时,向共享设备的进程列表中的每一个进程发送设备添加信号;当前热插拔动作是拔出动作时,向共享设备的进程列表中的每一个进程发送设备删除信号。 
本发明实施例的一种共享热插拔设备的方法与装置,热插拔检测模块在热插拔设备事件发生时由内核调用一次,不进行周期性地检测,从而降低系统负载;利用共享存储的方法使存储热插拔设备信息的内存空间独立于任何进程地 址空间从而增强系统稳定性;同时热插拔检测模块在执行完检测热插拔设备以及相关处理后立即退出运行从而节约内存空间。 
附图说明
图1为现有技术中Linux操作系统的热插拔系统示意图。 
图2为本发明实施例提供的一种Linux系统下共享热插拔设备的方法流程图。 
图3为本发明优选实施例提供的一种Linux系统下共享热插拔设备的方法流程图。 
图4为本发明优选实施例提供的一种初始化共享设备的方法流程图。 
图5为本发明实施例提供的一种Linux系统下共享热插拔设备装置的结构示意图。 
图6为本发明优选实施例提供的一种热插拔设备共享模块的结构示意图。 
图7为本发明优选实施例提供的一种热插拔设备检测模块的结构示意图。 
图8为本发明优选实施例提供的一种热插拔设备处理模块的结构示意图。 
具体实施方式
为了使本发明所要解决的技术问题、技术方案及有益效果更加清楚、明白,以下结合附图和实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。 
实施例一 
如图2所示为本发明实施例提供的一种Linux系统下共享热插拔设备的方法流程图,该方法包括: 
S202、系统启动时初始化共享设备,并将热插拔设备检测模块注册为Linux热插拔系统的用户空间处理模块; 
具体来说,初始化共享设备包括创建共享内存和信号量,共享内存用于存储设备列表和进程列表;信号量用于在多个进程同时访问共享内存时进行同步。将热插拔设备检测模块注册为Linux热插拔系统的用户空间处理模块,具体为将热插拔检测模块的名称写入到“/proc/sys/kernel/hotplug”文件中,从而实现对热插拔设备的处理。 
S204、检测到热插拔事件后,将热插拔信息设置为系统环境变量,并通过调用用户空间处理模块来调用插拔设备检测模块; 
具体来说,内核空间驱动模块检测到热插拔事件后首先将热插拔信息设置为系统环境变量,热插拔信息包括动作信息、设备所属子系统信息和设备路径,比如,在设置系统环境变量时,可以将动作信息设置为ACTION,用于指示当前是插入动作还是拔出动作;将设备所属子系统信息设置为SUBSYSTEM,用于指示设备分类;将设备路径设置为DEVPATH,用于指示具体设备位置。然后内核将调用“/proc/sys/kernel/hotplug”文件所制定的用户空间处理模块,即调用热插拔设备检测模块。 
S206、插拔设备检测模块从环境变量中获取热插拔信息; 
举例来说,热插拔信息可以通过获取环境变量ACTION、SUBSYSTEM和DEVPATH的值来分别获得动作信息、设备所属子系统信息和设备路径。 
S208、根据热插拔信息获取热插拔的设备信息和动作信息; 
具体来说,根据热插拔信息中设备所属子系统和设备路径来获取设备信息,设备信息包括设备节点、设备名称和设备型号等。 
S210、根据热插拔的动作信息和设备信息调用共享设备维护接口对共享设备进行相应地处理。 
具体来说,根据热插拔信息中的动作信息判断热插拔动作是插入还是拔出,如果是插入动作,则将设备信息作为一个新元素添加到共享设备的设备列表中,并向共享设备的进程列表中的每一个进程发送设备添加信号;如果所是拔出动作,则从设备列表中删除该设备,并向共享设备的进程列表中的每一个进程发送设备删除信号。 
本发明实施例的提供的共享热插拔设备的方法,热插拔检测模块在热插拔设备事件发生时由内核调用一次,不进行周期性地检测,从而降低系统负载;利用共享存储的方法使存储热插拔设备信息的内存空间独立于任何进程地址空间从而增强系统稳定性;同时热插拔检测模块在执行完检测热插拔设备以及相关处理后立即退出运行从而节约内存空间。 
实施例二 
如图3所示为本发明优选实施例提供的一种Linux系统下共享热插拔设备 的方法流程图,该方法包括: 
S301、从系统环境变量中获取内核设置的热插拔信息。 
具体的,热插拔信息包括:动作信息,即ACTION,用于指示当前是插入动作还是拔出动作;设备所属子系统信息,即SUBSYSTEM,用于指示设备分类;设备路径,即DEVPATH,用于指示具体设备位置。 
S302、根据热插拔信息中设备所属子系统信和设备路径来获取设备信息和动作信息; 
其中,设备信息包括设备节点、设备名称和设备型号等。 
S303、根据动作信息判断当前热插拔动作,如果是插入设备则跳转到S304,如果是拔出设备则跳转到S306。 
S304、将设备信息作为一个新元素添加到共享设备的设备列表中; 
本步骤S304进一步包括: 
在共享设备信号量上执行P操作; 
将设备信息作为一个新元素添加到共享内存的设备列表中; 
在共享设备信号量上执行V操作。 
S305、依次向共享设备的进程列表中每一个进程发送设备添加信号。 
S306、以设备节点为关键字在共享设备的设备列表中查找设备。 
S307、如果在共享设备的设备列表中找到节点相同的元素则跳转到S308,否则直接退出。 
S308、删除共享设备的设备列表中与该设备节点相同的元素; 
本步骤S308进一步包括: 
在共享设备信号量上执行P操作; 
从共享设备的设备列表中删除与该设备节点相同的元素; 
在共享设备信号量上执行V操作。 
S309、依次向共享设备的进程列表中每一个进程发送设备删除信号。 
需要补充说明的是,上述P、V操作是典型的同步机制之一。用一个信号量与一个消息联系起来,当信号量的值为0时,表示期望的消息尚未产生;当信号量的值非0时,表示期望的消息已经存在。用P、V操作实现进程同步时,调用P操作测试消息是否到达,调用V操作发送消息。 
本发明实施例着眼于在系统启动时将热插拔设备检测模块已注册为Linux 热插拔系统的用户空间处理模块,通过调用用户空间处理模块来调用插拔设备检测模块,从而实现对热插拔设备的处理。 
实施例三 
如图4所示为本发明优选实施例提供的一种初始化共享设备的方法流程图,该方法包括以下步骤: 
S402、根据公共路径名和公共项目标识符获取键。 
具体来说,共享设备是基于Linux操作系统下的XSI(System Interface and Headers,代表一种Unix和Linux系统的标准,为Unix和Linux系统定义一致的接口)IPC(Inter-Process Communication,进程间通信)建立的。共享设备由键、共享内存标识符、信号量标识符和共享内存地址组成。键是Linux内核IPC结构的外部标识符,键是由公共路径名和项目标识符组成的,任何进程只要使用相同的公共路径名和项目标识符即可获取相同的键。 
S404、使用键创建信号量,并获取信号量标识符。 
具体来说,通过键可以创建信号量并获取信号量标识符。信号量标识符用于访问已经存在的信号量。 
S406、设置信号量数量为1。 
具体来说,将信号量数量设置为1的作用是,当多个进程同时在信号量上执行P操作时,同一时刻只有1个进程能够通过,从而使多个进程并发操作共享内存时保持同步。 
S408、使用键和指定长度创建共享内存,并获取共享内存标识符。 
具体来说,通过键可以获取共享内存标识符,共享内存标识符用于访问已经存在的共享内存。共享内存用于存储设备列表和进程列表,共享内存中指定长度是共享设备列表长度加上进程列表长度。设备列表中的每一个元素由设备信息组成,设备信息包括设备节点、设备名称和设备型号等。进程列表中的每一个元素都是一个进程ID,当设备列表中的元素被添加或删除时,可以向进程列表中的每一个进程发送设备添加信号或者设备删除信号。 
S410、连接共享内存并获取共享内存地址。 
具体来说,通过共享内存标识符可以连接到指定的共享内存并获取共享内存地址,共享内存地址可以用于对共享内存进行寻址从而访问共享内存中的设 备列表和进程列表,因此可以直接说共享设备包含设备列表和进程列表。 
S412、将共享内存清零。 
具体来说,第一次连接共享内存时将导致系统分配实际内存并返回共享内存地址,但是此时共享内存还不能直接使用,需要清零后再使用。因为该块内存可能被系统或其他进程使用后残留未清理的脏数据,使用脏数据将导致未定义的异常行为。 
本发明实施例提供的初始化共享设备方法,通过在系统启动时创建独立于任何进程地址空间的共享内存并完成清零工作,使得热插拔设备处理模块和其他进程可以通过共享设备维护接口来完成对共享设备的操作。 
实施例四 
如图5所示为本发明实施例提供的一种Linux系统下共享热插拔设备装置的结构示意图,该装置包括用于检测到热插拔事件后,将热插拔信息设置为系统环境变量,并调用用户空间处理模块的内核;该装置还包括热插拔设备共享模块10、热插拔设备检测模块20和热插拔设备处理模块30,其中: 
热插拔设备共享模块10,用于系统启动时初始化共享设备,并将热插拔设备检测程模块注册为Linux热插拔系统的用户空间处理模块;还用于提供维护共享设备的接口; 
具体来说,热插拔设备共享模块10用于初始化共享设备、提供添加或删除共享设备的设备列表中元素的接口供热插拔设备处理模块30调用,以及提供添加或删除共享设备的进程列表中元素的接口供各个应用模块调用。 
进一步地,请参阅图6,热插拔设备共享模块10进一步包括初始化单元101、设备管理单元102和进程管理单元103,其中: 
初始化单元101,用于系统启动时初始化共享设备,包括创建共享内存和信号量;并将热插拔设备检测程模块注册为Linux热插拔系统的用户空间处理模块。其中,初始化共享设备包括创建共享内存和信号量;共享内存用于存储设备列表和进程列表,信号量用于在多个进程同时访问共享内存时进行同步; 
具体来说,初始化单元101用于:根据公共路径名和公共项目标识符获取键;使用键创建信号量,并获取信号量标识符;设置信号量数量为1;使用键和指定长度创建共享内存,并获取共享内存标识符;连接共享内存并获取共享内 存地址,并将共享内存清零。 
设备管理单元102,用于添加或删除共享设备的设备列表中的元素。 
具体来说,设备管理单元102添加热插拔设备到共享设备的设备列表中或者从共享设备的设备列表中删除热插拔设备。 
进程管理单元103,用于增加或删除共享设备的进程列表中的元素。 
具体来说,进程管理单元103将指定应用模块的进程ID添加到共享设备的进程列表中或者从共享设备的进程列表中删除指定应用模块的进程ID。 
热插拔设备检测模块20,用于从系统环境变量中获取热插拔信息,并根据热插拔信息获取设备信息和动作信息; 
具体来说,热插拔设备检测模块20的例程被注册为Linux热插拔系统的用户空间处理模块,在发生设备热插拔事件时由内核调用,热插拔设备检测模块20从系统环境变量中获取热插拔信息,并根据热插拔信息获取设备信息。 
进一步地,请参阅图7,热插拔设备检测模块20包括: 
热插拔信息获取单元201,用于从系统环境变量中获取内核设置的热插拔信息。具体来说,热插拔信息获取单元201获取当前热插拔设备事件发生时内核设置的用于指示当前热插拔信息的环境变量。热插拔信息包括:动作信息(如ACTION),用于指示当前是插入动作还是拔出动作;设备所属子系统信息(如SUBSYSTEM),用于指示设备分类;设备路径(如DEVPATH),用于指示具体设备位置。 
设备信息获取单元202,用于根据热插拔信息中设备所属子系统和设备路径来获取设备信息。具体来说,设备信息获取单元202根据热插拔信息中设备所属子系统信和设备路径来获取设备信息,设备信息包括设备节点、设备名称和设备型号等。 
热插拔设备处理模块30,根据热插拔的动作信息和设备信息调用共享设备维护接口对共享设备进行相应地处理。 
进一步地,请参阅图8,热插拔设备处理模块30包括设备处理单元301和信号发送单元302,其中: 
设备处理单元301,用于当前热插拔动作是插入动作时,将设备信息作为一个新元素添加到共享设备的设备列表中;当前热插拔动作是拔出动作时,从共享设备的设备列表中删除该设备; 
具体来说,设备处理单元301根据当前热插拔动作来调用热插拔设备共享模块10中的设备管理单元102,从而向共享设备的设备列表中添加或删除元素。 
信号发送单元302,用于当前热插拔动作是插入动作时,向共享设备的进程列表中的每一个进程发送设备添加信号;当前热插拔动作是拔出动作时,向共享设备的进程列表中的每一个进程发送设备删除信号。 
具体来说,用于根据当前热插拔动作来调用热插拔设备共享模块10中的进程管理单元103,将指定应用程序的进程ID添加到共享设备的进程列表中或者从共享设备的进程列表中删除指定应用程序的进程ID。从而向共享设备的进程列表中的每一个进程发送设备添加信号或者设备删除信号以通知应用模块当前有新设备加入或者已知设备被删除。 
本发明实施例提供的共享热插拔设备的装置,热插拔设备检测模块20在热插拔设备事件发生时由内核调用一次,不进行周期性地检测,从而降低系统负载;利用共享存储的方法使存储热插拔设备信息的内存空间独立于任何进程地址空间从而增强系统稳定性;同时热插拔设备检测模块20在执行完检测热插拔设备以及相关处理后立即退出运行从而节约内存空间。 
以上参照附图说明了本发明的优选实施例,并非因此局限本发明的权利范围。本领域技术人员不脱离本发明的范围和实质内所作的任何修改、等同替换和改进,均应在本发明的权利范围之内。 

Claims (10)

1.一种在Linux系统下共享热插拔设备的方法,其特征在于,该方法包括以下步骤:
系统启动时初始化共享设备,并将热插拔设备检测模块注册为Linux热插拔系统的用户空间处理模块;
检测到热插拔事件后,内核将热插拔信息设置为系统环境变量,并通过调用所述用户空间处理模块来调用所述热插拔设备检测模块;
所述热插拔设备检测模块从所述系统环境变量中获取热插拔信息;
根据所述热插拔信息获取热插拔的设备信息和动作信息;
根据所述热插拔的动作信息和设备信息调用共享设备维护接口对共享设备进行相应地处理。
2.根据权利要求1所述的方法,其特征在于,所述初始化共享设备包括:创建共享内存和信号量,其中,所述共享内存用于存储设备列表和进程列表;所述信号量用于在多个进程同时访问共享内存时进行同步。
3.根据权利要求2所述的方法,其特征在于,所述初始化共享设备具体包括以下步骤:
根据公共路径名和公共项目标识符获取键;
使用键创建信号量,并获取信号量标识符;
设置信号量数量为1;
使用键和指定长度创建共享内存,并获取共享内存标识符;
连接共享内存并获取共享内存地址,并将共享内存清零。
4.根据权利要求1所述的方法,其特征在于,根据所述热插拔信息获取热插拔的设备信息包括:根据热插拔信息中的设备所属子系统和设备路径来获取设备信息。
5.根据权利要求1-4任意一项权利要求的所述的方法,其特征在于,根据所述热插拔的动作信息和设备信息调用共享设备维护接口对共享设备进行相应地处理进一步包括:
如果所述动作信息是插入动作,则将设备信息作为一个新元素添加到共享设备的设备列表中,并向共享设备的进程列表中的每一个进程发送设备添加信号;如果所述动作信息是拔出动作,则从共享设备的设备列表中删除该设备,并向共享设备的进程列表中的每一个进程发送设备删除信号。
6.一种在Linux系统下共享热插拔设备的装置,包括用于检测到热插拔事件后,将热插拔信息设置为系统环境变量,并调用所述用户空间处理模块的内核;其特征在于,该装置还包括热插拔设备共享模块、热插拔设备检测模块和热插拔设备处理模块,其中:
所述热插拔设备共享模块,用于系统启动时初始化共享设备,并将热插拔设备检测模块注册为Linux热插拔系统的用户空间处理模块;还用于提供维护共享设备的接口;
所述热插拔设备检测模块,用于从所述系统环境变量中获取热插拔信息,并根据所述热插拔信息获取热插拔的设备信息和动作信息;
所述热插拔设备处理模块,根据所述热插拔的动作信息和设备信息调用共享设备维护接口对共享设备进行相应地处理。
7.根据权利要求6所述的装置,其特征在于,所述热插拔设备共享模块包括:
初始化单元,用于系统启动时创建共享内存和信号量,其中,共享内存用于存储设备列表和进程列表,信号量用于在多个进程同时访问共享内存时进行同步;还用于将热插拔设备检测模块注册为Linux热插拔系统的用户空间处理模块;
设备管理单元,用于添加或删除共享设备的设备列表中的元素;
进程管理单元,用于增加或删除共享设备的进程列表中的元素。
8.根据权利要求7所述的装置,其特征在于,所述初始化单元具体用于:根据公共路径名和公共项目标识符获取键;使用键创建信号量,并获取信号量标识符;设置信号量数量为1;使用键和指定长度创建共享内存,并获取共享内存标识符;连接共享内存并获取共享内存地址,并将共享内存清零。
9.根据权利要求6所述的装置,其特征在于,所述热插拔设备检测模块包括:
热插拔信息获取单元,用于从系统环境变量中获取内核设置的热插拔信息;
设备信息获取单元,用于根据热插拔信息中设备所属子系统和设备路径来获取设备信息。
10.根据权利要求6-9任意一项权利要求所述的装置,其特征在于,所述热插拔设备处理模块包括:
设备处理单元,用于当前热插拔的动作信息是插入动作时,将设备信息作为一个新元素添加到共享设备的设备列表中;当前热插拔动作是拔出动作时,从共享设备的设备列表中删除该设备;
信号发送单元,用于当前热插拔的动作信息是插入动作时,向共享设备的进程列表中的每一个进程发送设备添加信号;当前热插拔动作是拔出动作时,向共享设备的进程列表中的每一个进程发送设备删除信号。
CN201310492970.3A 2013-10-18 2013-10-18 一种在Linux系统下共享热插拔设备的方法与装置 Expired - Fee Related CN103530124B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201310492970.3A CN103530124B (zh) 2013-10-18 2013-10-18 一种在Linux系统下共享热插拔设备的方法与装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201310492970.3A CN103530124B (zh) 2013-10-18 2013-10-18 一种在Linux系统下共享热插拔设备的方法与装置

Publications (2)

Publication Number Publication Date
CN103530124A true CN103530124A (zh) 2014-01-22
CN103530124B CN103530124B (zh) 2017-01-25

Family

ID=49932164

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201310492970.3A Expired - Fee Related CN103530124B (zh) 2013-10-18 2013-10-18 一种在Linux系统下共享热插拔设备的方法与装置

Country Status (1)

Country Link
CN (1) CN103530124B (zh)

Cited By (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105739959A (zh) * 2014-12-10 2016-07-06 厦门雅迅网络股份有限公司 一种应用编程时对外部存储器管理操作的方法
CN106095413A (zh) * 2016-05-31 2016-11-09 青岛海信电器股份有限公司 一种蓝牙驱动程序的配置方法及装置
CN107168913A (zh) * 2017-05-27 2017-09-15 郑州云海信息技术有限公司 共享设备热拔出方法、装置和多用户管理系统
CN107247680A (zh) * 2017-06-19 2017-10-13 郑州云海信息技术有限公司 一种多用户共享设备io卡热插入方法及装置
CN107315607A (zh) * 2017-06-21 2017-11-03 南京翼辉信息技术有限公司 一种驱动自适应加载系统
CN107357719A (zh) * 2017-06-14 2017-11-17 上海斐讯数据通信技术有限公司 一种存储共享文件的操作功能测试方法、装置及系统
CN107479900A (zh) * 2017-08-28 2017-12-15 北京翼辉信息技术有限公司 一种适用于实时操作系统的热插拔软件方案
CN107957968A (zh) * 2018-01-19 2018-04-24 郑州云海信息技术有限公司 一种热插拔处理方法和装置
CN108170621A (zh) * 2018-01-19 2018-06-15 郑州云海信息技术有限公司 一种热插拔处理方法和装置
CN108228425A (zh) * 2017-12-29 2018-06-29 成都三零嘉微电子有限公司 一种Linux系统实施获取设备热插拔信息的系统
CN108536632A (zh) * 2018-04-13 2018-09-14 郑州云海信息技术有限公司 一种hba卡热插/拔事件的检测装置及方法
CN110209604A (zh) * 2018-02-28 2019-09-06 中航光电科技股份有限公司 一种基于ps/2接口热插拔的通信系统及方法
CN111984570A (zh) * 2020-07-14 2020-11-24 深圳市优必选科技股份有限公司 一种器件热插拔的检测方法及设备

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1757021A (zh) * 2003-03-07 2006-04-05 索尼株式会社 设备管理方法及设备管理系统
CN1877550A (zh) * 2006-01-13 2006-12-13 深圳创维-Rgb电子有限公司 电视机嵌入式Linux系统下USB存储设备实现实时热拔插的方法
US7234015B1 (en) * 2005-06-14 2007-06-19 Advanced Micro Devices, Inc. PCIXCAP pin input sharing configuration for additional use as PCI hot plug interface pin input
CN101472122A (zh) * 2007-12-29 2009-07-01 Tcl集团股份有限公司 通过数字音视频接口共享资源的方法

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1757021A (zh) * 2003-03-07 2006-04-05 索尼株式会社 设备管理方法及设备管理系统
US7234015B1 (en) * 2005-06-14 2007-06-19 Advanced Micro Devices, Inc. PCIXCAP pin input sharing configuration for additional use as PCI hot plug interface pin input
CN1877550A (zh) * 2006-01-13 2006-12-13 深圳创维-Rgb电子有限公司 电视机嵌入式Linux系统下USB存储设备实现实时热拔插的方法
CN101472122A (zh) * 2007-12-29 2009-07-01 Tcl集团股份有限公司 通过数字音视频接口共享资源的方法

Cited By (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105739959A (zh) * 2014-12-10 2016-07-06 厦门雅迅网络股份有限公司 一种应用编程时对外部存储器管理操作的方法
CN105739959B (zh) * 2014-12-10 2019-11-26 厦门雅迅网络股份有限公司 一种应用编程时对外部存储器管理操作的装置
CN106095413B (zh) * 2016-05-31 2019-09-17 青岛海信电器股份有限公司 一种蓝牙驱动程序的配置方法及装置
CN106095413A (zh) * 2016-05-31 2016-11-09 青岛海信电器股份有限公司 一种蓝牙驱动程序的配置方法及装置
CN107168913A (zh) * 2017-05-27 2017-09-15 郑州云海信息技术有限公司 共享设备热拔出方法、装置和多用户管理系统
CN107168913B (zh) * 2017-05-27 2020-01-10 苏州浪潮智能科技有限公司 共享设备热拔出方法、装置和多用户管理系统
CN107357719A (zh) * 2017-06-14 2017-11-17 上海斐讯数据通信技术有限公司 一种存储共享文件的操作功能测试方法、装置及系统
CN107247680A (zh) * 2017-06-19 2017-10-13 郑州云海信息技术有限公司 一种多用户共享设备io卡热插入方法及装置
CN107247680B (zh) * 2017-06-19 2020-08-21 苏州浪潮智能科技有限公司 一种多用户共享设备io卡热插入方法及装置
CN107315607A (zh) * 2017-06-21 2017-11-03 南京翼辉信息技术有限公司 一种驱动自适应加载系统
CN107315607B (zh) * 2017-06-21 2020-05-05 南京翼辉信息技术有限公司 一种驱动自适应加载系统
CN107479900A (zh) * 2017-08-28 2017-12-15 北京翼辉信息技术有限公司 一种适用于实时操作系统的热插拔软件方案
CN107479900B (zh) * 2017-08-28 2021-01-26 北京翼辉信息技术有限公司 一种适用于实时操作系统的热插拔软件方案
CN108228425A (zh) * 2017-12-29 2018-06-29 成都三零嘉微电子有限公司 一种Linux系统实施获取设备热插拔信息的系统
CN108170621A (zh) * 2018-01-19 2018-06-15 郑州云海信息技术有限公司 一种热插拔处理方法和装置
CN107957968A (zh) * 2018-01-19 2018-04-24 郑州云海信息技术有限公司 一种热插拔处理方法和装置
CN110209604A (zh) * 2018-02-28 2019-09-06 中航光电科技股份有限公司 一种基于ps/2接口热插拔的通信系统及方法
CN108536632A (zh) * 2018-04-13 2018-09-14 郑州云海信息技术有限公司 一种hba卡热插/拔事件的检测装置及方法
CN111984570A (zh) * 2020-07-14 2020-11-24 深圳市优必选科技股份有限公司 一种器件热插拔的检测方法及设备

Also Published As

Publication number Publication date
CN103530124B (zh) 2017-01-25

Similar Documents

Publication Publication Date Title
CN103530124A (zh) 一种在Linux系统下共享热插拔设备的方法与装置
CN102314377B (zh) 加速器及其实现支持虚拟机迁移的方法
TWI450103B (zh) 伺服器之遠端管理系統及方法,及其電腦程式產品
CN103065090B (zh) 一种应用程序恶意广告拦截方法及装置
CN111258921B (zh) 垃圾内存回收方法及装置、电子设备、存储介质
CN109542744A (zh) 检测终端开机异常问题的方法、装置、存储介质及终端
CN100472468C (zh) 计算机系统、计算机网络及其方法
CN103049327A (zh) 一种android系统挂载多存储设备的方法及装置
CN111954072B (zh) 一种多媒体播放方法、装置、多媒体播放器和介质
WO2023284688A1 (zh) 基于容器组pod的处理方法及相关系统、存储介质
WO2015062217A1 (zh) 虚拟桌面系统中外设的接入处理方法及装置
CN108563472B (zh) 基于多开应用的服务插件加载方法及装置
CN102339264A (zh) 一种星载电子系统设备即插即用控制方法及系统
CN116340053A (zh) 系统崩溃的日志处理方法、装置、计算机设备和介质
CN110018932B (zh) 一种容器磁盘的监控方法及装置
CN105893221B (zh) 终端运行时长的告警方法及装置
CN104516779B (zh) 一种系统切换方法及芯片
CN105426544B (zh) 监控数据库状态的方法及装置
CN104517067A (zh) 访问数据的方法、装置及系统
CN105373393A (zh) 一种在非事件驱动方式的os中实现对设备的热插拔的方法
CN101853142B (zh) 一种带虚拟光驱的usb设备的识别方法
CN107479900B (zh) 一种适用于实时操作系统的热插拔软件方案
CN109669727B (zh) 一种服务器的配置方法、系统及相关组件
CN111625350A (zh) 网络消息数据的内存分配方法、装置、设备及存储介质
CN109426563B (zh) 一种进程管理方法及装置

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

Granted publication date: 20170125

Termination date: 20191018

CF01 Termination of patent right due to non-payment of annual fee