一种创建基于多映像的多功能嵌入式系统的方法与流程

文档序号:17719543发布日期:2019-05-22 02:03阅读:167来源:国知局
一种创建基于多映像的多功能嵌入式系统的方法与流程

本发明属于物联网与嵌入式系统领域技术领域,尤其涉及一种创建基于多映像的多功能嵌入式系统的方法。



背景技术:

目前,嵌入式系统的功能越来越多样化,应用模块化加载的需求变得越来越普遍,对安全性和可靠性的要求也与日俱增。当前现有的的多功能嵌入式系统不能满足嵌入式系统模块化加载的需求且不能保障整个系统的安全性和可靠性。

目前,传统的现有的多功能嵌入式系统存在如下一些缺陷:

(1)缺乏内核态和用户态的隔离,操作系统和应用程序运行在同一个地址空间,一旦应用程序崩溃,操作系统的数据也有被破坏的可能。

(2)各个应用程序之间缺乏隔离,一旦其中一个应用程序发生故障,整个系统的可靠性均会被破坏。

(3)应用程序的信息安全性较差,一旦任何一个组件被攻破,都有可能导致整个系统的数据泄漏。

(4)应用程序部署繁琐,在传统嵌入式系统中,需要将整个系统编译成单独的一个映像,这损害了系统部署的灵活性并且加重了用户的映像组装负担。

(5)应用程序内存组织繁琐,在少部分支持内核态用户态以及应用间地址空间隔离的应用程序中,需要系统设计者明确指定每一个应用程序的各个保护域设置,由于每种硬件的支持的保护域数量以及限制都不一样,当应用所使用的保护域数量大于硬件所能提供的保护域时,为了缩减保护域数量,则需要手动调整应用程序的内存布局来合并一些保护域。

(6)难以进行动态内存分配,一旦进行动态内存分配,就有可能需要新的保护域,当硬件能够提供的保护域被用尽,新的内存就无法被应用程序访问。

(7)系统中可能具备多种具备不同具备访问延迟或带宽或持久性属性的内存,现有操作系统的接口难以指定分配的内存的属性,比如一个嵌入式系统可能同时具备sram,dram和fram的三种属性的内存,而应用程序希望指定分配其中一种存储器上的存储空间。



技术实现要素:

本发明的目的在于提供一种能够克服上述技术问题的创建基于多映像的多功能嵌入式系统的方法,本发明所述方法包括以下步骤:

步骤1、创建一个操作系统模块映像,并烧写入系统存储器内,或者放在网络上的某个服务器内;所述操作系统模块映像sys_image包括但不限于引导文件、基本bsp、操作系统内核的二进制映像和设备树,存放操作系统模块映像的存储介质是连续的也能够是不连续的。

步骤2、创建一个或多个应用程序模块映像,并烧写入系统存储器内,或者放在网络上的某个服务器内,所述应用程序模块映像app_image包括但不限于应用程序二进制映像本身和应用程序的内存要求描述符app_mem_desc,存储应用程序模块映像的存储介质是连续的也能够是不连续的。

步骤3、在系统初始化阶段,先从系统存储器或者网络加载操作系统模块映像,并将操作系统模块映像做初始化,并且将系统设置到启动阶段。

步骤4、在系统启动阶段,操作系统模块映像从系统存储器或者网络加载各个应用程序模块映像,并分析app_mem_desc,加载一个应用程序模块映像的sys_load_app包括以下步骤:

步骤4.1、解析应用程序模块映像的app_mem_desc,分析其各段内存的加载虚拟地址、实际物理地址和读写执行权限属性,以及内存访问实时性属性,内存访问的实时性属性有两种,一种是需要实时访问,以下称实时内存段,一种是不需要实时访问,以下称非实时内存段;

步骤4.2、在操作系统模块映像中建立对应app_mem_desc的内存空间数据结构app_mem_trie,通过所述数据结构记录所述应用程序模块映像的当前地址空间分布;

步骤4.3、根据app_mem_trie生成对应于所述应用程序模块映像的、填充内存保护单元(memoryprotectionunit)或基于基址-长度的内存管理单元(memorymanagementunit)的硬件寄存器的、存储在所述应用程序模块映像的管理数据结构app_mgmt内的地址空间缓存app_mem_cache,当应用程序模块映像的内存段数超过硬件支持的槽位数,按照sys_mem_choose流程判定哪些内存段被加入app_mem_cache中;

步骤4.4、加载应用程序模块映像的数据段和代码段,完成其他相关初始化;

上述步骤4.3中的sys_mem_choose包括以下步骤:

步骤4.3.1、在app_mem_desc中找出所有实时内存段,并优先为其分配app_mem_cache的槽位;

步骤4.3.2、当app_mem_cache的槽位数量小于需要app_mem_desc中实时内存段的数量,操作系统应当使用app_mem_cache所有的槽位满足实时内存段;

步骤4.3.3、当app_mem_cache的槽位在为实时内存段分配之后还有剩余,将剩下的各个槽位分配给非实时内存段。

步骤5、在完成应用程序模块映像的加载后,操作系统即转入后台,并按照设定的调度算法调度各个应用程序,在运行中也能够动态加载更多应用程序,仍按照sys_load_app过程执行。

步骤6、应用程序模块映像在运行中调用接口向操作系统请求更多内存(sys_mem_add),要求与某个其他应用程序模块映像共享内存(sys_mem_shared_add),释放内存(sys_mem_rem),或者取消与某个应用程序模块映像共享内存(sys_mem_shared_rem);

其中,sys_mem_shared_add相当于两个或多个应用程序模块映像同时调用sys_mem_add,并由操作系统分配相同的物理地址进行映射,sys_mem_shared_rem则相当于两个或多个应用程序模块映像同时调用sys_mem_rem,并由操作系统解除相应的物理内存的映射;

步骤6.1、sys_mem_add操作的流程包括以下步骤:

步骤6.1.1、操作系统模块映像寻找一块大小和属性匹配的物理内存准备进行映射;

步骤6.1.2、在应用程序模块映像指定物理内存的情况下,操作系统检查地址的合法性,当通过则按照步骤6.1.3进行,不通过则报错;

步骤6.1.3、修改app_mem_trie的内容,将所述物理内存段所对应的描述符添加到数据结构内部以反映应用程序模块映像地址空间的改变;

步骤6.2、sys_mem_rem操作的流程包括以下步骤:

步骤6.2.1、根据应用程序模块映像提供的地址,操作系统模块映像在app_mem_trie中找到需要移除的物理内存段;

步骤6.2.2、当能够找到所述地址则按照步骤6.2.3进行,不通过则报错;

步骤6.2.3、修改app_mem_trie的内容以反映这一改变;

步骤6.2.4、在app_mem_cache中寻找对应这一区域的槽位,找到则清空;

步骤6.2.5、当前运行的是所述应用程序模块映像,则在硬件寄存器中也需要清空所述物理内存段对应的缓存条目,即将app_mem_cache重新装入硬件寄存器;

操作系统模块映像能够进行应用程序模块切换。当操作系统模块映像切换应用程序模块映像时,需要切换执行环境的上下文,并将即将切换到的应用程序模块映像对应的app_mem_cache装入硬件寄存器中。

步骤7、内存段替换更新;对于某些内存段数较多的应用程序模块,app_mem_cache不能在同一时刻包含其所有内存段,当应用程序访问到那些潜在的未被包含内存段时,硬件会产生一个内存访问错误异常。操作系统模块应当按照sys_mem_fault流程处理此内存访问错误异常:具体包括以下步骤:

步骤7.1、从硬件相关寄存器hw_mmfar中读取错误发生的内存地址,并从hw_mcause中读取所述内存访问错误发生的原因;

步骤7.2、在当前应用程序模块映像对应的app_mem_trie中寻找对应于所述地址的描述,当找不到描述符或描述符不包含错误原因中指示的访问类型,则按照真正的权限错误处理,在实际应用中的处理方法是终止此应用;当找到相关条目则继续按步骤7.3处理;

步骤7.3、将与所述错误发生的内存地址相对应的缓存条目加入当前应用程序对应的app_mem_cache。在app_mem_cache中有空余位置的前提下,加入app_mem_cache的空余位置;在app_mem_cache填满的前提下,按照替换算法,优先替换app_mem_cache中的非实时内存段;

步骤7.4、将更新过后的app_mem_cache装入硬件寄存器内。

本发明相对于传统的现有的多功能嵌入式系统的优越效果是:

(1)本发明的操作系统模块和应用程序模块是分立的,方便进行单独编译,也方便进行系统的差分升级,也即只升级系统中的一部分模块,增加了系统的灵活性。

(2)本发明允许使用在单片机的小型嵌入式硬件上常见的内存保护单元和基址-长度式内存管理单元,这些硬件单元能够提供对应用程序的完全硬件内存保护,防止未授权的访问,增加了系统的安全性。

(3)本发明允许应用程序模块的内存段数超过硬件直接支持的内存段数,当应用程序的内存布局较为复杂,将将一部分内存段的描述符装入硬件寄存器中加以保护,而另一部分内存段则按需在访问时替换已有槽位,从而变相扩增硬件寄存器的数量,增加了应用程序模块在不同硬件间的通用性。

(4)本发明使用app_mem_trie数据结构存储内存布局,在节省存储内存的同时允许确定性最坏执行时间的查询和修改,增加了系统的可预测性和实时性。

(5)本发明使用的app_mem_cache数据结构提供了一个硬件寄存器内容的影子副本即缓存,在切换应用程序模块时直接装入硬件寄存器。与直接使用硬件寄存器作为缓存相比,最大限度地减少了对app_mem_trie的查询,增加了系统的可预测性和实时性。

(6)本发明提供的sys_mem_fault流程在灵活调度硬件寄存器的同时最大化地阻止了实时内存段被换出,最大限度地确保实时内存段的访问不会产生访存异常,保证了系统的可预测性和实时性,具有较强的实用价值和现实意义。

(7)本发明将所有属性的内存使用一个抽象的接口统一管理,允许应用程序映射不同属性的内存到其能访问的地址空间范围内,并且在映射和访问的过程中进行广泛的权限检查,增加了系统的安全性和灵活性。

附图说明

图1是本发明所述方法的嵌入式系统工作流程示意图;

图2是本发明所述方法的操作系统模块映像sys_image说明示意图;

图3是本发明所述方法的应用程序模块映像app_image说明示意图;

图4是本发明所述方法的应用程序模块管理数据结构app_mgmt的一种具体结构示意图;

图5是本发明所述方法的应用程序模块内存描述符app_mem_desc的一种具体结构示意图;

图6是本发明所述方法的内存空间数据结构app_mem_trie的一种具体结构示意图;

图7是本发明所述方法的地址空间缓存app_mem_cache的一种具体结构示意图;

图8是本发明所述方法的内存选择流程sys_mem_choose的流程示意图;

图9是本发明所述方法的内存增加流程sys_mem_add的流程示意图;

图10是本发明所述方法的内存减少流程sys_mem_rem的流程示意图;

图11是本发明所述方法的访存异常处理流程sys_mem_fault的流程示意图;

图12是本发明所述方法涉及的硬件访存错误地址寄存器hw_mmfar的一种具体结构示意图;

图13是本发明所述方法涉及的硬件访存错误原因寄存器hw_mcause的一种具体结构示意;

图14a是本发明所述方法的实施例1的嵌入式系统示意图;

图14b是本发明所述方法的实施例1的执行流程示意图;

图15a是本发明所述方法的实施例2的嵌入式系统示意图;

图15b是本发明所述方法的实施例2的执行流程示意图;

图16a是本发明所述方法的实施例3的嵌入式系统初始内存布局示意图;

图16b是本发明所述方法的实施例3的嵌入式系统一次内存分配后内存布局示意图;

图16c是本发明所述方法的实施例3的嵌入式系统二次内存分配后内存布局示意图;

图16d是本发明所述方法的实施例3的嵌入式系统三次内存分配后内存布局示意图;

图16e是本发明所述方法的实施例3的执行流程示意图。

具体实施方式

下面结合附图对本发明的实施方式进行详细描述。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其它实施例,都属于本发明保护的范围,需用说明的是,本说明书中的“或”仅是一种表示逻辑关联的连接词,表示存在三种关系,比如,“a或b”表示单独存在a,单独存在b,以及a和b同时存在三种状况。

在实际应用中,一个嵌入式系统的硬件包括cpu、存储器和各种外设,其中软件部分又能够包含操作系统模块和应用程序模块。

操作系统模块映像在上电后优先加载,并会通过网络或存储器依次加载应用程序模块映像,应用程序模块映像又分为三类,第一类是驱动程序模块,用于驱动各种硬件外设;第二类是服务程序模块,用于为其他应用程序模块映像提供服务;第三类是实用程序模块,用于运行实现系统整体功能的其他部分。

每一个应用程序模块映像都会对操作系统提出一系列内存请求,这些内存请求包括了对私有内存或共享内存的访问权限,私有内存指只能被一个应用程序模块映像所访问的内存,共享内存指能够被多个应用程序模块映像所访问的内存。

操作系统负责使用有限的硬件保护域满足单个应用程序模块映像的内存保护请求,在选择填充入硬件保护域内的区域时则考虑所述内存段是否需要被实时访问。

操作系统还能够按照一定的调度策略进行应用程序调度,在调度时也要替换硬件保护域的内容为当前应用程序的保护域内容。

下面结合附图对本发明所述方法的优选实施方法进行详细说明。

实施例1;见图14a和图14b所示:

参阅图1,图2和图3所示,本嵌入式系统100包含一个操作系统模块映像110和两个应用程序模块映像120和130,并且均储存于系统存储器140内部。

本嵌入式系统100使用内存保护单元150执行硬件内存保护,所述内存保护单元具备2个保护区域寄存器组151和152。

参阅图5所示,应用程序模块120包括2个非实时内存段121和122,应用程序模块130包括1个实时内存段131及2个非实时内存段132和133。

步骤500:嵌入式系统启动并从系统存储器140中读取操作系统模块映像110,在内存中形成操作系统模块160,并跳转到其入口点开始执行;

步骤510:操作系统模块160从系统存储器140内部读取应用程序模块映像120;

步骤520:操作系统模块160将应用程序模块映像120载入内存,在内存中形成应用程序模块170;

步骤530:操作系统模块160扫描应用程序模块映像120文件头中的app_mem_desc段,发现其具备2个非实时内存段121和122,并参照图4在系统中建立应用程序模块170的描述符171,171中包含图7所示的缓存172和图6所示的内存空间数据结构173;

步骤540:操作系统模块160将内存段121和122的描述加入内存空间数据结构173,并根据数据结构173和图8所示的sys_mem_choose流程生成对应的缓存172。由于应用程序模块170仅具备两个内存段,经过图8所示的流程后,缓存172中能够同时放置两个内存段的描述符;

步骤550:操作系统模块160从系统存储器140内部读取应用程序映像130;

步骤560:操作系统模块160将应用程序模块映像130载入内存,在内存中形成应用程序模块180;

步骤570:操作系统模块160应用程序模块映像130文件头中的app_mem_desc段,发现其具备1个实时内存段131及2个非实时内存段132和133,并参照图4在系统中建立应用程序模块180的描述符181,描述符181中包含图7所示的缓存182和图6所示的内存空间数据结构183;

步骤580:操作系统模块160将实时内存段131和非实时内存段132的描述加入内存空间数据结构183,并根据数据结构183和图8所示的sys_mem_choose流程生成对应的缓存182。由于应用程序模块180具备三个内存段,而缓存182中仅能够同时放置两个内存段的描述符,经过图8所示的流程后我们选择实时内存段131和非实时内存段132,非实时内存段133则暂不加入;

步骤590:操作系统模块160将缓存172中的内容装入内存保护单元150,具体操作为将内存段121的描述符装入保护区域寄存器组151,将内存段122的描述符装入保护区域寄存器组152。跳转到应用程序模块170的入口点开始执行;

步骤600:操作系统模块160切换到应用程序模块180,并将缓存182中的内容装入内存保护单元150,具体操作为将内存段131的描述符装入保护区域寄存器组151,将内存段132的描述符装入保护区域寄存器组152。跳转到应用程序模块180的入口点开始执行;

步骤610:在应用程序模块180的运行过程中,访问到了非实时内存段133,并且产生了一个访存异常,参见图11,操作系统模块160读取图12所示的寄存器hw_mmfar以得到访存异常的地址,然后读取图13所示的hw_mcause确认所述访存异常的类型,并使用图11所示的流程sys_mem_fault选择了非实时内存段132被替换,更新缓存182的内容,在其中添加非实时内存段133的描述符而去除非实时内存段132的描述符,并将缓存182中的内容重新装入内存保护单元150,允许对非实时内存段133的访问;

在本实施例中,内存保护单元150只提供了两组寄存器,对于任何一个应用程序,都只能允许其同时访问两个内存段,本发明创造性地设计了sys_mem_fault处理流程,在产生内存访问错误时,及时用实际上允许所述应用程序访问的、发生了错误的内存段的描述符替换掉app_mem_cache内的已有非实时内存的描述符,并写入硬件寄存器内。

这一流程变相地增加了硬件寄存器的段数,增加了应用程序内存布局的灵活性。

上述流程的顺序不是绝对的,当两个步骤之间没有互相依赖,允许以任意互相调换顺序。

实施例2;见图15a和图15b所示:

参阅图1,图2和图3所示,本嵌入式系统200不包含任何映像,其系统存储器210内部为空或仅有基本文件系统220。

在本嵌入式系统200的主板上具有一个网络端口230,能够通过网络端口230下载映像。

使用基于基址-长度的内存管理单元240执行硬件内存保护,所述内存管理单元240具备4个保护区域寄存器组241-244。

参阅图5所示,应用程序模块250包括4个非实时内存段251-254,应用程序模块260包括2个实时内存段261和262及2个非实时内存段263和264。

步骤700:嵌入式系统启动并通过网络端口230读取操作系统模块映像270,在内存中形成操作系统模块280,并跳转到其入口点开始执行;

步骤710:操作系统模块280从网络端口230读取应用程序模块映像250;

步骤720:操作系统模块280将应用程序模块映像250载入内存,在内存中形成应用程序模块290;

步骤730:操作系统模块280扫描应用程序模块映像250文件头中的app_mem_desc段,发现其具备4个非实时内存段251-254,并参照图4在系统中建立应用程序模块290的描述符291,291中包含图7所示的缓存292和图6所示的内存空间数据结构293;

步骤740:操作系统模块280将内存段251-254的描述加入内存空间数据结构293,并根据数据结构293和图8所示的sys_mem_choose流程生成对应的缓存292,并将所有的描述符均装入缓存302中;

步骤750:操作系统模块280通过网络端口230读取应用程序映像260;

步骤760:操作系统模块280将应用程序模块映像260载入内存,在内存中形成应用程序模块300;

步骤770:操作系统模块280将应用程序模块映像260文件头中的app_mem_desc段,发现其具备2个实时内存段261和262及2个非实时内存段263和264,并参照图4在系统中建立应用程序模块300的描述符301,描述符301中包含图7所示的缓存302和图6所示的内存空间数据结构303;

步骤780:操作系统模块280将实时内存段261和262及非实时内存段263和264的描述加入内存空间数据结构303,并根据数据结构303和图8所示的sys_mem_choose流程生成对应的缓存302,并将所有的描述符均装入缓存302中;

步骤790:操作系统模块280将缓存292中的内容装入内存管理单元240,跳转到应用程序模块290的入口点开始执行;

步骤800:应用程序模块290在执行中调用sys_mem_shared_add,请求增加一个共享实时内存段310,要求能在自己290和应用程序模块300之间共享,操作系统模块280响应所述请求;

步骤810:操作系统模块280检查共享实时内存段310的权限,发现通过,将实时内存段310映射到应用程序模块290和300的空间,也即将共享实时内存段310加入数据结构293和303;

在接下来的执行过程中,一旦应用程序模块290或300访问了共享实时内存段310,就会产生一个访存异常,从而读取图12所示的寄存器hw_mmfar以得到访存异常的地址,然后读取图13所示的hw_mcause确认所述访存异常的类型,并通过图11所示的流程sys_mem_fault将所述内存段310加入到自身的缓存app_mem_cache中,并更新到硬件寄存器中。

由于sys_mem_fault处理流程的设计,使得所述内存段310在之后的访问中永远不会被逐出缓存app_mem_cache,对它的访问不会再产生任何访存异常,保证了访问的实时性。

由以上实施例可知,本发明所述方法能够允许在程序运行时动态增加或删除内存段,若要删除则调用图10所述的sys_mem_rem接口在对应的app_mem_cache和app_mem_trie中移除所述内存段的描述,使应用程序具备了动态申请和释放内存的能力,并且其所有内存段自始至终具备硬件保护,而这是在传统单片机类嵌入式系统上所不能实现的,本发明所述方法极大地提升了应用程序编写的灵活性。

本发明所述方法上述步骤的顺序也不是绝对的,当两个步骤之间没有互相依赖,能够允许两个步骤任意互相调换顺序。

实施例3;见图16a,图16b,图16c,图16d和图16e所示:本嵌入式系统900包含三种系统内存:静态随机存储器910、动态随机存储器920和铁电存储器930。

本嵌入式系统900已经完成了上电加载工作,其静态随机存储器内部具有一个操作系统模块940和一个应用程序模块950,系统的内存布局如图16a所示,在图中不直接相关的系统组件已经省略。

步骤990:应用程序模块950通过调用sys_mem_add接口要求申请一块具备低延迟和高带宽的存储区域;

步骤991:操作系统模块940检查应用程序模块950的权限,确认其具备申请所述内存的能力,并为应用程序模块950分配允许其访问的内存块960,内存块960位于静态随机存储器910内,系统的内存布局如图16b所示;

步骤992:应用程序模块950通过调用图9所示的sys_mem_add接口要求申请一块具备较高延迟、较低带宽的较大的存储区域;

步骤993:操作系统模块940检查应用程序模块950的权限,确认其具备申请所述内存的能力,并为应用程序模块950分配允许其访问的内存块970,内存块970位于静态随机存储器920内,系统的内存布局如图16c所示;

步骤994:应用程序模块950通过调用图9所示的sys_mem_add接口要求申请一块能够在断电之后持久保存的存储区域;

步骤995:操作系统模块940检查应用程序模块950的权限,确认其具备申请所述内存的能力,并为应用程序模块950分配允许其访问的内存块980,内存块980位于静态随机存储器930内,系统的内存布局如图16d所示;

由实施例可见,本发明允许在程序运行时动态分配不同属性的内存段,大大提高了系统中不同种类存储器使用的灵活性和应用程序编写的灵活性,而且图9所示的sys_mem_add接口不直接操作操作系统模块维护的底层数据结构或者嵌入式系统的底层硬件,易于使用。

以上所述,仅为本发明的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉本技术领域的技术人员在本发明公开的范围内,能够轻易想到的变化或替换,都应涵盖在本发明权利要求的保护范围内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1