内核模块加载方法和装置的制造方法

文档序号:8361227阅读:174来源:国知局
内核模块加载方法和装置的制造方法
【技术领域】
[0001 ] 本发明涉及计算机领域,具体而言,涉及一种内核模块加载方法和装置。
【背景技术】
[0002]操作系统(Operating System)是管理计算机硬件与软件资源的程序,负责管理与配置内存、决定系统资源供需的优先次序、控制输入与输出设备、操作网络与管理文件系统等基本事务。内核(Kernel)是一个操作系统的核心,指的是一个提供硬件抽象层、磁盘及文件系统控制、多任务等功能的系统软件,其中,由于直接对计算机硬件进行操作相对复杂,所以内核通常会提供一种硬件抽象的方法来完成这些操作。硬件抽象隐藏了复杂性,为应用软件和硬件提供了一套简洁、统一的接口,使程序设计更为简单。
[0003]可加载内核模块LKM (Loadable Kernel Module)是操作系统的内核向用户开放的对内核进行编辑的接口,通过LKM可以多种功能,例如在操作系统运行时实现对该操作系统的动态更改,或者对操作系统的内核的故障或漏洞进行修复,等。现有的流行的操作系统,比如Linux、Microsoft Windows> Mac OS X等均都支持LKM功能,然而由于各操作系统、甚至同一操作系统的不同版本的内核所支持的LKM的结构的定义各有不同,因此如何让编写好的一个LKM兼容不同操作系统、或者同一操作系统的不同版本的内核成为了一个难题。
[0004]针对上述的问题,目前尚未提出有效的解决方案。

【发明内容】

[0005]本发明实施例提供了一种内核模块加载方法和装置,以至少解决LKM无法兼容不同内核的技术问题。
[0006]根据本发明实施例的一个方面,提供了一种内核模块加载方法,包括:获取第一可加载内核模块LKM,其中,上述第一 LKM满足被加载到第一内核的第一加载条件;获取第二LKM,其中,上述第二 LKM满足被加载到第二内核的第二加载条件、但不满足上述第一加载条件;根据上述第一 LKM更新上述第二 LKM,其中,更新后的上述第二 LKM满足上述第一加载条件;向上述第一内核加载更新后的上述第二 LKM。
[0007]根据本发明实施例的另一方面,还提供了一种内核模块加载装置,包括:第一获取单兀,用于获取第一可加载内核模块LKM,其中,上述第一 LKM满足被加载到第一内核的第一加载条件;第二获取单元,用于获取第二 LKM,其中,上述第二 LKM满足被加载到第二内核的第二加载条件、但不满足上述第一加载条件;第一更新单元,用于根据上述第一 LKM更新上述第二 LKM,其中,更新后的上述第二 LKM满足上述第一加载条件;加载单元,用于向上述第一内核加载更新后的上述第二 LKM。
[0008]在本发明实施例中,由于获取的第一 LKM属于能够被第一内核成功加载的自定义的LKM,因此该第一 LKM必然满足该第一加载条件,进而通过以该第一 LKM为模板、或者是对该第一 LKM的解析,即可以反映出第一加载条件的具体内容,因此以第一 LKM为模板、或者利用从第一 LKM中解析出的第一加载条件的具体内容对第二 LKM的更新,即可以使更新后的第二 LKM满足第一加载条件,进而达到向第一内核中加载更新后的第二 LKM的效果,从而解决LKM无法兼容不同内核的技术问题。
【附图说明】
[0009]此处所说明的附图用来提供对本发明的进一步理解,构成本申请的一部分,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
[0010]图1是根据本发明实施例的一种可选的内核模块加载方法的示意图;
[0011]图2是根据本发明实施例的另一种可选的内核模块加载方法的示意图;
[0012]图3是根据本发明实施例的又一种可选的内核模块加载方法的示意图;
[0013]图4是根据本发明实施例的又一种可选的内核模块加载方法的示意图;
[0014]图5是根据本发明实施例的又一种可选的内核模块加载方法的示意图;
[0015]图6是根据本发明实施例的又一种可选的内核模块加载方法的示意图;
[0016]图7是根据本发明实施例的又一种可选的内核模块加载方法的示意图;
[0017]图8是根据本发明实施例的一种可选的内核模块加载装置的示意图;
[0018]图9是根据本发明实施例的另一种可选的内核模块加载装置的示意图。
【具体实施方式】
[0019]为了使本技术领域的人员更好地理解本发明方案,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分的实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都应当属于本发明保护的范围。
[0020]需要说明的是,本发明的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本发明的实施例能够以除了在这里图示或描述的那些以外的顺序实施。此外,术语“包括”和“具有”以及他们的任何变形,意图在于覆盖不排他的包含,例如,包含了一系列步骤或单元的过程、方法、系统、产品或设备不必限于清楚地列出的那些步骤或单元,而是可包括没有清楚地列出的或对于这些过程、方法、产品或设备固有的其它步骤或单元。
[0021]实施例1
[0022]根据本发明实施例,提供了一种内核模块加载模块,如图1所示,该方法包括:
[0023]S102:获取第一 LKM,其中,第一 LKM满足被加载到第一内核的第一加载条件;
[0024]S104:获取第二 LKM,其中,第二 LKM满足被加载到第二内核的第二加载条件、但不满足第一加载条件;
[0025]S106:根据第一 LKM更新第二 LKM,其中,更新后的第二 LKM满足第一加载条件;
[0026]S108:向第一内核加载更新后的第二 LKM。
[0027]应当明确的是,本发明技术方案所要解决的问题之一是提供一种方法,以使得基于一种操作系统及该操作系统的一个版本的内核所编写的LKM能够成功加载到其他操作系统或者同一操作系统的其他版本的内核中,进而通过该功能的实现来简化跨平台的LKM的设计、并免除操作系统和/或其内核版本更新时所需完成的对旧版本LKM的繁复的更新工作。其中,为便于描述,以下将LKM当前所需成功加载的操作系统内核记为第一内核,将该LKM原先匹配的内核记为第二内核,并将该LKM记为第二 LKM。
[0028]为解决上述问题,根据本发明实施例提供的内核模块加载方法,可以通过步骤S104获取该第二 LKM,并通过步骤S102获取满足被加载到该第一内核的加载条件的已编写好的另一 LKM,其中,为便于表述,将该另一 LKM记为第一 LKM,并将该加载条件记为第一加载条件。进而通过步骤S106,采用以该第一 LKM或者说该第一加载条件为参照来更新第二LKM的方式,即可以获得满足该第一加载条件的更新后的第二 LKM,并可以进一步地通过步骤S108将更新后的该第二 LKM加载到第一内核中,从而达到将原本基于第二内核编写的、满足被加载到第二内核的第二加载条件的第二 LKM成功加载到第一内核的效果。
[0029]在本发明实施例中,上述与第一内核对应的第一加载条件可以包括多种条件。具体而言,由内核的开发者向用户开放的LKM的加载功能通常设置有一个或多个校验环节,其中,若用户自定义的LKM通过这些校验,则可以正常地向内核加载该自定义的LKM,若未通过校验,则停止加载该自定义的LKM,例如,向Linux内核加载自定义的LKM需要通过以下三个校验环节:
[0030]DVermagic:校验LKM的版本标识与Linux内核的版本标识是否一致,若一致,则Vermagic校验通过,若不一致,则Vermagic校验不通过,其中,该LKM的版本标识用于标识该LKM的编译环境与运行环境;
[0031]2) Module Struct校验:校验LKM的结构体的大小与定义与Linux内核对LKM的结构体的定义是否一致,若一致,则Module Struct校验通过,若不一致,则Module Struct校验不通过,其中,该LKM的结构体的概念类似于为本领域技术人员所知的结构体的概念,其可以包含多个用来描叙该LKM的数据字段,此外,还可以包含该LKM加载时的初始化函数指针与卸载时的清理函数指针,其中,LKM的结构体中所包含的成员的数量可以随着内核版本或内核的配置的变化而改变;
[0032]3) Symbol CRC校验:校验LKM中的标识符与Linux内核定义的标识符是否一致,若一致,则Symbol CRC校验通过,若不一致,则Symbol CRC校验不通过,其中,LKM中的标识符表示用于标识LKM中的函数、结构体等的符号。具体地,在该
当前第1页1 2 3 4 5 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1