一种基于RTLinux的设备实时控制方法[发明专利]
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
(10)申请公布号 CN 102141915 A
(43)申请公布日 2011.08.03C N 102141915 A
*CN102141915A*
(21)申请号 201010611052.4
(22)申请日 2010.12.29
G06F 9/44(2006.01)
(71)申请人中国船舶重工集团公司第七研究院
地址100192 北京市朝阳区双泉堡甲2号
(72)发明人潘小群
(74)专利代理机构中国船舶专利中心 11026
代理人缪蕾
(54)发明名称
一种基于RTLinux 的设备实时控制方法
(57)摘要
本发明提出了一种基于RTLinux 的设备实时
控制方法,利用在裁减后标准Linux 系统上加载
RTLinux 实时内核的实时操作系统,对RTLinux
进行扩展,增加RTLinux 对所需控制设备的支持,
实现RTLinux 中断共享。
本发明的方法不改变
RTLInux 的原有特性,支持原有RTLinux 的全部功
能,兼容性好,能够进行RTLinux 以及Linux 系统
下设备控制应用的扩展开发。
(51)Int.Cl.
(19)中华人民共和国国家知识产权局(12)发明专利申请
权利要求书 1 页 说明书 4 页
1.一种基于RTLinux的设备实时控制方法,主要包括以下步骤:
(1)在RTLinux源码中编写支持设备接口函数,包括接口设备文件类型、文件操作接口函数、方法函数、注册和撤销的函数,并生成对应接口模块;
(2)在RTLinux的中断注册函数中增加对设备的中断注册,改写RTLinux中的rtl_ core.c文件,在保持RTLinux原有处理方式不变的情况下,增加对PLXPCI9000的设备的中断支持;
(3)对标准Linux驱动程序的设备驱动接口file_operations采用RTLinux的内核函数进行实时化,以及自旋锁实时化,在标准Linux驱动程序中使用RTLinux的rtl_wait_t 处理中断等待,使用RTLinux的posix线程响应PLXPCI9000设备中断;
(4)将标准Linux的API函数库采用RTLinux的内核函数封装为内核模块,把PLX PCI900设备的物理内存映射函数改写为与RTLinux内核函数一致的形式,增加posix的互斥量。
一种基于RTLinux的设备实时控制方法
技术领域
[0001] 本发明涉及一种基于实时操作系统RTLinux的设备实时控制方法,是一项涉及实时操作系统、设备驱动的计算机系统软件技术,提供了一套包括实时环境、设备驱动以及接口API函数库在内的设备实时控制的解决方法。
背景技术
[0002] 基于实时操作系统的计算机实时控制技术在工业控制、通信和大型服务器中的应用日益广泛。
传统的通用系统由于操作系统的分时性,主要是过长的中断反应时间和任务切换反应时间,无法提供对PCI设备、USB设备、网络设备等设备的实时控制,因此无法满足这些设备对高效数据采集、时序控制等实时任务的要求。
[0003] 在众多实时操作系统中,Linux系统具备以下优点:开放式性好,可免费获取内源码,并进行任意修改;可以支持多种平台,移植性好;系统内核可根据需要裁减;支持的功能丰富;安全性和可靠性高。
采用裁减后的Linux可以在保证系统满足所需功能的前提下保证体积的最小化,对专用的嵌入式设备而言能够最大限度的节省存储空间。
但是,标准的Linux系统由于实时性能不佳,通常采用在系统中加载RTLinux实时内核实现对硬实时的支持。
[0004] RTLinux与Linux操作系统共存的硬实时操作系统能够创建精确运行的符合POSIX.1b标准的实时进程。
RTLinux实现了一个高效的可抢先的实时调度核心,全面接管中断,并把标准Linux作为此实时核心的一个优先级最低的进程运行。
RTLinux和标准Linux构成一个完备的整体,实时内核确保了关键任务的硬实时性,能够完成既包括实时和非实时的复杂任务。
但是,RTLinux操作系统存在中断无法共享,不能同时支持多个同类设备运行,内核线程无法相应设备中断等问题。
同时,RTLinux作为实时系统内核,缺少对硬件设备的支持。
发明内容
[0005] 针对上述现有技术存在的不足,本发明提出了一种基于RTLinux的设备实时控制方法,利用在裁减后标准Linux系统上加载RTLinux实时内核的实时操作系统,对RTLinux 进行扩展,增加RTLinux对所需控制设备的支持,实现RTLinux中断共享,主要包括以下步骤:
[0006] (1)在RTLinux源码中编写支持设备接口函数,包括接口设备文件类型、文件操作接口函数、方法函数、注册和撤销的函数,并生成对应接口模块;
[0007] (2)在RTLinux的中断注册函数中增加对设备的中断注册,改写RTLinux中的rtl_core.c文件,在保持RTLinux原有处理方式不变的情况下,增加对PLXPCI9000的设备的中断支持;
[0008] (3)对标准Linux驱动程序的设备驱动接口file_operations采用RTLinux的内核函数进行实时化,以及自旋锁实时化,在标准Linux驱动程序中使用RTLinux的rtl_
wait_t处理中断等待,使用RTLinux的posix线程响应PLXPCI9000设备中断;
[0009] (4)将标准Linux的API函数库采用RTLinux的内核函数封装为内核模块,把PLX PCI900设备的物理内存映射函数改写为与RTLinux内核函数一致的形式,增加posix的互斥量。
[0010] 本发明提出的基于RTLinux的设备实时控制方法,是一种具备硬实时性的设备实时控制解决方法,包括实时操作系统环境、实时设备驱动以及实时控制API函数,解决了标准RTLinux下无法实现中断共享的问题,可实现同时对多个同类设备的实时控制,经实际验证,相同设备在实时控制下较之非实时控制中断响应时间由毫秒级提高到微秒级,实时性能好;此外,本发明的方法不改变RTLInux的原有特性,支持原有RTLinux的全部功能,兼容性好,能够进行RTLinux以及Linux系统下设备控制应用的扩展开发。
具体实施方式
[0011] 本发明采用在裁减后标准Linux系统上加载RTLinux实时内核的实时操作系统。
对RTLinux进行扩展,增加RTLinux对所需控制设备,如PCI设备、USB设备、网络设备的支持,实现RTLinux中断共享,确保多个同类设备在实时内核中能够同时运行。
在设备原有标准Linux驱动程序结构基础上,保持驱动框架结构和驱动接口,使用RTLinux实时内核函数将其实时化。
提供设备驱动的实时应用API接口函数,将设备驱动接口API函数实时化,解决驱动与RTLinux不兼容的问题。
解决内核线程无法响应中断的问题,在RTLinux线程中实现中断处理。
最后,需要解决实时驱动与原API库函数不兼容问题,并将API库函数中使用的系统函数用内核函数重写,将API函数库以RTLinux内核模块的形式实时化,库函数在驱动模块加载后作为实时内核模块加载,由实时任务调用。
具体是对实时RTLinux系统进行扩展,实现中断共享机制,并在RTLinux的Posix线程中处理中断;在RTLinux中添加对设备的支持。
增加设备接口函数,包括接口设备文件类型、文件操作接口函数、方法函数、注册和撤销的函数,并生成对应接口模块;在RTLinux中断注册函数增加对设备驱动的实时处理。
RTLinux的硬中断,同一中断号只能注册一个设备,无法被多个使用RTLinux驱动的设备共享。
为了在RTLinux中实现中断共享机制,改写RTLinux中的rtl_core.c文件。
为了与RTLinux原有的函数兼容,在保持原有处理方式不变的情况下,增加了对新设备(XJS_device)的中断支持。
使用该类新设备所对应中断注册、响应及处理函数,即可将同一中断号与多个XJS_device共享;通过对驱动程序中断处理部分的进行实时化和设备驱动接口file_operations的RTLinux实时化改写,以及自旋锁实时化,实现了设备驱动的标准Linux下驱动源码的实时化。
由于内核线程中无法响应中断,为了在实时任务中响应设备中断,在驱动中使用RTLinux的rtl_wait_t处理中断等待,实现实时任务使用RTLinux 的posix线程响应设备中断。
将API改写为内核模块函数、把物理内存映射函数改写为与实时内核一致的形式,增加posix的互斥量,将实时控制函数转换为内核函数,从而完成设备API函数的内核化和实时化。
最后编写设备实时驱动、API内核函数库的加载和删除脚本,能够方便的在系统设备路径/dev中加入和清除实时设备。
[0012] 对设备的实时控制任务,可在硬件系统载入设备后,启动扩展后的RTLinux实时内核,并启动加载设备路径脚本,同时载入实时设备驱动模块以及API实时函数库内核模块,不同实时任务可以依据任务要求调用实时API库函数进行对设备的实时控制。
[0013] 本发明扩展后的RTLinux不改变RTLInux的原有特性,完全支持原有RTLinux的全部功能。
设备实时驱动、实时驱动API库将在RTLinux启动后以实时内核模块加载入系统。
设备的实时控制部分也将实时内核模块在系统中运行,而设备控制应用等非实时任务可以运行在Linux用户空间,能够方便地使用系统提供的各种资源(网络、文件系统等),并受到系统的保护,增加了系统的安全性。
[0014] 下面以提供PLX PCI9000系列芯片为接口控制器的PCI设备在RTLinux下的实时控制解决方法,进一步说明本发明的技术内容。
[0015] 在RTLinux源码中编写支持PLX PCI9000接口芯片的设备接口函数,包括接口设备文件类型、文件操作接口函数、方法函数、注册和撤销的函数,并生成对应接口模块。
在RTLinux中断注册函数增加对PCI9000驱动的实时处理。
为了在RTLinux中实现中断共享机制,改写RTLinux中的rtl_core.c文件。
在保持原有处理方式不变的情况下,增加了对一类新设备(XJS_device)的中断支持。
使用该类新设备所对应中断注册、响应及处理函数,即可将同一中断号与多个XJS_device共享。
对PLX PCI9000系列芯片的标准Linux驱动程序以及API函数库进行改进,使其能在权利要求1所述的扩展后的RTLinux内核中运行。
对驱动程序设备驱动接口file_operations的RTLinux实时化,以及自旋锁实时化,实现了PLX PCI9000系列接口芯片标准Linux驱动源码的实时化。
由于内核线程中无法响应中断,为了在实时任务中响应设备中断,在驱动中使用RTLinux的rtl_wait_t处理中断等待,实现实时任务使用RTLinux的posix线程响应设备中断。
将API函数库封装为内核模块函数,把PCI9000物理内存映射函数改写为与实时内核一致的形式,增加posix的互斥量,将实时控制函数转换为内核函数,从而完成PCI9000API函数的内核化和实时化。
具体如下:[0016] 首先,需要对实时RTLinux系统进行扩展,增加对PLX PCI9000的支持,实现中断共享机制,并能够在RTLinux的Posix线程中处理中断
[0017] RTLinux原有的设备文件接口无法支持PLX PCI接口芯片,在RTLinux源码中编写支持PLX PCI接口芯片的设备接口函数,包括接口设备文件类型、文件操作接口函数、方法函数、注册和撤销的函数,并生成对应接口模块。
[0018] 在RTLinux的中断注册函数中增加对PLX PCI9000的设备的中断注册,改写RTLinux中的rtl_core.c文件,在保持RTLinux原有处理方式不变的情况下,增加对PLX PCI9000的设备的中断支持。
在RTLinux中断注册函数增加对PLX驱动的实时处理。
RTLinux 的硬中断,同一中断号只能注册一个设备,无法被多个使用RTLinux驱动的设备共享。
为了在RTLinux中实现中断共享机制,改写RTLinux中的rtl_core.c文件。
为了与RTLinux原有的函数兼容,在保持原有处理方式不变的情况下,增加了对一类新设备(XJS_device)的中断支持。
使用该类新设备所对应中断注册、响应及处理函数,即可将同一中断号与多个XJS_device共享。
[0019] 对标准Linux驱动程序的设备驱动接口file_operations采用RTLinux的内核函数进行实时化,以及自旋锁实时化,在标准Linux驱动程序中使用RTLinux的rtl_wait_t 处理中断等待,使用RTLinux的posix线程响应PLX PCI9000设备中断。
通过对驱动程序中断处理部分的进行实时化和设备驱动接口file_operations的RTLinux实时化改写,以及自旋锁实时化,实现了PLX PCI9000系列接口芯片标准Linux驱动源码的实时化。
由于内核线程中无法响应中断,为了在实时任务中响应设备中断,在驱动中使用RTLinux的rtl_
wait_t处理中断等待,实现实时任务使用RTLinux的posix线程响应设备中断。
[0020] 将标准Linux的API函数库采用RTLinux的内核函数封装为内核模块,把PLX PCI900设备的物理内存映射函数改写为与RTLinux内核函数一致的形式,增加posix的互斥量。
将API改写为内核模块函数、把PLX物理内存映射函数改写为与实时内核一致的形式,增加posix的互斥量,将实时控制函数转换为内核函数,从而完成PCI9000 API函数的内核化和实时化。
[0021] 最后,编写PLX实时设备加载和删除脚本,能够方便的在系统设备路径/dev中加入和清除PLX实时设备。
[0022] 对基于PLX PCI9000系列的不同PCI设备的实时控制任务,可在硬件系统载入设备后,启动扩展后的RTLinux实时内核,并启动加载设备路径脚本,同时载入PLX实时设备驱动模块以及API实时函数库内核模块,不同实时任务可以依据任务要求调用API实时库函数进行对设备的实时控制。
[0023] 本发明在开放源码的标准Linux驱动及RTLinux实时系统的基础上提出了一套完全完整的实时Linux下PLX PCI9000系列PCI接口设备的实时控制解决方案,包括实时操作系统环境、实时设备驱动以及实时控制API函数,并解决了RTLinux下无法实现中断共享的问题,在该方案下可实现多个同类设备同时实时工作。
本发明通用性好,对PLX PCI9000系列芯片的各种功能具有完全的支持能力,实时性能好,相同设备在实时控制下较之非实时控制中断响应时间提高一倍。
本发明加载于以标雁/。
准Linux为平台的PCI和CPCI计算机作为设备的实时解决方案,也可作为基于PLX PCI9000芯片的嵌入式设备的实时控制系统。