CN1632769B - Linux操作系统下IDE设备热插/拔系统及实现方法 - Google Patents
Linux操作系统下IDE设备热插/拔系统及实现方法 Download PDFInfo
- Publication number
- CN1632769B CN1632769B CN 200310113114 CN200310113114A CN1632769B CN 1632769 B CN1632769 B CN 1632769B CN 200310113114 CN200310113114 CN 200310113114 CN 200310113114 A CN200310113114 A CN 200310113114A CN 1632769 B CN1632769 B CN 1632769B
- Authority
- CN
- China
- Prior art keywords
- ide
- equipment
- unplug
- plug
- controller
- 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.)
- Expired - Fee Related
Links
Images
Landscapes
- Debugging And Monitoring (AREA)
Abstract
一种Linux操作系统下IDE设备热插/拔系统及方法,其中包括中断处理模块,用户空间处理模块,IDE注册信息处理模块,首先捕获IDE设备热插/拔事件,接着定位发生该热插/拔事件的具体IDE设备并分析插/拔类型,然后根据该IDE设备的使用情况将其与应用程序在用户空间分离,最后根据插/拔类型修改IDE控制器中的注册信息,本发明不需要昂贵的硬件设备和专用的驱动程序,即可在系统带电运行的过程中,实现IDE设备的插入和拔除。
Description
技术领域
本发明涉及一种IDE设备热插/拔系统及实现方法,特别是涉及一种在Linux操作系统下实现IDE设备热插/拔的系统及方法。
背景技术
IDE(Integrated Device Electronics)是一种磁盘驱动器的接口类型,也称为ATA(AT Attachment)接口。IDE接口模式经历了三个不同时期的技术变化,由最早的PIO(Programmed I/O)传输方式升级到先进的DMA(DirectMemory Access)传输方式,直至现在最新的Ultra DMA(Ultra Direct MemoryAccess)传输方式。
IDE设备指的是采用IDE接口的计算机设备。目前,我们的计算机中标配的IDE设备无外乎两类——硬盘和光驱,硬盘的存在形式比较简单,而光驱则包括CD-ROM驱动器、DVD-ROM驱动器和CD-R/RW光盘刻录机三种常见的类型。此外,我们不常见的IDE设备还有ZIP软盘驱动器、ORB活动硬盘驱动器等。总的来说,IDE与存储设备几乎可以说是如影随形。
无论具体IDE设备的工作原理及结构设计如何,由于采用了同样的接口、在同样的总线上被同一个控制器指挥着,使用同样的指令体系来完成与系统数据的双向传输,因此,它们之间有很多共同之处。从具体的地方来看,这些相同之处表现在设备的数据连接/传输电缆、接口形状、设置方式都大致相同。
直接与IDE设备打交道是IDE控制器,最早8086、286和386时代(甚至486时代的早期),IDE设备都需要一个单独的控制卡来连接IDE设备,并通过这个卡上的IDE控制器来完成对IDE设备的各种访问操作。但自从486时代开始,IDE控制器被集成到了系统的芯片组的南桥芯片中,直到今天。这些芯片组都提供了完全相同的配置集成两个独立IDE控制器,每个控制器可接驳两个IDE设备(分别为主设备和从设备)。
在IDE设备上也有一个IDE控制器来完成设备与主机之间IDE控制命令以及数据监控/传输等功能。只不过,这些控制器的存在形式由于IDE设备的不同,与主机端(芯片组内集成)完全不一样。简单来说,整个IDE就是由IDE设备、主机/设备的IDE控制器、IDE数据连接/传输电缆和接口共同构成的一个子系统。
所谓热插拔,指的就是带电插/拔计算机的硬件。热插拔可以节省计算机关机重新激活的时间,还能降低开关机时计算机激活电流过大对硬件造成的冲击,所以在高级计算机用户中备受青睐。
现有的IDE设备热插拔的实现,大致有如下两种方法:一种采用专用的硬设备,在硬件磁盘数组的基础上,不需要软件(操作系统)的干预,实现IDE设备的热插/拔。这种方法硬设备造价昂贵,只适用于高档的服务器。
另一种方法需要安装IDE控制器的专用驱动程序,由该专用的驱动程序实现IDE设备热插/拔。这个驱动程序依赖于特定的IDE控制器,通用性不强。同时,在Linux操作系统中,支持热插/拔的专用驱动程序并不容易获得。
因此,如何在不需要专用的硬设备和专用的驱动程序的前提下,提供一种低成本且通用性较好的IDE设备热插/拔的方法已经成为急待解决的问题。
发明内容
本发明为解决上述问题而提供一种Linux操作系统下IDE设备热插/拔的实现方法,不需要昂贵的硬设备和专用的驱动程序,即可在系统带电运行的过程中,实现IDE设备的插入和拔除。
本发明提供一种Linux操作系统下IDE设备热插/拔系统,用于在Linux操作系统带电运行的过程中,实现IDE设备的插入和拔除,该系统包括一中断处理模块,用于自动检测并分析IDE设备热插拔操作所引起的硬件中断;一用户空间处理模块,用于在接到该中断处理模块发出的通知后根据插/拔类型而将该IDE设备与应用程序在用户空间相分离;以及一IDE注册信息处理模块,用于根据用户空间的处理情况以及插/拔类型而对IDE设备的注册信息进行修改,其中该插/拔类型为拔除时,该修改为清除该IDE设备控制器的注册信息。其中该插/拔类型为拔除时,该用户空间处理模块取得发生中断的具体IDE设备并确定其为拔除操作,判断该设备是否被应用程序使用;如果该设备被应用程序使用,则判断该设备是否为磁盘数组的一部分,是否有冗余;及如果该设备没有冗余,则强制终止使用该设备的用户应用程序,清除对该设备的使用。
本发明进而提供一种Linux操作系统下IDE设备热插/拔的实现方法,在Linux操作系统带电运行的过程中,实现IDE设备的插入和拔除,该方法首先捕获IDE设备热插/拔事件,接着定位发生该热插/拔事件的具体IDE设备并分析插/拔类型,然后根据该IDE设备的使用情况将其与应用程序在用户空间分离,最后根据插/拔类型修改IDE控制器中的注册信息,其中该插/拔类型为拔除时,该修改IDE控制器中的注册信息的步骤为清除该IDE设备控制器的注册信息。其中该插/拔类型为拔除时,将IDE设备与应用程序在用户空间分离的步骤还包括如下步骤:取得发生中断的具体IDE设备并确定其为拔除操作,判断该设备是否被应用程序使用;如果该设备被应用程序使用,则判断该设备是否为磁盘数组的一部分,是否有冗余;及如果该设备没有冗余,则强制终止使用该设备的用户应用程序,清除对该设备的使用。
本发明通过动态修改Linux内核中IDE设备的数据结构信息,在Linux操作系统层次上实现IDE设备插/拔操作,不需要专用的硬设备和专用的驱动程序,主要利用软件进行处理,成本很低且通用性较好。
附图说明
图1为本发明的Linux操作系统下IDE设备热插/拔的实现方法流程图;
图2为本发明的Linux操作系统下IDE设备热插/拔系统模块结构图;
图3为本发明所提供的中断处理模块的处理流程图;
图4为本发明所提供的用户空间处理模块的处理流程图;及
图5为本发明所提供的IDE注册信息处理模块的处理流程图。
其中,附图标记说明如下:
步骤101 捕获IDE设备热插/拔事件
步骤102 定位发生该热插/拔事件的具体IDE设备并分析插/拔类型
步骤103 根据该IDE设备的使用情况将其与应用程序在用户空间分离
步骤104 根据插/拔类型修改IDE控制器中的注册信息
步骤301 注册中断处理程序
步骤302 等待中断发生
步骤303 判断中断具体内容
步骤304 唤醒用户空间处理模块
步骤401 等待中断处理模块唤醒通知
步骤402 是否被中断唤醒
步骤403 取得发生中断的具体设备
步骤404 是否为拔除操作
步骤405 控制器是否被使用
步骤406 控制器是否有冗余
步骤407 强制终止使用控制器的程序
步骤408 调用IDE注册信息处理模块
步骤409 从冗余中移除控制器
步骤501 得到控制器的数据结构
步骤502 是否为插入操作
步骤503 初始化控制器的硬件参数
步骤504 探测控制器,填充注册信息到控制器的数据结构中
步骤505 设置控制器的DMA方式
步骤506 启用DMA方式
步骤507 清除控制器的注册信息
具体实施方式
如图1所示,本发明提供一种Linux操作系统下IDE设备热插/拔的实现方法,在Linux操作系统带电运行的过程中,实现IDE设备的插入和拔除,该方法首先在步骤101捕获IDE设备热插/拔事件;接着在步骤102定位发生该热插/拔事件的具体IDE设备并分析插/拔类型;然后在步骤103根据该IDE设备的使用情况将其与应用程序在用户空间分离;最后在步骤104根据插/拔类型修改IDE控制器中的注册信息。
为进一步清楚的描述本发明的实现,请参阅图2,其为本发明的模块结构图,功能模块按照Linux的特点被划分成内核空间的“IDE注册信息处理模块”、“中断处理模块”和用户空间的“用户空间处理模块”三个模块。
IDE控制器在发生热插/拔事件时,会产生硬件中断。“中断处理模块”注册一个中断处理程序,用来捕获热插/拔事件。在捕获到热插/拔事件后,中断处理模块分析中断原因:具体的IDE控制器和插入/拔除类型。然后会通知“用户空间处理程序”进行处理。
“用户空间处理模块”设计成一个守护进程,在Linux系统启动后自动执行并处于等待。在接到“中断处理模块”的通知后,“用户空间处理程序”完成用户空间需要进行的处理:如拔除设备前,终止各个应用程序对该设备的使用,使该设备处于安全的可拔除状态。在完成处理后,调用“IDE注册信息处理模块”。
“IDE注册信息处理模块”负责处理Linux核心(kernel)中关于IDE设备的注册信息。Linux kernel中关于IDE设备的注册信息保存在一个数组中,数组的每一个单元对应一个IDE设备。通过修改该数组可以在Linux kernel中实现对IDE设备的注册或注销操作,从而实现IDE设备插入和拔除。
下面从各个模块的处理流程出发来说明本发明的实现方法,图3为中断处理模块的流程图,“中断处理模块”可以设计成Linux Kernel可加载模块,模块初始化后,在步骤301注册一个中断处理函数,该中断处理函数处于等待状态,在步骤302等待中断发生。当发生IDE热插拔事件后,产生硬件中断,该中断触发中断处理函数。
在步骤303,中断处理函数判断中断的具体原因,判断是哪一个IDE控制器发生热插/拔,是插入还是拔除。在步骤304,唤醒“用户空间处理程序”进行处理。然后中断处理模块继续进入等待,等候下一次中断发生。其中,所谓插/拔类型,是根据硬件中断类型,判断当前IDE设备的操作是插入还是拔除。
图4为用户空间处理模块的流程图,在步骤401、402,“用户空间处理程序”启动后进入睡眠状态,等待“中断处理模块”唤醒。在被唤醒之后,首先在步骤403取得发生中断的具体设备,然后在步骤404判断设备是插入还是拔除。如果是插入操作,不做进一步处理,在步骤408直接调用“IDE注册信息处理模块”,由“IDE注册信息处理模块”作进一步的处理。
在步骤405,如果中断类型为拔除控制器的操作,判断控制器是否被应用程序使用。如果没有应用程序使用此控制器,表明控制器可以安全的拔除,可直接调用“IDE注册信息处理模块”进行处理。
在步骤406,如果控制器已经被使用,判断控制器是否是磁盘数组的一部分,是否有冗余。如果控制器有冗余,表明拔除此控制器不会影响到应用程序的使用,可在步骤409从冗余中移除此控制器。然后调用“IDE注册信息处理模块”进行处理。
如果控制器没有冗余,就需要在步骤407强制终止使用此控制器的用户程序,清除对控制器的使用,然后交给“IDE注册信息处理模块”作进一步的处理。
图5为IDE注册信息处理模块流程图。“IDE注册信息处理模块”运行在Linux核心空间,由“用户空间处理程序”调用,处理IDE设备的数据结构。首先在步骤501通过ide_hwif数组获取指定控制器的数据结构。在步骤502,判断热插/拔类型,如果为插入操作,在步骤503调用核心函数ide_init_hwif_ports,初始化控制器的硬件参数。然后在步骤504通过核心函数ide_probe_module、create_proc_ide_interfaces、ide_driver_module检测控制器,填充注册信息到控制器的数据结构中。然后在步骤505通过核心函数ide_setup_dma设置控制器的DMA方式,再在步骤506调用核心函数ide_dma_check和set_using_dma,启用DMA(直接内存访问,Access)方式。此时控制器信息已经被正确的加入到核心的数据结构中,用户程序也可以访问该IDE控制器。控制器的插入操作到此结束。
如果进行拔除操作,在步骤507调用核心函数ide_unregister,清除控制器的注册信息。这样控制器就拔除了。
下面为了具体说明本发明的技术,特举一具体实施例。在一个存储服务器中,有一个IDE控制器插槽为空闲状态,将一个控制器插入到该插槽的处理过程如下:
首先中断处理模块检测到中断发生,判断出一个IDE控制器插入到系统中,调用用户空间处理程序。用户空间处理程序判断是IDE插入操作,不做处理,直接调用IDE注册信息处理模块。IDE注册信息处理模块取得该控制器的数据结构,初始化硬件参数。检测控制器,填充注册信息到控制器的数据结构中。初始化控制器的DMA参数,启动DMA方式。
以上所述,仅为本发明其中的较佳实施例,并非用来限定本发明的实施范围;凡依据本发明申请专利范围在不脱离本发明的精神和范围内所作的均等变化与修饰,均应属于本发明专利权利要求书所要求保护的范围内。
Claims (8)
1.一种Linux操作系统下IDE设备热插/拔系统,用于在Linux操作系统带电运行的过程中,实现IDE设备的插入和拔除,其中该系统包括:
一中断处理模块,用于自动检测并分析IDE设备热插/拔操作所引起的硬件中断;
一用户空间处理模块,用于在接到该中断处理模块发出的通知后根据插/拔类型而将该IDE设备与应用程序在用户空间相分离;及
一IDE注册信息处理模块,用于根据用户空间的处理情况以及插/拔类型而对IDE设备的注册信息进行修改,其中该插/拔类型为拔除时,该修改为清除该IDE设备控制器的注册信息,
其中该插/拔类型为拔除时,该用户空间处理模块取得发生中断的具体IDE设备并确定其为拔除操作,判断该设备是否被应用程序使用;如果该设备被应用程序使用,则判断该设备是否为磁盘数组的一部分,是否有冗余;及如果该设备没有冗余,则强制终止使用该设备的用户应用程序,清除对该设备的使用。
2.如权利要求1所述的Linux操作系统下IDE设备热插/拔系统,其中该中断处理模块为Linux核心可加载模块。
3.如权利要求1所述的Linux操作系统下IDE设备热插/拔系统,其中该用户空间处理模块在Linux操作系统启动后自动处于等待状态,直至接到该中断处理模块的通知后执行处理过程。
4.如权利要求1所述的Linux操作系统下IDE设备热插/拔系统,其中该IDE注册信息处理模块运行在Linux核心空间。
5.一种Linux操作系统下IDE设备热插/拔的实现方法,在Linux操作系统带电运行的过程中,实现IDE设备的插入和拔除,其中该方法包括以下步骤:
捕获IDE设备热插/拔事件;
定位发生该热插/拔事件的具体IDE设备并分析插/拔类型;
根据该IDE设备的使用情况将其与应用程序在用户空间分离;及
根据插/拔类型修改IDE控制器中的注册信息,其中该插/拔类型为拔除时,该修改IDE控制器中的注册信息的步骤为清除该IDE设备控制器的注册信息,
其中该插/拔类型为拔除时,将IDE设备与应用程序在用户空间分离的步骤还包括如下步骤:取得发生中断的具体IDE设备并确定其为拔除操作,判断该设备是否被应用程序使用;如果该设备被应用程序使用,则判断该设备是否为磁盘数组的一部分,是否有冗余;及如果该设备没有冗余,则强制终止使用该设备的用户应用程序,清除对该设备的使用。
6.如权利要求5所述的Linux操作系统下IDE设备热插/拔的实现方法,其中该捕获热插/拔事件并分析插/拔类型的步骤,还包括如下步骤:
注册一中断处理函数并等待中断发生;
当发生IDE设备热插/拔事件后触发该中断处理函数;及
由该中断处理函数判断是哪一个IDE控制器发生热插拔,是插入还是拔除。
7.如权利要求5所述的Linux操作系统下IDE设备热插/拔的实现方法,其中该清除控制器注册信息的步骤,是通过调用核心函数ide_unregister来实现的。
8.如权利要求5所述的Linux操作系统下IDE设备热插/拔的实现方法,其中该插/拔类型为插入时,该修改IDE控制器中的注册信息的步骤,还包括如下步骤:
获取指定控制器的数据结构;
初始化该控制器的硬件参数;
检测该控制器,填充注册信息到控制器的数据结构中;
设置该控制器的DMA方式;及
启用DMA方式。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 200310113114 CN1632769B (zh) | 2003-12-22 | 2003-12-22 | Linux操作系统下IDE设备热插/拔系统及实现方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 200310113114 CN1632769B (zh) | 2003-12-22 | 2003-12-22 | Linux操作系统下IDE设备热插/拔系统及实现方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN1632769A CN1632769A (zh) | 2005-06-29 |
CN1632769B true CN1632769B (zh) | 2010-04-14 |
Family
ID=34843427
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN 200310113114 Expired - Fee Related CN1632769B (zh) | 2003-12-22 | 2003-12-22 | Linux操作系统下IDE设备热插/拔系统及实现方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN1632769B (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102075354A (zh) * | 2010-12-30 | 2011-05-25 | 瑞斯康达科技发展股份有限公司 | 一种分布式系统中设备的监控方法及监控装置 |
CN103123611B (zh) * | 2011-11-18 | 2015-11-18 | 武汉钢铁(集团)公司 | Asterisk服务器PCI板卡热拔插控制方法 |
CN108121681B (zh) * | 2017-12-04 | 2020-12-11 | 泾县谷声信息科技有限公司 | 一种热插拔实现方法、终端及存储介质 |
CN108959130A (zh) * | 2018-04-29 | 2018-12-07 | 浙江工规科技有限公司 | 基于嵌入式系统的存储系统 |
CN110532210B (zh) * | 2019-08-07 | 2021-10-22 | 北京数衍科技有限公司 | 安全获取操作系统任意输出设备数据的桥接方法 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6401157B1 (en) * | 1999-04-30 | 2002-06-04 | Compaq Information Technologies Group, L.P. | Hot-pluggable component detection logic |
CN2501082Y (zh) * | 2001-08-27 | 2002-07-17 | 慧亚科技股份有限公司 | 一种用于异步终端适配器接口的热插拔装置 |
CN1384416A (zh) * | 2001-05-09 | 2002-12-11 | 英业达股份有限公司 | 一种可热插拔的智能磁盘设备接口及其实现方法 |
US6529987B1 (en) * | 1999-09-08 | 2003-03-04 | Intel Corporation | Hot pluggins in a PCI bus system |
-
2003
- 2003-12-22 CN CN 200310113114 patent/CN1632769B/zh not_active Expired - Fee Related
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6401157B1 (en) * | 1999-04-30 | 2002-06-04 | Compaq Information Technologies Group, L.P. | Hot-pluggable component detection logic |
US6529987B1 (en) * | 1999-09-08 | 2003-03-04 | Intel Corporation | Hot pluggins in a PCI bus system |
CN1384416A (zh) * | 2001-05-09 | 2002-12-11 | 英业达股份有限公司 | 一种可热插拔的智能磁盘设备接口及其实现方法 |
CN2501082Y (zh) * | 2001-08-27 | 2002-07-17 | 慧亚科技股份有限公司 | 一种用于异步终端适配器接口的热插拔装置 |
Also Published As
Publication number | Publication date |
---|---|
CN1632769A (zh) | 2005-06-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US6041375A (en) | Method and system for enabling nondisruptive live insertion and removal of feature cards in a computer system | |
CN102081581B (zh) | 电源管理系统及方法 | |
CN107577185B (zh) | 一种任务执行方法及基于多核处理器的控制器 | |
EP1588260B1 (en) | Hot plug interfaces and failure handling | |
CN101593164B (zh) | 基于嵌入式Linux的从USB HID装置及固件实现方法 | |
JPH0690699B2 (ja) | 割込インタフェース回路 | |
CN104731741B (zh) | 热插拔的实现方法和系统 | |
JP2001229117A (ja) | 拡張ユニットの制御方法、コンピュータ、記録媒体及び伝送媒体 | |
JPH11328092A (ja) | コンピュ―タの一次及び二次装置の自動構成方法 | |
CN103116563B (zh) | 一种主机通信方法、一种主机及通信系统 | |
CN104460406B (zh) | 单线通信的方法及基于单线通信的单片机固件升级方法 | |
CN101751274B (zh) | 一种虚拟机系统及其通用串行总线设备的卸载方法 | |
JPH11194963A (ja) | コマンド実行監視方法、及び、コマンド実行監視装置 | |
CN1632769B (zh) | Linux操作系统下IDE设备热插/拔系统及实现方法 | |
US7644222B2 (en) | Low latency event communication system and method | |
CN114817115A (zh) | 串口通信方法及相关装置 | |
CN109086081B (zh) | 一种即时提示SATA和NVMe设备在位变化的方法、系统及介质 | |
US6892263B1 (en) | System and method for hot swapping daughtercards in high availability computer systems | |
CN105824650B (zh) | 计算机系统、可适性休眠控制模块及其控制方法 | |
CN102567251A (zh) | Bios的控制方法和装置 | |
US6678775B1 (en) | System enabling automatic error detection in response to removal of bus adapter | |
CN107894930A (zh) | 死机状态数据被动恢复处理的方法和装置 | |
CN102385525A (zh) | 一种虚拟机系统及虚拟机系统中卸载扩展坞设备的方法 | |
TWI275998B (en) | IDE apparatus hot-plug system and implementation method under Linux operating system | |
CN1560748A (zh) | 一种usb接口的驱动方法 |
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 | ||
TR01 | Transfer of patent right | ||
TR01 | Transfer of patent right |
Effective date of registration: 20181212 Address after: Xinhua Village, Guanhu Town, Pizhou City, Jiangsu Province Patentee after: Zouzhou Ruoqing Ginkgo Seedling Planting Specialized Cooperative Address before: Taipei City, Taiwan, China Patentee before: Inventec Corporation |
|
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: 20100414 Termination date: 20181222 |