CN103984585A - 一种Linux内核可热插拨内核模块运行时升级方法 - Google Patents

一种Linux内核可热插拨内核模块运行时升级方法 Download PDF

Info

Publication number
CN103984585A
CN103984585A CN201410248550.5A CN201410248550A CN103984585A CN 103984585 A CN103984585 A CN 103984585A CN 201410248550 A CN201410248550 A CN 201410248550A CN 103984585 A CN103984585 A CN 103984585A
Authority
CN
China
Prior art keywords
module
kernel
upgrade
new
kernel module
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.)
Pending
Application number
CN201410248550.5A
Other languages
English (en)
Inventor
任元
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Inspur Electronic Information Industry Co Ltd
Original Assignee
Inspur Electronic Information Industry Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Inspur Electronic Information Industry Co Ltd filed Critical Inspur Electronic Information Industry Co Ltd
Priority to CN201410248550.5A priority Critical patent/CN103984585A/zh
Publication of CN103984585A publication Critical patent/CN103984585A/zh
Pending legal-status Critical Current

Links

Landscapes

  • Stored Programmes (AREA)

Abstract

本发明提供一种Linux内核可热插拨内核模块运行时升级方法,属于计算机操作系统领域,本发明通过添加一个系统调用,用于更新指定的内核模块,本方法所说的系统调用实现了一个正在运行着的内核模块,在不卸载及重新装载的前提下,更新其代码,用此内核模块新的版本替换旧的版本,并且,最关键的是:在此过程中,此内核模块仍能正常使用,即不中断其提供的服务。

Description

一种Linux内核可热插拨内核模块运行时升级方法
技术领域   
本发明提供一种Linux内核可热插拨内核模块运行时升级方法,属于计算机操作系统领域。通过添加一个新的系统调用,实现更新一个正在使用中的内核动态装载的模块代码到新的版本。
背景技术
 Linux内核可热插拨内核模块技术的出现极大的方便了Linux内核程序的开发,它使得人们在Linux上可以不重启系统的前提下,添加需要用到的内核模块程序,并在不需要时卸载它,也不用重启操作系统,一直以来,人们都认为,这已经非常方便各种应用程序及设备驱动的开发了。但是,近年来,各种高可靠性、高可持续性的服务要求对此特性越来越不满足:我的重要服务在任何状况下都尽可能不要中断业务,但在更新服务软件相关的内核模块时,服务程序不得不暂时停止,等相关的内核模块的新版本被装载进操作系统内核后,再重新启动服务程序提供服务,尽管维护者会尽可能在短时间内完成这些事务性的工作,但是,这个短暂的中断对于要求高可用性的服务仍然有着巨大的不良影响。 
 当然,也许有人会说:可以利用双机备份,等多种方式方法来解决这个问题,但是,越发复杂的服务器集群一类的架构不仅增加了大量的金钱浪费,而且也增加了出故障的更多可能,并且维护相关的费用也是无底洞!因此迫切需要出现一种能够以较低的成本,几乎完全不中断服务的方法去更新服务程序相关的内核模块技术。 
发明内容
一种Linux内核可热插拨内核模块运行时升级方法。为实现这一目的,本发明的技术解决方案是:通过向Linux操作系统添加一个内核模块升级系统调用,提供更新指定的内核模块的能力。本方法在内核模块升级系统调用实现了一个正在运行着的内核模块,在不卸载及重新装载的前提下,更新其代码,用此内核模块新的版本替换旧的版本,在此过程中,此内核模块仍能正常使用,即不中断该内核模块提供的服务。 
通过在操作系统中新添加的模块升级系统调用,同步地把指定的内核模块由当前版本,升级到一个新的版本,并且这个新的版本可以是比当前版本高或者低的。 
当使用模块升级系统调用升级可热插拨内核模块时,以原模块及新模块全路径为参数,在升级内存中的运行着的该模块的同时升级文件系统中的原模块。 
在升级正在运行中的内核模块的过程为: 
   a.模块升级系统调用把新版本的内核模块代码添加到正在运行着的内核映像内存中去;
   b.检测旧版本的内核模块函数是否正在使用中,如果没有在使用中,则在它的开始处注入一个跳转指令,从而调用函数的在新版本内核中的实现;
   c.如果在使用中,则暂时放弃替换该函数,并睡眠一小会,然后再次尝试b中的动作,重复数次,如果失败,则恢复原状;
   在升级文件系统中的原模块的过程为:
   a. 模块升级系统调用调用文件系统函数把新模块拷贝到原模块目录中,并命名一个新名字;
   b. 模块升级系统调用调用文件系统函数删除原模块;
   c. 模块升级系统调用调用文件系统函数把新模块重命名为原模块的名字,完成升级。
本发明的有益效果是: 
本发明提供一种不中断服务的方法去更新服务程序相关的内核模块技术,在内核模块升级系统调用实现了一个正在运行着的内核模块,在不卸载及重新装载的前提下,更新其代码,用此内核模块新的版本替换旧的版本,在此过程中,此内核模块仍能正常使用,即不中断该内核模块提供的服务。实现了能够以较低的成本,几乎完全不中断服务的方法去更新服务程序相关的内核模块技术。
附图说明
图1 是Linux可热插拨内核模块运行时升级原理图; 
图2 是Linux可热插拨内核模块运行时升级流程简图。
具体实施方式
下面按照说明书附图对本发明作详细说明: 
 本发明的技术解决方案是:通过向Linux操作系统添加一个内核模块升级系统调用,提供更新指定的内核模块的能力。本方法在内核模块升级系统调用实现了一个正在运行着的内核模块,在不卸载及重新装载的前提下,更新其代码,用此内核模块新的版本替换旧的版本,在此过程中,此内核模块仍能正常使用,即不中断该内核模块提供的服务。
如图1,内核模块升级系统调用,先把新内核模块代码添加到内核映像中去,然后在旧模块要升级的函数入口处,注入跳转指令(x86系统上jmp是跳转指令),跳转到新内核模块的对应于旧模块的函数升级后的新函数去执行新函数的代码,从而实现了旧模块中的代码更新为新模块中的代码。 
在Linux操作系统,添加内核模块升级系统调用,在该系统调用中升级正在运行中的旧内核模块及在文件系统中的旧内核模块,如图2: 
   在升级正在运行中的内核模块的过程为:
   a.校验证新内核模块是否是旧内核模块的升级版本或降级版本;
   b.模块升级系统调用把新版本的内核模块代码添加到正在运行着的内核映像内存中去;
   c.检测旧版本的内核模块函数是否正在使用中,如果没有在使用中,则在它的开始处注入一个跳转指令,从而调用函数的在新版本内核中的实现;
   d.如果在使用中,则暂时放弃替换该函数,并睡眠一小会,然后再次尝试b中的动作,重复数次,如果失败,则恢复原状;
在升级文件系统中的原模块的过程为:
a.校验证新内核模块是否是旧内核模块的升级版本或降级版本;
   b. 模块升级系统调用调用文件系统函数把新模块拷贝到原模块目录中,并命名一个新名字;
   c. 模块升级系统调用调用文件系统函数删除原模块;
   d. 模块升级系统调用调用文件系统函数把新模块重命名为原模块的名字,完成升级。  
    这样便实现了一个正在运行着的内核模块,在不卸载及重新装载的前提下,更新其代码,用此内核模块新的版本替换旧的版本,在此过程中,此内核模块仍能正常使用,即不中断该内核模块提供的服务。

Claims (5)

1.一种Linux内核可热插拨内核模块运行时升级方法,其特征在于通过添加一个新的系统调用,实现更新一个正在使用中的内核动态装载的模块代码到新的版本,并不中断该模块原来提供的任何服务。
2.如权利要求1所述的一种Linux内核可热插拨内核模块运行时升级方法,其特征在于:通过在操作系统中新添加的模块升级系统调用,同步地把指定的内核模块由当前版本,升级到一个新的版本,并且这个新的版本可以是比当前版本高或者低的。
3.如权利要求2所述的一种Linux内核可热插拨内核模块运行时升级方法,其特征在于:当使用模块升级系统调用升级可热插拨内核模块时,以原模块及新模块全路径为参数,在升级内存中的运行着的该模块的同时升级文件系统中的原模块。
4.如权利要求3所述的一种Linux内核可热插拨内核模块运行时升级方法,其特征在于:在升级正在运行中的内核模块的过程为:
    a.模块升级系统调用把新版本的内核模块代码添加到正在运行着的内核映像内存中去;
    b.检测旧版本的内核模块函数是否正在使用中,如果没有在使用中,则在它的开始处注入一个跳转指令,从而调用函数的在新版本内核中的实现;
    c.如果在使用中,则暂时放弃替换该函数,并睡眠一小会,然后再次尝试b中的动作,重复数次,如果失败,则恢复原状。
5.如权利要求3所述的一种Linux内核可热插拨内核模块运行时升级方法,其特征在于:在升级文件系统中的原模块的过程为:
    a. 模块升级系统调用调用文件系统函数把新模块拷贝到原模块目录中,并命名一个新名字;
    b. 模块升级系统调用调用文件系统函数删除原模块;
    c. 模块升级系统调用调用文件系统函数把新模块重命名为原模块的名字,完成升级。
CN201410248550.5A 2014-06-06 2014-06-06 一种Linux内核可热插拨内核模块运行时升级方法 Pending CN103984585A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201410248550.5A CN103984585A (zh) 2014-06-06 2014-06-06 一种Linux内核可热插拨内核模块运行时升级方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201410248550.5A CN103984585A (zh) 2014-06-06 2014-06-06 一种Linux内核可热插拨内核模块运行时升级方法

Publications (1)

Publication Number Publication Date
CN103984585A true CN103984585A (zh) 2014-08-13

Family

ID=51276578

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201410248550.5A Pending CN103984585A (zh) 2014-06-06 2014-06-06 一种Linux内核可热插拨内核模块运行时升级方法

Country Status (1)

Country Link
CN (1) CN103984585A (zh)

Cited By (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106326310A (zh) * 2015-07-06 2017-01-11 北京壹平台科技有限公司 一种手机客户端软件的资源加密更新方法
CN109409032A (zh) * 2018-10-24 2019-03-01 山东超越数控电子股份有限公司 一种安全关键系统的系统内核安全判断方法
CN109976886A (zh) * 2017-12-28 2019-07-05 深圳中电长城信息安全系统有限公司 内核远程切换方法及装置
CN110489140A (zh) * 2019-07-11 2019-11-22 平安科技(深圳)有限公司 软件升级方法、装置、计算机设备及计算机存储介质
CN111552489A (zh) * 2020-03-31 2020-08-18 支付宝(杭州)信息技术有限公司 用户态文件系统热升级方法、装置、服务器及介质
CN113377410A (zh) * 2021-06-09 2021-09-10 湖北亿咖通科技有限公司 车机系统及升级方法、可读存储介质和计算机程序产品

Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1475909A (zh) * 2002-08-16 2004-02-18 华为技术有限公司 一种嵌入式系统软件补丁的实现和控制方法
CN101799763A (zh) * 2009-02-10 2010-08-11 华为技术有限公司 内核在线补丁的方法、装置和系统
CN102073529A (zh) * 2011-01-30 2011-05-25 华为技术有限公司 超级内核组件的升级方法和计算机系统
CN102609326A (zh) * 2012-01-17 2012-07-25 大唐移动通信设备有限公司 一种数据下载处理方法及装置
CN102722387A (zh) * 2012-05-29 2012-10-10 华为技术有限公司 动态打补丁的方法和装置
CN102982277A (zh) * 2012-12-24 2013-03-20 广东威创视讯科技股份有限公司 一种实现嵌入式系统软件补丁的方法和系统

Patent Citations (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1475909A (zh) * 2002-08-16 2004-02-18 华为技术有限公司 一种嵌入式系统软件补丁的实现和控制方法
CN101799763A (zh) * 2009-02-10 2010-08-11 华为技术有限公司 内核在线补丁的方法、装置和系统
CN102073529A (zh) * 2011-01-30 2011-05-25 华为技术有限公司 超级内核组件的升级方法和计算机系统
CN102609326A (zh) * 2012-01-17 2012-07-25 大唐移动通信设备有限公司 一种数据下载处理方法及装置
CN102722387A (zh) * 2012-05-29 2012-10-10 华为技术有限公司 动态打补丁的方法和装置
CN102982277A (zh) * 2012-12-24 2013-03-20 广东威创视讯科技股份有限公司 一种实现嵌入式系统软件补丁的方法和系统

Cited By (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN106326310A (zh) * 2015-07-06 2017-01-11 北京壹平台科技有限公司 一种手机客户端软件的资源加密更新方法
CN106326310B (zh) * 2015-07-06 2021-05-14 北京壹平台科技有限公司 一种手机客户端软件的资源加密更新方法
CN109976886A (zh) * 2017-12-28 2019-07-05 深圳中电长城信息安全系统有限公司 内核远程切换方法及装置
CN109409032A (zh) * 2018-10-24 2019-03-01 山东超越数控电子股份有限公司 一种安全关键系统的系统内核安全判断方法
CN110489140A (zh) * 2019-07-11 2019-11-22 平安科技(深圳)有限公司 软件升级方法、装置、计算机设备及计算机存储介质
CN111552489A (zh) * 2020-03-31 2020-08-18 支付宝(杭州)信息技术有限公司 用户态文件系统热升级方法、装置、服务器及介质
CN111552489B (zh) * 2020-03-31 2022-04-26 支付宝(杭州)信息技术有限公司 用户态文件系统热升级方法、装置、服务器及介质
CN113377410A (zh) * 2021-06-09 2021-09-10 湖北亿咖通科技有限公司 车机系统及升级方法、可读存储介质和计算机程序产品

Similar Documents

Publication Publication Date Title
CN103984585A (zh) 一种Linux内核可热插拨内核模块运行时升级方法
WO2017067448A1 (zh) 一种无线固件升级方法、系统及计算机存储介质
CN110225078B (zh) 一种应用服务更新方法、系统及终端设备
CN104978209B (zh) 应用的更新方法及装置
CN107291481B (zh) 一种组件更新方法、装置和系统
CA2701491A1 (en) Firmware image update and management
CN106095621B (zh) 一种安卓系统中Launcher运行异常的恢复方法及系统
WO2014194865A1 (zh) 一种固件升级方法、装置及通信设备
CN103473065A (zh) 一种可快速还原系统盘的虚拟机创建方法
CN105045617B (zh) 一种Android系统的应用恢复方法及系统
CN101329633A (zh) 一种软件升级的方法和软件升级装置
US20160328227A1 (en) Dynamically Applying A Software Patch To A Computer Program
CN103353846A (zh) 一种项目自动部署插件
TW201621647A (zh) 作業系統更新方法
CN110007935B (zh) 一种程序升级的处理方法、装置及设备
CN106201773A (zh) 实例系统、云系统及实例系统的升级或恢复方法
CN109360029A (zh) 一种远程终端广告机的自我管理方法
CN105867962A (zh) 系统升级的方法和装置
CN105094919A (zh) 一种应用程序启动方法
TW202131170A (zh) 韌體損壞恢復技術
CN105912365A (zh) 一种移动终端系统更新方法及系统
CN107766063A (zh) 一种批量升级软件的方法及系统
CN106293790B (zh) 基于Firefox操作系统的应用程序升级方法和装置
US20160321057A1 (en) Electronic apparatus
CN104572212A (zh) 一种终端更新系统及其更新方法

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
RJ01 Rejection of invention patent application after publication
RJ01 Rejection of invention patent application after publication

Application publication date: 20140813