一种嵌入式操作系统驱动程序动态升级方法技术方案

技术编号:2919903 阅读:264 留言:0更新日期:2012-04-11 18:40
本发明专利技术提供一种嵌入式操作系统驱动程序动态升级方法,包括如下步骤:(1)在核心代码中为每一个驱动程序增设驱动程序入口处任务控制程序,所述任务控制程序设置有一个全局变量driver_upgrading_flag,通过其取值为TRUE或FALSE来表明当前驱动程序是否正在执行动态升级过程,并初始化为FALSE;(2)设置升级标志driver_upgrading_flag的取值为TRUE,从而将访问该驱动程序的任务挂起,并插入到等待队列waitq_driver_upgrading中;(3)将升级文件编译并加载到内核地址空间;(4)在驱动程序的函数入口处引入升级文件的地址处写入跳转指令,跳转地址为升级文件的函数入口地址;(5)设置升级标志driver_upgrading_flag的取值为FALSE,将访问该驱动程序而被挂起的任务唤醒,恢复运行。

【技术实现步骤摘要】

本专利技术属于计算机操作系统
,特别是提供一种嵌入式操作系统驱动程序动态升级的方法。
技术介绍
随着嵌入式技术的快速发展和广泛应用,嵌入式技术已与人们的日常生活紧密结合,不论是民用还是军工产品都对嵌入式应用提出越来越高的要求,主要包括实时性、高可靠性、高可用性等关键特性,其表现为提供给用户不间断的服务。驱动程序在嵌入式系统中占有至关重要的地位,在嵌入式系统中,一般是没有虚拟内存管理的,设备驱动程序直接使用的是物理内存。研究表明,驱动程序失效是导致系统失效的主要原因,如果驱动程序出现错误,系统必须中断该驱动程序的运行,若驱动程序不是以可加载模块的形式存在,或者虽然是以可加载模块的形式存在,但出错时仍然有相关任务在使用该驱动程序,这样是无法卸载驱动程序的,错误也就得不到修正,唯有中断整个系统的运行,系统中所有的任务都被停止,等待把错误修正之后,再重新启动系统。然而,在很多对高可用性要求较高的领域,如电信级应用,要求程序不间断地运行,更加不能容忍因升级驱动程序而使整个系统中断运行,因此,必须采用一种驱动程序动态升级的方法。而现有的驱动程序升级技术中,一种技术是针对操作系统核心支持可安装模块功能,可安装模块是经过编译但尚未连接的目标文件,这种技术可以在系统运行时动态地加载模块到内核中,内核提供一些函数入口、全局变量等符号,可安装模块可以在程序中调用这些内核函数和访问这些全局变量,当内核需要升级驱动程序时,必须先卸载这个驱动程序,中断所有任务对该设备的访问,一旦驱动程序被卸载,若有任务要访问相应的设备必然失败,待新的驱动程序模块被加载后,相应的设备才处于可用状态,这种驱动程序升级技术需停止系统对设备的访问,可能造成任务运行失效,而且在业务密集的环境下,设备驱动程序一直有任务在访问,可能无法卸载设备驱动模块,给升级带来了困难。另一种驱动程序升级技术是针对操作系统核心不支持可安装模块的功能,这在嵌入式系统中比较常见,操作系统核心和驱动程序是个运行整体,驱动程序不是以模块的形式存在,在这种情况下,如果目标系统出现问题,要升级驱动程序,需重新编译操作系统以及驱动程序源码,编译完成后生成新的可执行映象,然后,停止目标系统的运行,将新的系统映象下载到目标机上,再重新启动目标系统,这种驱动程序升级的方法使目标系统中断时间较长,而且是完全停止了目标系统的所有任务的运行,严重影响了业务的正常处理。在嵌入式系统中,传统的驱动程序升级技术都必须停止驱动模块的运行或目标系统的运行才可以进行升级工作,这样是不能满足高可用的应用需求的。
技术实现思路
本专利技术的目的在于克服现有技术的不足,提供一种嵌入式操作系统驱动程序动态升级的方法,能够在不卸载驱动程序的条件下,对驱动程序进行动态升级,以降低系统的宕机时间,提高系统的可靠性,使之能够高效、稳定地运行于嵌入式平台,满足高可用的应用环境需求。为了实现上述专利技术目的,采用的技术方案如下,包括如下步骤(1)在核心代码中为每一个驱动程序增设驱动程序入口处任务控制程序,所述任务控制程序设置有一个全局变量driver_upgrading_flag,通过其取值为TRUE或FALSE来表明当前驱动程序是否正在执行动态升级过程,并初始化为FALSE; (2)设置升级标志driver_upgrading_flag的取值为TRUE,从而将访问该驱动程序的任务挂起,并插入到等待队列waitq_driver_upgrading中;(3)将升级文件编译并加载到内核地址空间;(4)在驱动程序的函数入口处引入升级文件的地址处写入跳转指令,跳转地址为升级文件的函数入口地址;(5)设置升级标志driver_upgrading_flag的取值为FALSE,将访问该驱动程序而被挂起的任务唤醒,恢复运行。驱动程序动态升级的关键是对访问驱动程序的任务进行控制,本专利技术通过设置全局标志变量driver_upgrading_flag来通知任务驱动程序是否处于升级状态,从而将任务挂起或让其访问驱动程序。如步骤(1)所述任务控制程序当系统任务调用驱动程序时,判断升级标志driver_upgrading_flag的取值,如果为FALSE,表明驱动程序处于可用状态,则让系统任务调用驱动程序,如果为TURE,则表明驱动程序处于升级状态,不可以调用驱动程序相关方法,通过操作系统的任务控制机制将系统任务挂起到等待队列waitq_driver_upgrading中。步骤(3)中,升级文件包括编写的新的驱动程序接口函数。驱动程序的接口方法是由系统操作方法跳转表(operating table)统一定义的,每个具体的驱动程序实例实现相应的操作方法,如串口驱动write方法对应的是serial_write驱动接口函数。所述步骤(3)只允许特权用户操作。加载升级文件到内核地址空间,需编写特权内存映射方法,考虑系统的安全性,只有特权用户才可以调用该方法。加载升级文件过程中,进行代码的连接解析,与操作系统核心形成一个可执行的整体。步骤(3)的升级文件加载过程通过升级文件代码的连接解析,与操作系统核心形成一个可执行的整体。所述步骤(4)还通过编译操作系统源代码生成可执行映像,以提取驱动程序函数名与入口地址对照表。步骤(4)主要进行的更改驱动程序接口函数的地址,需编写特殊的系统调用函数,由动态升级工具软件调用系统方法,解析写入的函数地址以及跳转的地址。本专利技术所设计的驱动程序动态升级方法,其功能特点可以细分为如下几个方面a、动态加载利用升级工具可以动态地将新的代码应用于正在运行的程序内存区域中,从而无需重新启动系统进行装载程序的二进制文件即可完成驱动程序的升级。b、增加函数驱动程序动态升级技术可以在不停止系统的情况下,为驱动程序增加新的接口函数。c、替换函数驱动程序动态升级技术可以在不停止系统的情况下,替换运行中的驱动程序接口函数,从而实现对驱动程序的动态维护与更新。d、Bug定位驱动程序动态升级技术可以定位系统的Bug信息,在系统运行过程中出现Bug时,可以采用动态升级的方式给系统加入一些收集信息的代码,对驱动程序的内部状态及实时数据进行分析诊断。本专利技术通过将升级文件动态加载在内核的地址空间,并在驱动程序的入口处通过跳转指令跳转至升级文件的入口地址,实现了驱动程序的动态升级,不用卸载原驱动程序,也无需停止操作系统的运行;同时,通过为每一个驱动程序增设驱动程序入口处任务控制程序,通过任务控制程序在任务访问驱动程序时,判断驱动程序是否正处于升级过程,如果处于升级过程,则改变任务的进程状态,将其挂起到等待对列中,待升级完成后再唤醒运行,否则则直接访问驱动程序,避免了由于驱动程序在升级过程中任务的不断访问所造成的混乱。附图说明图1为驱动程序动态升级总体架构逻辑示意图;图2为驱动程序动态升级任务控制流程示意图;图3为驱动程序动态升级实现的完整流程示意图;图4为驱动程序动态升级执行流程示意图。具体实施例方式下面结合附图,对本专利技术的具体实施做进一步的详细描述。附图1展示了驱动程序动态升级总体架构,该图显示了为了实现驱动程序动态升级对内核及驱动程序所做的改动。其主要是在处于底层硬件和用户应用程序之间的内核层做出改动,具体包括模块11为驱动升级封装,其相当于任务控制程序,设置本文档来自技高网
...

【技术保护点】
一种嵌入式操作系统驱动程序动态升级方法,其特征在于包括如下步骤:(1)在核心代码中为每一个驱动程序增设驱动程序入口处任务控制程序,所述任务控制程序设置有一个全局变量driver_upgrading_flag,通过其取值为TRUE或F ALSE来表明当前驱动程序是否正在执行动态升级过程,并初始化为FALSE;(2)设置升级标志driver_upgrading_flag的取值为TRUE,从而将访问该驱动程序的任务挂起,并插入到等待队列waitq_driver_upg rading中;(3)将升级文件编译并加载到内核地址空间;(4)在驱动程序的函数入口处引入升级文件的地址处写入跳转指令,跳转地址为升级文件的函数入口地址;(5)设置升级标志driver_upgrading_flag的 取值为FALSE,将访问该驱动程序而被挂起的任务唤醒,恢复运行。

【技术特征摘要】

【专利技术属性】
技术研发人员:刘发贵侯勇
申请(专利权)人:华南理工大学
类型:发明
国别省市:81[中国|广州]

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1