CN104765634B - 一种Linux系统内核新功能增加方法 - Google Patents
一种Linux系统内核新功能增加方法 Download PDFInfo
- Publication number
- CN104765634B CN104765634B CN201510225590.2A CN201510225590A CN104765634B CN 104765634 B CN104765634 B CN 104765634B CN 201510225590 A CN201510225590 A CN 201510225590A CN 104765634 B CN104765634 B CN 104765634B
- Authority
- CN
- China
- Prior art keywords
- function
- area
- new
- new function
- linux system
- 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.)
- Active
Links
Landscapes
- Executing Machine-Instructions (AREA)
- Hardware Redundancy (AREA)
Abstract
本发明提供了一种Linux系统内核新功能增加方法技术方案,该方案的方法具有原功能函数、模板函数、新功能函数等,并且有相应的跳转区、跳回区,使得该方案的方法不依赖内核支持,不依赖系统调用表,可以支持重复自定义,并且保证了原功能函数的调用,便于推广通用。
Description
技术领域
本发明涉及的是一种linux系统内核的新功能增加方法。
背景技术
通常情况下,Linux系统除非主动输出信息或者处于调试模式下,应用层的程序是很难在运行过程中输出调试信息的,作为Linux操作系统重中之重的内核更是如此。
当研发人员针对某特定Linux系统内核进行增加功能时,一般的方案有重新编译内核和修改内核中某个特定的功能函数两种。第一种方案是最容易做到也是最不可行的方案,最容易做到是因为Linux内核源码时开放的,最不可行是因为Linux系统的碎片化比较严重,当前Linux系统内核很有可能是定制好的,重新编译原始内核代码想要形成和当前内核功能完全一致几乎是不可能的;第二种方案通过修改特定的功能函数,使该功能函数完成所增加的功能即可实现开发目标。针对第二种方案,难点之一在于如何让一个稳定成型的内核主动通过调用新实现的功能函数来实现新的功能;难点之二在于是否能够在碎片化严重的Linux系统上做到通用。
目前采用大多采用Linux系统调用表地址修改和Linux内核kprobe类调用两种方式来实现新功能的增加,但Linux系统调用表地址修改只能自定义系统调用,使用该方法只能进行有限的内核功能扩展。Linux系统调用表地址修改过程中,不同的内核版本和不同的发行版本下系统调用表的地址和相同系统调用在系统调用表中的索引是不一定相同的,难以通用。Kprobe是Linux内核自带的一种代码注入方式,其过程就是利用实现好的内核注册方法,在功能函数执行前或后去主动执行注册好的新功能函数,根据新功能函数的返回值来确定功能函数的执行情况。但Linux内核kprobe类调用属于内核自带功能,需要内核支持,多数定制平台考虑到性能问题取消该功能。Linux内核kprobe类调用难以实现多模块重复自定义。
发明内容
本发明的目的就是针对现有技术所存在的不足,而提供一种Linux系统内核新功能增加方法的技术方案,该方案的方法不依赖内核支持,不依赖系统调用表,可以支持重复自定义,并且保证了原功能函数的调用,便于推广通用。
本方案是通过如下技术措施来实现的:一种Linux系统内核新功能增加方法,其特征在于包括如下步骤:
1)在原功能函数的起始地址处设置跳转区,跳转到新功能函数;
2)运行新功能函数,判断新功能函数是否需要调用原功能函数,如果需要,则进入步骤3),不需要调用则继续执行新功能函数,直至结束;
3)进入模板函数,通过模板函数的代码修改区和跳回区跳回到原功能函数;
4)执行原功能函数直至原功能函数结束,返回新功能函数继续执行,直至新功能函数执行结束。
所述的跳转区用于存储跳转到新功能函数的跳转指令。
模板函数的代码修改区用于存储调取原功能函数的指令。
所述的跳回区用于存储跳回原功能函数的指令。
模板函数还设置有备份区,用于备份跳转区内原功能函数的指令。
在模板函数的起始位置设置有返回区,用于存储函数调用错误时返回的指令。
所诉的步骤2)判断新功能函数是否需要调用原功能函数来实现全功能的内核。
所述的步骤3)中跳回到原功能函数是跳转到跳转区以下的函数,不包括跳转区。
本方案的有益效果可根据对上述方案的叙述得知,由于在该方案中设置有跳转区,即在原功能函数的跳转区内的代码修改,实现了新功能函数的调用,并且跳转区的长度不能破坏原功能函数指令,并且跳转区的长度要大于等于完成一次跳转指令所述长度;有备份区,用于备份跳转区中原功能函数原有的指令;有代码修改区,绝大多数情况下,新功能函数都需要调用原功能函数来实现全功能的内核方法,所有需要修复原函数,通过逐条解析备份区的指令,如果发现指令中存在相对偏移跳转,需要进行偏移地址的转换以保证代码顺利执行,当备份区的代码全部完成转换后,将转换后的代码填写至代码修改区,代码修改的大小需要转换后的代码可以全部存储;。
由此可见,本发明与现有技术相比,具有突出的实质性特点和显著的进步,其实施的有益效果也是显而易见的。
附图说明
图1为本发明具体实施方式的示意图。
具体实施方式
为能清楚说明本方案的技术特点,下面通过一个具体实施方式,并结合其附图,对本方案进行阐述。
通过附图可以看出,本方案的:一种Linux系统内核新功能增加方法,其特征在于包括如下步骤:
1)在原功能函数的起始地址处设置跳转区,跳转到新功能函数的起始地址,所述的跳转区用于存储跳转到新功能函数的跳转指令;
2)运行新功能函数,判断新功能函数是否需要调用原功能函数,如果需要,则进入步骤3),不需要调用则继续执行新功能函数,直至结束;
3)进入模板函数,通过模板函数的代码修改区和跳回区跳回到原功能函数,即调回原功能函数的(5),模板函数的代码修改区用于存储调取原功能函数的指令,所述的跳回区用于存储跳回原功能函数的指令;
4)执行原功能函数直至原功能函数结束,返回新功能函数继续执行,直至新功能函数执行结束。
模板函数还设置有备份区,用于备份跳转区内原功能函数的指令。在模板函数的起始位置设置有返回区,用于存储函数调用错误时返回的指令。
所诉的步骤2)判断新功能函数是否需要调用原功能函数来实现全功能的内核。
本发明并不仅限于上述具体实施方式,本领域普通技术人员在本发明的实质范围内做出的变化、改型、添加或替换,也应属于本发明的保护范围。
Claims (7)
1.一种Linux系统内核新功能增加方法,其特征在于包括如下步骤:
1)在原功能函数的起始地址处设置跳转区,跳转到新功能函数;
2)运行新功能函数,判断新功能函数是否需要调用原功能函数来实现全功能的内核,如果需要,则进入步骤3),不需要调用则继续执行新功能函数,直至结束;
3)进入模板函数,通过模板函数的代码修改区和跳回区跳回到原功能函数;
4)执行原功能函数直至原功能函数结束,返回新功能函数继续执行,直至新功能函数执行结束。
2.根据权利要求1所述的Linux系统内核新功能增加方法,其特征是:所述的跳转区用于存储跳转到新功能函数的跳转指令。
3.根据权利要求1或2所述的Linux系统内核新功能增加方法,其特征是:模板函数的代码修改区用于存储调取原功能函数的指令。
4.根据权利要求3所述的Linux系统内核新功能增加方法,其特征是:所述的跳回区用于存储跳回原功能函数的指令。
5.根据权利要求1所述的Linux系统内核新功能增加方法,其特征是:模板函数还设置有备份区,用于备份跳转区内原功能函数的指令。
6.根据权利要求1所述的Linux系统内核新功能增加方法,其特征是:在模板函数的起始位置设置有返回区,用于存储函数调用错误时返回的指令。
7.根据权利要求1所述的Linux系统内核新功能增加方法,其特征是:所述的步骤3)中跳回到原功能函数是跳转到跳转区以下的函数,不包括跳转区。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510225590.2A CN104765634B (zh) | 2015-05-06 | 2015-05-06 | 一种Linux系统内核新功能增加方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510225590.2A CN104765634B (zh) | 2015-05-06 | 2015-05-06 | 一种Linux系统内核新功能增加方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104765634A CN104765634A (zh) | 2015-07-08 |
CN104765634B true CN104765634B (zh) | 2017-12-08 |
Family
ID=53647482
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510225590.2A Active CN104765634B (zh) | 2015-05-06 | 2015-05-06 | 一种Linux系统内核新功能增加方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104765634B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105335200B (zh) * | 2015-11-24 | 2019-05-07 | 小米科技有限责任公司 | 系统升级方法及装置 |
CN106445662B (zh) * | 2016-09-13 | 2019-09-10 | 广东欧珀移动通信有限公司 | 一种移植应用程序的方法及终端设备 |
CN114398102B (zh) * | 2022-01-18 | 2023-08-08 | 杭州米络星科技(集团)有限公司 | 一种应用程序包生成方法、装置、编译服务器及计算机可读存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101281488A (zh) * | 2007-04-06 | 2008-10-08 | 上海宇梦通信科技有限公司 | Linux操作系统的内核调试方法 |
CN101799763A (zh) * | 2009-02-10 | 2010-08-11 | 华为技术有限公司 | 内核在线补丁的方法、装置和系统 |
CN103309683A (zh) * | 2012-03-07 | 2013-09-18 | 京信通信系统(中国)有限公司 | 硬件设备的软件补丁嵌入方法及装置 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102156661B (zh) * | 2010-02-11 | 2013-06-12 | 华为技术有限公司 | 在线补丁的激活方法、装置及系统 |
-
2015
- 2015-05-06 CN CN201510225590.2A patent/CN104765634B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101281488A (zh) * | 2007-04-06 | 2008-10-08 | 上海宇梦通信科技有限公司 | Linux操作系统的内核调试方法 |
CN101799763A (zh) * | 2009-02-10 | 2010-08-11 | 华为技术有限公司 | 内核在线补丁的方法、装置和系统 |
CN103309683A (zh) * | 2012-03-07 | 2013-09-18 | 京信通信系统(中国)有限公司 | 硬件设备的软件补丁嵌入方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN104765634A (zh) | 2015-07-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104765634B (zh) | 一种Linux系统内核新功能增加方法 | |
US8499289B2 (en) | Method, device and system for realizing kernel online patching | |
EP2619679B1 (en) | System and method for facilitating wireless communication during a pre-boot phase of a computing device | |
US10194397B2 (en) | Power supply control method and wireless terminal | |
US20120304166A1 (en) | Bootup method and device for application program in mobile equipment | |
CN104579719A (zh) | 一种固件的升级方法和系统、上位机和光模块 | |
CN105630557B (zh) | 热补丁方法和装置 | |
BR112016018202B1 (pt) | Aparelho para uma unidade de transmissão de potência, método implementado em uma unidade de recepção de potências e meio legível por maquina | |
CN102662740B (zh) | 非对称多核系统及其实现方法 | |
CO5680123A1 (es) | Metodo y sistema para exigir una politica de seguridad por medio de una maquina virtual de seguridad | |
WO2012100535A1 (zh) | 超级内核组件的升级方法和计算机系统 | |
CN105224332A (zh) | 一种应用程序生成方法和装置 | |
CN103729210A (zh) | 一种实现一个刷机包支持多种制式智能终端的方法及装置 | |
US9619348B2 (en) | Method, medium, system, and apparatus for supplying power at the time of power outage | |
CN102831034A (zh) | 基于嵌入式装置Linux的多状态备份和快速恢复方法 | |
CN101907997A (zh) | 一种嵌入式设备的通用启动方法 | |
CN110516789A (zh) | 卷积网络加速器中指令集的处理方法、装置及相关设备 | |
CN102087603A (zh) | 一种在单芯片上实现主备版本备份的方法 | |
CN102622243A (zh) | 支持多种nand闪存的固化代码的执行方法 | |
CN108196873A (zh) | 电力系统嵌入式软件远程动态升级方法和系统 | |
CN100384122C (zh) | 网络终端产品的在线升级方法 | |
CN103259845B (zh) | 基于网络中断的数据备份任务的改进方法 | |
CN105630530A (zh) | 数字信号处理器多级启动方法及系统 | |
CN104035776A (zh) | 一种操作系统的启动方法 | |
CN103699404A (zh) | 一种同机芯不同机型对应多个预制应用程序的方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
EXSB | Decision made by sipo to initiate substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
CB02 | Change of applicant information |
Address after: Xinluo Avenue high tech Zone of Ji'nan City, Shandong province 250101 No. 1166 orsus Building 2 building 15-16 layer Applicant after: Shandong Zhongfu Information Industry Co., Ltd. Address before: Xinluo Avenue high tech Zone of Ji'nan City, Shandong province 250101 No. 1166 orsus Building 2 building 15-16 layer Applicant before: Shandong Zhongfu Information Industry Co., Ltd. |
|
COR | Change of bibliographic data | ||
GR01 | Patent grant | ||
GR01 | Patent grant |