CN105786457A - 将VxWorks任务移植到Linux的方法及装置 - Google Patents
将VxWorks任务移植到Linux的方法及装置 Download PDFInfo
- Publication number
- CN105786457A CN105786457A CN201410811377.5A CN201410811377A CN105786457A CN 105786457 A CN105786457 A CN 105786457A CN 201410811377 A CN201410811377 A CN 201410811377A CN 105786457 A CN105786457 A CN 105786457A
- Authority
- CN
- China
- Prior art keywords
- task
- linux
- vxworks
- function interface
- structure body
- 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
Landscapes
- Management, Administration, Business Operations System, And Electronic Commerce (AREA)
Abstract
本发明实施例公开了一种将VxWorks任务移植到Linux的方法及装置,涉及计算机领域,可以将VxWorks任务移植到Linux上,且不改变处理VxWorks任务时调用的函数接口。具体方案为:以Linux内核模块的代码形式,将VxWorks任务的函数接口转换到Linux内核提供的函数接口;定义VxWorks任务结构体,并将指向VxWorks任务结构体的指针作为Linux任务结构体的一个成员变量,添加至Linux任务结构体;以Linux内核实时线程的方式创建模拟VxWorks任务的Linux任务的Linux任务结构体;初始化模拟VxWorks任务的Linux任务的Linux任务结构体的成员变量。
Description
技术领域
本发明涉及计算机技术领域,尤其涉及一种将VxWorks任务移植到Linux的方法及装置。
背景技术
VxWorks操作系统和Linux操作系统都是嵌入式操作系统,但VxWorks操作系统的源代码是不公开的,且VxWorks操作系统的授权费用较高;而Linux操作系统源代码是公开的,Linux操作系统的使用不需要支付任何授权费用。
由于Linux操作系统的源代码公开,Linux操作系统的使用不需要支付任何授权费用,因此,出于成本的考虑,可以考虑将许多现存的VxWorks操作系统上能够运行的实时任务移植到Linux操作系统上运行。
但是,存在的问题是:由于VxWorks操作系统和Linux操作系统的设计思想和系统架构差异较大,Linux操作系统无法提供在VxWorks操作系统上处理实时任务所需的函数接口,因此,将VxWorks操作系统上能够运行的实时任务移植到Linux操作系统上还有许多问题亟待解决。
发明内容
本发明的实施例提供一种将VxWorks任务移植到Linux的方法及装置,可以将VxWorks任务移植到Linux上,且不改变处理VxWorks任务时调用的函数接口。
为达到上述目的,本发明的实施例采用如下技术方案:
本发明实施例的第一方面,提供一种将VxWorks任务移植到Linux的方法,包括:
以Linux内核模块的代码形式,将VxWorks任务的函数接口转换到Linux内核提供的函数接口;
定义VxWorks任务结构体,并将指向所述VxWorks任务结构体的指针作为Linux任务结构体的一个成员变量,添加至所述Linux任务结构体;
以Linux内核实时线程的方式创建模拟VxWorks任务的Linux任务的Linux任务结构体;
初始化所述模拟VxWorks任务的Linux任务的Linux任务结构体的成员变量。
结合第一方面,在第一种可能的实现方式中,所述Linux任务结构体的成员变量还包含Linux任务ID、Linux任务名、Linux任务优先级和Linux任务入口函数,所述VxWorks任务结构体的成员变量包含VxWorks任务标识ID、VxWorks任务名、VxWorks任务优先级和VxWorks任务入口函数;
所述Linux任务ID与所述VxWorks任务ID独立编号;
所述Linux任务结构体的成员变量还包含标志位,在初始化后,所述标志位指示所述Linux任务为用于模拟VxWorks任务的Linux任务,或者,所述标志位指示所述Linux任务为Linux操作系统上的实时任务。
结合第一方面,在第二种可能的实现方式中,所述模拟VxWorks任务的Linux任务的优先级高低与所述VxWorks任务的优先级高低相对应。
所述VxWorks任务的优先级值的取值范围为[0,255],所述VxWorks任务的优先级值越小,所述VxWorks任务的优先级越高;
所述模拟VxWorks任务的Linux任务的优先级的取值范围为[0,99],所述模拟VxWorks任务的Linux任务的优先级值越大,所述模拟VxWorks任务的Linux任务的优先级越高。
结合第一方面,在第四种可能的实现方式中,所述VxWorks任务的函数接口包括:所述VxWorks任务的任务创建函数接口;
所述以Linux内核模块的代码形式,将VxWorks任务的函数接口转换到Linux内核提供的函数接口,包括:
以所述Linux内核模块的代码形式,将所述VxWorks任务的任务创建函数接口转换到所述Linux内核提供的创建线程函数接口。
结合第一方面的第四种可能的实现方式,在第五种可能的实现方式中,所述VxWorks任务的函数接口还包括:所述VxWorks任务的任务挂起函数接口和所述VxWorks任务的任务恢复函数接口;
所述以Linux内核模块的代码形式,将VxWorks任务的函数接口转换到Linux内核提供的函数接口,还包括:
以所述Linux内核模块的代码形式,控制所述Linux内核提供的创建线程函数接口调用信号允许函数,以使得所述Linux内核提供的创建线程函数接口允许接收停止信号和恢复信号;
其中,所述停止信号用于指示正在运行的模拟VxWorks任务的Linux任务由运行状态切换至挂起状态,所述恢复信号用于指示处于所述挂起状态的模拟VxWorks任务的Linux任务由所述挂起状态切换至所述运行状态。
本发明实施例的第二方面,提供一种将VxWorks任务移植到Linux的装置,包括:
接口转换模块,用于以Linux内核模块的代码形式,将VxWorks任务的函数接口转换到Linux内核提供的函数接口;
结构体定义模块,用于定义VxWorks任务结构体,并将指向所述VxWorks任务结构体的指针作为Linux任务结构体的一个成员变量,添加至所述Linux任务结构体;
结构体创建模块,用于以Linux内核实时线程的方式创建模拟VxWorks任务的Linux任务的Linux任务结构体;
初始化模块,用于初始化所述模拟VxWorks任务的Linux任务的Linux任务结构体的成员变量。
结合第二方面,在第一种可能的实现方式中,所述Linux任务结构体的成员变量还包含Linux任务ID、Linux任务名、Linux任务优先级和Linux任务入口函数,所述VxWorks任务结构体的成员变量包含VxWorks任务标识ID、VxWorks任务名、VxWorks任务优先级和VxWorks任务入口函数;
所述Linux任务ID与所述VxWorks任务ID独立编号;
所述Linux任务结构体的成员变量还包含标志位,在初始化后,所述标志位指示所述Linux任务为用于模拟VxWorks任务的Linux任务,或者,所述标志位指示所述Linux任务为Linux操作系统上的实时任务。
结合第二方面,在第二种可能的实现方式中,所述模拟VxWorks任务的Linux任务的优先级高低与所述VxWorks任务的优先级高低相对应;
所述VxWorks任务的优先级值的取值范围为[0,255],所述VxWorks任务的优先级值越小,所述VxWorks任务的优先级越高;
所述模拟VxWorks任务的Linux任务的优先级的取值范围为[0,99],所述模拟VxWorks任务的Linux任务的优先级值越大,所述模拟VxWorks任务的Linux任务的优先级越高。
结合第三方面,在第三种可能的实现方式中,所述VxWorks任务的函数接口包括:所述VxWorks任务的任务创建函数接口、所述VxWorks任务的任务挂起函数接口和所述VxWorks任务的任务恢复函数接口;
所述接口转换模块,具体用于:
以所述Linux内核模块的代码形式,将所述VxWorks任务的任务创建函数接口转换到所述Linux内核提供的创建线程函数接口;
以所述Linux内核模块的代码形式,控制所述Linux内核提供的创建线程函数接口调用信号允许函数,以使得所述Linux内核提供的创建线程函数接口允许接收停止信号和恢复信号;
其中,所述停止信号用于指示正在运行的模拟VxWorks任务的Linux任务由运行状态切换至挂起状态,所述恢复信号用于指示处于所述挂起状态的模拟VxWorks任务的Linux任务由所述挂起状态切换至所述运行状态。
本发明实施例提供的将VxWorks任务移植到Linux的方法及装置,通过定义VxWorks任务结构体,并将指向VxWorks任务结构体的指针作为Linux任务结构体的一个成员变量,添加至Linux任务结构体,可以将在Linux系统中模拟的VxWorks任务用Linux任务结构体描述。当需要将一个VxWorks任务移植到Linux时,只需以Linux内核实时线程的方式创建模拟该VxWorks任务的Linux任务的Linux任务结构体,并初始化该Linux任务结构体,就可以使模拟该VxWorks任务的Linux任务像Linux系统中原有的Linux任务一样被Linux内核调度,以实现将VxWorks任务移植到Linux上。由于本发明实施例中是以Linux内核模块的代码形式,将VxWorks任务的函数接口转换到Linux内核提供的函数接口,当需要调用VxWorks任务的函数接口以处理VxWorks任务时,从表面看,所调用的VxWorks任务的函数接口并没有改变,但实际上,调用VxWorks任务的函数接口时会转为调用Linux内核提供的函数接口,因此,采用本发明实施例提供的将VxWorks任务移植到Linux的方法,可以将VxWorks任务移植到Linux上,并且不改变处理VxWorks任务时调用的函数接口。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例提供的一种将VxWorks任务移植到Linux的方法流程图;
图2为本发明实施例提供的一种将VxWorks任务移植到Linux的装置的组成示意图;
图3为本发明实施例提供的另一种将VxWorks任务移植到Linux的装置的组成示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
另外,本文中术语“系统”和“网络”在本文中常被可互换使用。本文中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,本文中字符“/”,一般表示前后关联对象是一种“或”的关系。
本发明实施例提供一种将VxWorks任务移植到Linux的方法,如图1所示,包括:
S101、以Linux内核模块的代码形式,将VxWorks任务的函数接口转换到Linux内核提供的函数接口。
其中,当需要调用VxWorks任务的函数接口以处理VxWorks任务时,从表面看,所调用的VxWorks任务的函数接口并没有改变,但实际上,调用VxWorks任务的函数接口时会转为调用Linux内核提供的函数接口。
S102、定义VxWorks任务结构体,并将指向VxWorks任务结构体的指针作为Linux任务结构体的一个成员变量,添加至Linux任务结构体。
其中,Linux任务结构体的成员变量还包含Linux任务标识(英文:Identity,简称ID)、Linux任务名、Linux任务优先级和Linux任务入口函数。VxWorks任务结构体的成员变量包含VxWorks任务ID、VxWorks任务名、VxWorks任务优先级和VxWorks任务入口函数。
其中,VxWorks任务结构体为在Linux系统中新定义的结构体,该结构体用于描述VxWorks任务,并且,在Linux系统中新定义的VxWorks任务结构体的成员变量包含VxWorks系统中原有的VxWorks任务结构体的成员变量。
本发明实施例中需要对Linux系统中原有的Linux任务结构体进行修改,具体为:指向VxWorks任务结构体的指针作为Linux任务结构体的一个成员变量,添加至Linux任务结构体。这样,Linux任务结构体的成员变量包含Linux系统中原有的Linux任务结构体和指向VxWorks任务结构体的指针。
需要说明的是,描述结构体VxWorks任务的结构体的成员变量还可以包含VxWorks任务状态和VxWorks任务变量用的数组等。Linux任务结构体的成员变量还可以包含Linux任务状态和Linux任务变量用的数组等。
S103、以Linux内核实时线程的方式创建模拟VxWorks任务的Linux任务的Linux任务结构体。
其中,VxWorks任务可以为需要在Linux系统中模拟的任意一个VxWorks任务。在Linux系统中,每一个Linux内核实时线程对应一个Linux任务。
本步骤中创建的模拟VxWorks任务的Linux任务的Linux任务结构体的成员变量包含Linux任务标识ID、Linux任务名、Linux任务优先级、Linux任务入口函数、标志位和指向VxWorks任务的结构体的指针。
需要说明的是,创建模拟VxWorks任务的Linux任务的Linux任务结构体时,Linux操作系统会为模拟VxWorks任务的Linux任务的Linux任务结构体分配相应的内存空间。
S104、初始化模拟VxWorks任务的Linux任务的Linux任务结构体的成员变量。
具体的初始化包括:为模拟VxWorks任务的Linux任务的Linux任务结构体的每一个成员变量赋值。初始化后,模拟VxWorks任务的Linux任务可以像Linux系统中原有的Linux任务一样被Linux内核调度。
通过上述步骤就可以将VxWorks任务移植到Linux系统中,用Linux任务模拟VxWorks任务。当需要执行VxWorks任务时,Linux内核直接调用模拟VxWorks任务的Linux任务的Linux任务结构体中的Linux任务入口函数,就可以执行模拟VxWorks任务的Linux任务。
若需要将多个VxWorks任务移植到Linux系统中,则可以重复执行S103-S104。
本发明实施例提供的将VxWorks任务移植到Linux的方法,通过定义VxWorks任务结构体,并将指向VxWorks任务结构体的指针作为Linux任务结构体的一个成员变量,添加至Linux任务结构体,可以将在Linux系统中模拟的VxWorks任务用Linux任务结构体描述。当需要将一个VxWorks任务移植到Linux时,只需以Linux内核实时线程的方式创建模拟该VxWorks任务的Linux任务的Linux任务结构体,并初始化该Linux任务结构体,就可以使模拟该VxWorks任务的Linux任务像Linux系统中原有的Linux任务一样被Linux内核调度,以实现将VxWorks任务移植到Linux上。由于本发明实施例中是以Linux内核模块的代码形式,将VxWorks任务的函数接口转换到Linux内核提供的函数接口,当需要调用VxWorks任务的函数接口以处理VxWorks任务时,从表面看,所调用的VxWorks任务的函数接口并没有改变,但实际上,调用VxWorks任务的函数接口时会转为调用Linux内核提供的函数接口,因此,采用本发明实施例提供的将VxWorks任务移植到Linux的方法,可以将VxWorks任务移植到Linux上,并且不改变处理VxWorks任务时调用的函数接口。
可选的,Linux任务ID与VxWorks任务ID可以独立编号,以便于管理。
例如,当前的任务列表中共有10个Linux任务,其中3个Linux任务为模拟VxWorks任务的Linux任务,则这3个模拟VxWorks任务的Linux任务对应的VxWorks任务的结构体中的VxWorks任务ID分别可以为1、2、3,而10个Linux任务对应的Linux任务结构体中的Linux任务ID分别可以为1、2、3、4、5、6、7、8、9、10。
可选的,Linux任务结构体的成员变量还包含标志位,在初始化后,标志位指示Linux任务为用于模拟VxWorks任务的Linux任务,或者,标志位指示Linux任务为Linux操作系统上的实时任务。
示例性的,标志位的取值可以为1或0。标志位的取值为1,可以指示当前的Linux任务为用于模拟VxWorks任务的Linux任务;标志位的取值为0,可以指示当前的Linux任务为Linux操作系统上的实时任务。
进一步的,若将多个VxWorks任务移植到Linux系统中,则需要保证移植后的模拟该多个VxWorks任务的多个Linux任务的优先级的高低与移植前的该多个VxWorks任务的优先级的高低一致,即模拟VxWorks任务的Linux任务的优先级高低与VxWorks任务的优先级高低相对应。
示例性的,假设第一Linux任务为模拟第一VxWorks任务的Linux任务,第二Linux任务为模拟第二VxWorks任务的Linux任务,第一VxWorks任务与第二VxWorks任务不同,第一Linux任务与第二Linux任务不同,则第一Linux任务的Linux任务优先级相对于第二Linux任务的Linux任务优先级的高低与第一VxWorks任务的VxWorks任务优先级相对于第二VxWorks任务的VxWorks任务优先级的高低相同。
进一步的,第一VxWorks任务的VxWorks任务优先级采用第一VxWorks任务的优先级值表示,第一VxWorks任务的优先级值的取值范围为[0,255],第一VxWorks任务的优先级值越小,第一VxWorks任务的优先级越高;第一Linux任务的Linux任务优先级采用第一Linux任务的优先级值表示,第一Linux任务的优先级值的取值范围为[0,99],第一Linux任务的优先级值越大,第一Linux任务的优先级越高。第二VxWorks任务的VxWorks任务优先级与第一VxWorks任务的VxWorks任务优先级的表示方法相同,第二Linux任务的Linux任务优先级与第一Linux任务的Linux任务优先级的表示方法相同。
示例性的,假设第一VxWorks任务的优先级值为0,第二VxWorks任务的优先级值为10,则第一VxWorks任务的优先级高于第二VxWorks任务的优先级;相应的,需要保证第一Linux任务的优先级高于第二Linux任务的优先级,可以将第一Linux任务的优先级值设为99,将第二Linux任务的优先级值设为98。本发明实施例对第一Linux任务的优先级值的具体内容和第二Linux任务的优先级值的具体内容不做限定,只需保证第一Linux任务的优先级值大于第二Linux任务的优先级值即可。
进一步的,S101中的VxWorks任务的函数接口包括:VxWorks任务的任务创建函数接口taskSpawn()。S101中的以Linux内核模块的代码形式,将VxWorks任务的函数接口转换到Linux内核提供的函数接口,包括:以Linux内核模块的代码形式,将VxWorks任务的任务创建函数接口taskSpawn()转换到Linux内核提供的创建线程函数接口kthread_create()。
进一步的,S101中的VxWorks任务的函数接口还包括:VxWorks任务的任务挂起函数接口taskSuspend()和VxWorks任务的任务恢复函数接口taskResume()。S101中的以Linux内核模块的代码形式,将VxWorks任务的函数接口转换到Linux内核提供的函数接口,还包括:
以Linux内核模块的代码形式,控制Linux内核提供的创建线程函数接口kthread_create()调用信号允许函数allow_signal(),以使得Linux内核提供的创建线程函数接口kthread_create()允许接收停止信号SIGSTOP和恢复信号SIGCONT。
其中,停止信号SIGSTOP用于指示正在运行的模拟VxWorks任务的Linux任务由运行状态切换至挂起状态,恢复信号SIGCONT用于指示处于挂起状态的模拟VxWorks任务的Linux任务由挂起状态切换至运行状态。
具体的,若A任务要挂起B任务,则A任务对应的Linux内核实时线程调用信号发送函数force_sig()向B任务对应的Linux内核实时线程发送停止信号SIGSTOP。
在任务调度过程中,在任务切换之前,首先检查调度的上一个任务是否为模拟VxWorks任务的Linux任务(具体的,可以通过检查调度的上一个任务的Linux任务结构体中的标志位是否为1,来确定调度的上一个任务是否为模拟VxWorks任务的Linux任务),若调度的上一个任务为模拟VxWorks任务的Linux任务,则检查调度的上一个任务对应的Linux内核实时线程是否收到停止信号SIGSTOP,若调度的上一个任务对应的Linux内核实时线程收到停止信号SIGSTOP,则将该任务设置为挂起状态;在任务切换之后,首先检查调度的下一个任务是否为模拟VxWorks任务的Linux任务,若调度的下一个任务为模拟VxWorks任务的Linux任务,则检查调度的下一个任务对应的Linux内核实时线程是否收到停止信号SIGSTOP,若调度的下一个任务对应的Linux内核实时线程收到停止信号SIGSTOP,则将该任务设置为挂起状态。在执行完上述步骤之后,再进行任务切换。
对应的,若A任务要恢复B任务,则A任务对应的Linux内核实时线程调用信号发送函数force_sig()向B任务对应的Linux内核实时线程发送恢复信号SIGCONT。
在任务调度过程中,在任务切换之前,首先检查调度的上一个任务是否为模拟VxWorks任务的Linux任务(具体的,可以通过检查调度的上一个任务的Linux任务结构体中的标志位是否为1,来确定调度的上一个任务是否为模拟VxWorks任务的Linux任务),若调度的上一个任务为模拟VxWorks任务的Linux任务,则检查调度的上一个任务对应的Linux内核实时线程是否收到停止信号SIGSTOP,若调度的上一个任务对应的Linux内核实时线程收到停止信号SIGSTOP,再检查调度的上一个任务对应的Linux内核实时线程是否收到恢复信号SIGCONT,若调度的上一个任务对应的Linux内核实时线程收到恢复信号SIGCONT,则将该任务由挂起状态切换至运行状态;在任务切换之后,首先检查调度的下一个任务是否为模拟VxWorks任务的Linux任务,若调度的上一个任务为模拟VxWorks任务的Linux任务,则检查调度的上一个任务对应的Linux内核实时线程是否收到停止信号SIGSTOP,若调度的下一个任务对应的Linux内核实时线程收到停止信号SIGSTOP,再检查调度的下一个任务对应的Linux内核实时线程是否收到恢复信号SIGCONT,若调度的下一个任务对应的Linux内核实时线程收到恢复信号SIGCONT,则将该任务由挂起状态切换至运行状态。在执行完上述步骤之后,再进行任务切换。
进一步的,由于Linux内核不支持一个任务直接删除另一个任务,只支持任务的主动退出,因此,本发明实施例中需要对VxWorks任务的任务删除函数接口taskDelete()的代码进行修改,可以将原有代码修改为一个任务向另一个任务发送指示退出的消息。例如,A任务需要删除B任务时,A任务对应的Linux内核实时线程向B任务对应的Linux内核实时线程指示退出的消息,当B任务对应的Linux内核实时线程检测到已收到指示退出的消息时,B任务主动退出。
本发明实施例还提供一种将VxWorks任务移植到Linux的装置,用于执行如图1所示的将VxWorks任务移植到Linux的方法,如图2所示,该装置包括:接口转换模块21、结构体定义模块22、结构体创建模块23和初始化模块24。
接口转换模块21,用于以Linux内核模块的代码形式,将VxWorks任务的函数接口转换到Linux内核提供的函数接口。
结构体定义模块22,用于定义VxWorks任务结构体,并将指向VxWorks任务结构体的指针作为Linux任务结构体的一个成员变量,添加至Linux任务结构体。
结构体创建模块23,用于以Linux内核实时线程的方式创建模拟VxWorks任务的Linux任务的Linux任务结构体。
初始化模块24,用于初始化模拟VxWorks任务的Linux任务的Linux任务结构体的成员变量。
进一步的,Linux任务结构体的成员变量还包含Linux任务ID、Linux任务名、Linux任务优先级和Linux任务入口函数,VxWorks任务结构体的成员变量包含VxWorks任务标识ID、VxWorks任务名、VxWorks任务优先级和VxWorks任务入口函数。
可选的,Linux任务ID与VxWorks任务ID独立编号;Linux任务结构体的成员变量还包含标志位,在初始化后,标志位指示Linux任务为用于模拟VxWorks任务的Linux任务,或者,标志位指示Linux任务为Linux操作系统上的实时任务。
进一步的,模拟VxWorks任务的Linux任务的优先级高低与VxWorks任务的优先级高低相对应。
VxWorks任务的优先级值的取值范围为[0,255],VxWorks任务的优先级值越小,VxWorks任务的优先级越高。
模拟VxWorks任务的Linux任务的优先级的取值范围为[0,99],模拟VxWorks任务的Linux任务的优先级值越大,模拟VxWorks任务的Linux任务的优先级越高。
进一步的,VxWorks任务的函数接口包括:VxWorks任务的任务创建函数接口、VxWorks任务的任务挂起函数接口和VxWorks任务的任务恢复函数接口。
接口转换模块21,具体用于:
以Linux内核模块的代码形式,将VxWorks任务的任务创建函数接口转换到Linux内核提供的创建线程函数接口。
以Linux内核模块的代码形式,控制Linux内核提供的创建线程函数接口调用信号允许函数,以使得Linux内核提供的创建线程函数接口允许接收停止信号和恢复信号。
其中,停止信号用于指示正在运行的模拟VxWorks任务的Linux任务由运行状态切换至挂起状态,恢复信号用于指示处于挂起状态的模拟VxWorks任务的Linux任务由挂起状态切换至运行状态。
需要说明的是,本发明实施例提供的将VxWorks任务移植到Linux的装置中部分功能模块的具体描述可以参考方法实施例中的对应内容,本实施例这里不再详细赘述。
本发明实施例提供的将VxWorks任务移植到Linux的装置,通过定义VxWorks任务结构体,并将指向VxWorks任务结构体的指针作为Linux任务结构体的一个成员变量,添加至Linux任务结构体,可以将在Linux系统中模拟的VxWorks任务用Linux任务结构体描述。当需要将一个VxWorks任务移植到Linux时,只需以Linux内核实时线程的方式创建模拟该VxWorks任务的Linux任务的Linux任务结构体,并初始化该Linux任务结构体,就可以使模拟该VxWorks任务的Linux任务像Linux系统中原有的Linux任务一样被Linux内核调度,以实现将VxWorks任务移植到Linux上。由于本发明实施例中是以Linux内核模块的代码形式,将VxWorks任务的函数接口转换到Linux内核提供的函数接口,当需要调用VxWorks任务的函数接口以处理VxWorks任务时,从表面看,所调用的VxWorks任务的函数接口并没有改变,但实际上,调用VxWorks任务的函数接口时会转为调用Linux内核提供的函数接口,因此,采用本发明实施例提供的将VxWorks任务移植到Linux的方法,可以将VxWorks任务移植到Linux上,并且不改变处理VxWorks任务时调用的函数接口。
在硬件实现上,本发明实施例提供的将VxWorks任务移植到Linux的装置中的各个模块可以以硬件形式内嵌于或独立于将VxWorks任务移植到Linux的装置中,也可以以软件形式存储于将VxWorks任务移植到Linux的装置中,以便于处理器调用执行以上各个模块对应的操作,该处理器可以为中央处理单元(英文:CentralProcessingUnit,缩写:CPU)、微处理器、单片机等。
本发明实施例还提供另一种将VxWorks任务移植到Linux的装置,用以执行如图1所示的将VxWorks任务移植到Linux的方法,如图3所示,该装置包括:存储器31、处理器32和总线系统33。
其中,存储器31和处理器32之间是通过总线系统33耦合在一起的,其中总线系统33除包括数据总线之外,还可以包括电源总线、控制总线和状态信号总线等。但是为了清楚说明起见,在图3中将各种总线都标为总线系统33。
存储器31,用于存储一组代码。
处理器32,用以执行存储器31存储的代码,并具体用于执行以下操作:以Linux内核模块的代码形式,将VxWorks任务的函数接口转换到Linux内核提供的函数接口;定义VxWorks任务结构体,并将指向VxWorks任务结构体的指针作为Linux任务结构体的一个成员变量,添加至Linux任务结构体;以Linux内核实时线程的方式创建模拟VxWorks任务的Linux任务的Linux任务结构体;初始化模拟VxWorks任务的Linux任务的Linux任务结构体的成员变量。
进一步的,Linux任务结构体的成员变量还包含Linux任务标识ID、Linux任务名、Linux任务优先级和Linux任务入口函数,VxWorks任务结构体的成员变量包含VxWorks任务ID、VxWorks任务名、VxWorks任务优先级和VxWorks任务入口函数。
可选的,Linux任务ID与VxWorks任务ID独立编号;Linux任务结构体的成员变量还包含标志位,在初始化后,标志位指示Linux任务为用于模拟VxWorks任务的Linux任务,或者,标志位指示Linux任务为Linux操作系统上的实时任务。
进一步的,模拟VxWorks任务的Linux任务的优先级高低与VxWorks任务的优先级高低相对应。
VxWorks任务的优先级值的取值范围为[0,255],VxWorks任务的优先级值越小,VxWorks任务的优先级越高。
模拟VxWorks任务的Linux任务的优先级的取值范围为[0,99],模拟VxWorks任务的Linux任务的优先级值越大,模拟VxWorks任务的Linux任务的优先级越高。
进一步的,VxWorks任务的函数接口包括:VxWorks任务的任务创建函数接口、VxWorks任务的任务挂起函数接口和VxWorks任务的任务恢复函数接口。
处理器32,具体用于:以Linux内核模块的代码形式,将VxWorks任务的任务创建函数接口转换到Linux内核提供的创建线程函数接口;以Linux内核模块的代码形式,控制Linux内核提供的创建线程函数接口调用信号允许函数,以使得Linux内核提供的创建线程函数接口允许接收停止信号和恢复信号。
其中,停止信号用于指示正在运行的模拟VxWorks任务的Linux任务由运行状态切换至挂起状态,恢复信号用于指示处于挂起状态的模拟VxWorks任务的Linux任务由挂起状态切换至运行状态。
需要说明的是,本发明实施例提供的将VxWorks任务移植到Linux的装置中部分功能模块的具体描述可以参考方法实施例中的对应内容,本实施例这里不再详细赘述。
本发明实施例提供的将VxWorks任务移植到Linux的装置,通过定义VxWorks任务结构体,并将指向VxWorks任务结构体的指针作为Linux任务结构体的一个成员变量,添加至Linux任务结构体,可以将在Linux系统中模拟的VxWorks任务用Linux任务结构体描述。当需要将一个VxWorks任务移植到Linux时,只需以Linux内核实时线程的方式创建模拟该VxWorks任务的Linux任务的Linux任务结构体,并初始化该Linux任务结构体,就可以使模拟该VxWorks任务的Linux任务像Linux系统中原有的Linux任务一样被Linux内核调度,以实现将VxWorks任务移植到Linux上。由于本发明实施例中是以Linux内核模块的代码形式,将VxWorks任务的函数接口转换到Linux内核提供的函数接口,当需要调用VxWorks任务的函数接口以处理VxWorks任务时,从表面看,所调用的VxWorks任务的函数接口并没有改变,但实际上,调用VxWorks任务的函数接口时会转为调用Linux内核提供的函数接口,因此,采用本发明实施例提供的将VxWorks任务移植到Linux的方法,可以将VxWorks任务移植到Linux上,并且不改变处理VxWorks任务时调用的函数接口。
通过以上的实施方式的描述,所属领域的技术人员可以清楚地了解到,为描述的方便和简洁,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。上述描述的系统,装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述模块或单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分或者该技术方案的全部或部分可以以软件产品的形式体现出来,该计算机软件产品存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)或处理器(processor)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM,Read-OnlyMemory)、随机存取存储器(RAM,RandomAccessMemory)、磁碟或者光盘等各种可以存储程序代码的介质。
以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明揭露的技术范围内,可轻易想到变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应以所述权利要求的保护范围为准。
Claims (10)
1.一种将VxWorks任务移植到Linux的方法,其特征在于,包括:
以Linux内核模块的代码形式,将VxWorks任务的函数接口转换到Linux内核提供的函数接口;
定义VxWorks任务结构体,并将指向所述VxWorks任务结构体的指针作为Linux任务结构体的一个成员变量,添加至所述Linux任务结构体;
以Linux内核实时线程的方式创建模拟VxWorks任务的Linux任务的Linux任务结构体;
初始化所述模拟VxWorks任务的Linux任务的Linux任务结构体的成员变量。
2.根据权利要求1所述的方法,其特征在于,所述Linux任务结构体的成员变量还包含Linux任务ID、Linux任务名、Linux任务优先级和Linux任务入口函数,所述VxWorks任务结构体的成员变量包含VxWorks任务ID、VxWorks任务名、VxWorks任务优先级和VxWorks任务入口函数;
所述Linux任务ID与所述VxWorks任务ID独立编号;
所述Linux任务结构体的成员变量还包含标志位,在初始化后,所述标志位指示所述Linux任务为用于模拟VxWorks任务的Linux任务,或者,所述标志位指示所述Linux任务为Linux操作系统上的实时任务。
3.根据权利要求1所述的方法,其特征在于,所述模拟VxWorks任务的Linux任务的优先级高低与所述VxWorks任务的优先级高低相对应。
4.根据权利要求3所述的方法,其特征在于,所述VxWorks任务的优先级值的取值范围为[0,255],所述VxWorks任务的优先级值越小,所述VxWorks任务的优先级越高;
所述模拟VxWorks任务的Linux任务的优先级的取值范围为[0,99],所述模拟VxWorks任务的Linux任务的优先级值越大,所述模拟VxWorks任务的Linux任务的优先级越高。
5.根据权利要求1所述的方法,其特征在于,所述VxWorks任务的函数接口包括:所述VxWorks任务的任务创建函数接口;
所述以Linux内核模块的代码形式,将VxWorks任务的函数接口转换到Linux内核提供的函数接口,包括:
以所述Linux内核模块的代码形式,将所述VxWorks任务的任务创建函数接口转换到所述Linux内核提供的创建线程函数接口。
6.根据权利要求5所述的方法,其特征在于,所述VxWorks任务的函数接口还包括:所述VxWorks任务的任务挂起函数接口和所述VxWorks任务的任务恢复函数接口;
所述以Linux内核模块的代码形式,将VxWorks任务的函数接口转换到Linux内核提供的函数接口,还包括:
以所述Linux内核模块的代码形式,控制所述Linux内核提供的创建线程函数接口调用信号允许函数,以使得所述Linux内核提供的创建线程函数接口允许接收停止信号和恢复信号;
其中,所述停止信号用于指示正在运行的模拟VxWorks任务的Linux任务由运行状态切换至挂起状态,所述恢复信号用于指示处于所述挂起状态的模拟VxWorks任务的Linux任务由所述挂起状态切换至所述运行状态。
7.一种将VxWorks任务移植到Linux的装置,其特征在于,包括:
接口转换模块,用于以Linux内核模块的代码形式,将VxWorks任务的函数接口转换到Linux内核提供的函数接口;
结构体定义模块,用于定义VxWorks任务结构体,并将指向所述VxWorks任务结构体的指针作为Linux任务结构体的一个成员变量,添加至所述Linux任务结构体;
结构体创建模块,用于以Linux内核实时线程的方式创建模拟VxWorks任务的Linux任务的Linux任务结构体;
初始化模块,用于初始化所述模拟VxWorks任务的Linux任务的Linux任务结构体的成员变量。
8.根据权利要求7所述的装置,其特征在于,所述Linux任务结构体的成员变量还包含Linux任务ID、Linux任务名、Linux任务优先级和Linux任务入口函数,所述VxWorks任务结构体的成员变量包含VxWorks任务标识ID、VxWorks任务名、VxWorks任务优先级和VxWorks任务入口函数;
所述Linux任务ID与所述VxWorks任务ID独立编号;
所述Linux任务结构体的成员变量还包含标志位,在初始化后,所述标志位指示所述Linux任务为用于模拟VxWorks任务的Linux任务,或者,所述标志位指示所述Linux任务为Linux操作系统上的实时任务。
9.根据权利要求7所述的装置,其特征在于,所述模拟VxWorks任务的Linux任务的优先级高低与所述VxWorks任务的优先级高低相对应;
所述VxWorks任务的优先级值的取值范围为[0,255],所述VxWorks任务的优先级值越小,所述VxWorks任务的优先级越高;
所述模拟VxWorks任务的Linux任务的优先级的取值范围为[0,99],所述模拟VxWorks任务的Linux任务的优先级值越大,所述模拟VxWorks任务的Linux任务的优先级越高。
10.根据权利要求7所述的装置,其特征在于,所述VxWorks任务的函数接口包括:所述VxWorks任务的任务创建函数接口、所述VxWorks任务的任务挂起函数接口和所述VxWorks任务的任务恢复函数接口;
所述接口转换模块,具体用于:
以所述Linux内核模块的代码形式,将所述VxWorks任务的任务创建函数接口转换到所述Linux内核提供的创建线程函数接口;
以所述Linux内核模块的代码形式,控制所述Linux内核提供的创建线程函数接口调用信号允许函数,以使得所述Linux内核提供的创建线程函数接口允许接收停止信号和恢复信号;
其中,所述停止信号用于指示正在运行的模拟VxWorks任务的Linux任务由运行状态切换至挂起状态,所述恢复信号用于指示处于所述挂起状态的模拟VxWorks任务的Linux任务由所述挂起状态切换至所述运行状态。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410811377.5A CN105786457B (zh) | 2014-12-22 | 2014-12-22 | 将VxWorks任务移植到Linux的方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410811377.5A CN105786457B (zh) | 2014-12-22 | 2014-12-22 | 将VxWorks任务移植到Linux的方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105786457A true CN105786457A (zh) | 2016-07-20 |
CN105786457B CN105786457B (zh) | 2018-10-12 |
Family
ID=56377157
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410811377.5A Active CN105786457B (zh) | 2014-12-22 | 2014-12-22 | 将VxWorks任务移植到Linux的方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105786457B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110471705A (zh) * | 2019-07-15 | 2019-11-19 | 江苏泛腾电子科技有限公司 | 一种定制双系统 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101894045A (zh) * | 2010-06-18 | 2010-11-24 | 阳坚 | 一种实时Linux操作系统 |
CN102135908A (zh) * | 2010-01-25 | 2011-07-27 | 研祥智能科技股份有限公司 | 一种操作系统的切换方法、装置和计算机系统 |
US20120060023A1 (en) * | 2010-09-06 | 2012-03-08 | Samsung Electronics Co., Ltd. | Methods for booting an operating system using non-volatile memory |
-
2014
- 2014-12-22 CN CN201410811377.5A patent/CN105786457B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102135908A (zh) * | 2010-01-25 | 2011-07-27 | 研祥智能科技股份有限公司 | 一种操作系统的切换方法、装置和计算机系统 |
CN101894045A (zh) * | 2010-06-18 | 2010-11-24 | 阳坚 | 一种实时Linux操作系统 |
US20120060023A1 (en) * | 2010-09-06 | 2012-03-08 | Samsung Electronics Co., Ltd. | Methods for booting an operating system using non-volatile memory |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN110471705A (zh) * | 2019-07-15 | 2019-11-19 | 江苏泛腾电子科技有限公司 | 一种定制双系统 |
Also Published As
Publication number | Publication date |
---|---|
CN105786457B (zh) | 2018-10-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
KR20090005078A (ko) | 스마트카드 임베디드 조작 시스템 및 작업처리 방법 | |
CN104484220A (zh) | 虚拟化集群的动态资源调度的方法及装置 | |
CN102316043B (zh) | 端口虚拟化方法、交换机及通信系统 | |
CN104111867B (zh) | 一种虚拟机迁移装置及方法 | |
CN106547592A (zh) | 一种实现新型云服务器电源软件在线更新的设计方法 | |
CN101794270A (zh) | 用于基于资源角度选择冗余控制器的方法和系统 | |
CN103609077A (zh) | 用于数据传输的方法、装置和系统以及物理网卡 | |
CN103414767A (zh) | 将应用软件部署在云计算平台上的方法和装置 | |
CN103902364A (zh) | 一种物理资源管理方法、装置及智能终端设备 | |
CN103559124A (zh) | 故障快速检测方法及装置 | |
CN105591778A (zh) | 一种分布式系统更新配置文件的方法及系统 | |
CN102799465A (zh) | 分布式虚拟化系统的虚拟中断管理方法及装置 | |
CN103455363A (zh) | 一种虚拟机的指令处理方法、装置及物理主机 | |
CN104572279A (zh) | 一种支持节点绑定的虚拟机动态调度方法 | |
CN102096606A (zh) | 虚拟机迁移方法、装置和系统 | |
CN103530254A (zh) | 多节点系统的外部设备互联枚举方法和装置 | |
CN103885804A (zh) | 一种fpga多功能项动态加载系统及其方法 | |
CN102427468B (zh) | 一种云计算操作系统及其调度方法 | |
CN103986665A (zh) | 云海os中网络负载均衡的方法 | |
CN104391736A (zh) | 虚拟机的休眠模式设置方法和装置 | |
CN103713953A (zh) | 一种内存数据的搬移装置及方法 | |
CN104572275A (zh) | 一种进程加载方法、装置及系统 | |
CN105159784A (zh) | 一种虚拟服务器的部署方法及系统 | |
CN102622274A (zh) | 计算机装置及其中断任务分配方法 | |
CN105786457A (zh) | 将VxWorks任务移植到Linux的方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |