内核函数调用方法、装置及操作系统的制作方法

文档序号:9452940阅读:478来源:国知局
内核函数调用方法、装置及操作系统的制作方法
【技术领域】
[0001]本发明涉及计算机操作系统,尤其涉及一种内核函数调用方法、装置及操作系统。
【背景技术】
[0002]使用Linux操作系统的嵌入式产品中,程序运行时需使用两个空间:用户空间和内核空间。所述两个空间彼此相互独立。内核运行在内核空间,而应用程序,比如用户界面等,运行在用户空间。应用程序需要使用内核提供的服务时,通过系统调用来完成。
[0003]此外,内核通常以某种方式,比如文件(log、message、core dump、proc文件、sysfs文件等)方式,把调试信息导出到用户空间,以便当内核出现问题时进行调试。以文件方式导出,需要按照特定文件规范在内核中编码实现后,才能在系统运行或发生问题时导出到用户空间。不同格式的文件需要不同的规范操作。因此,如果没有事先编码实现文件导出,则无法查看相应内核调试信息。

【发明内容】

[0004]有鉴于此,本发明提供一种内核函数调用方法、装置及操作系统,以解决上述至少一个技术问题。
[0005]本发明实施例提供一种内核函数调用方法,包括步骤:获取用户输入的内核函数名称和参数;在用户空间解析所述内核函数名称和参数,获取函数和参数的地址和类型,并建立参数列表;以所述参数列表为内核模块参数,使用载入模块指令在系统中添加内核模块;在内核空间解析所述参数列表,以获取相应函数地址和参数值;以及根据所述函数地址和参数值调用所述函数。
[0006]本发明实施例还提供一种内核函数调用装置,至少包括:名称获取模块,用于获取用户输入的内核函数名称和参数;第一解析模块,设置在用户空间,用于解析所述内核函数名称和参数,获取函数和参数的地址和类型,并建立参数列表;载入模块,用于以所述参数列表为内核模块参数,在系统中添加内核模块;第二解析模块,设置在内核空间,用于解析所述参数列表,获取相应函数地址和参数值;以及调用模块,用于根据所述函数地址和参数值调用所述函数。
[0007]本发明实施例还提供一种操作系统,包括用户空间和内核空间。所述用户空间至少包括:名称获取模块,用于获取用户输入的内核函数名称和参数;第一解析模块,用于解析所述内核函数名称和参数,获取函数和参数的地址和类型,并建立参数列表;以及载入模块,用于以所述参数列表为内核模块参数,在系统中添加内核模块。所述内核空间至少包括:第二解析模块,用于解析所述参数列表,获取相应函数地址和参数值;以及调用模块,用于根据所述函数地址和参数值调用所述函数。
[0008]本发明的内核函数调用装置和方法,能够当调试信息没有导出到用户空间时,只要内核提供了调试接口函数,即可以从用户空间调用该函数,然后在内核空间执行该函数导出调试信息,方便快捷,且通用性强。
【附图说明】
[0009]为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其他的附图。
[0010]图1是根据本发明实施例的内核函数调用方法的流程图;
[0011]图2是根据本发明实施例的内核函数调用方法的步骤S102的部分子步骤流程图;
[0012]图3是根据本发明实施例的内核函数调用方法的步骤S104的子步骤流程图;
[0013]图4是根据本发明实施例的内核函数调用装置及操作系统的功能模块示意图。
具体实施例
[0014]下面结合附图和具体实施例对本发明的技术方案作进一步更详细的描述。显然,所描述的实施例仅仅是本发明的一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动的前提下所获得的所有其他实施例,都应属于本发明保护的范围。
[0015]请参阅图1,其是本发明一实施例提供的一种内核函数调用方法。本实施例中,所述内核函数调用方法应用于Linux操作系统。所述方法包括以下步骤:
[0016]步骤S1I,获取用户输入的内核函数名称和参数。本实施例中,用户输入的函数名称或参数至少遵循如下语法格式其中之一:
[0017]I)函数名称或变量名称[:][i内核模块名称];
[0018]2)以Ox开头的32位十六进制数[:];
[0019]3)十进制整数[:]。
[0020]其中,字符“[]”部分表示可选部分,字符“:”表示取变量地址作为参数,字符之后的部分为符号出处对应的内核模块名称。此外,默认取变量值作为函数参数,当多个内核模块使用相同的符号名称时可以进一步区分识别。函数名称或变量名成以字母或“_”开头。本实施例中,最多支持8个参数。
[0021]步骤S102,在用户空间解析所述内核函数名称和参数,获取函数和参数的地址和类型,并建立参数列表。本实施例中,所述参数列表包括多个二元组,每个二元组包括每个函数或参数的类型和地址,其中所述类型和地址都用32位无符号整数表示。也就是说,在本实施例中,根据步骤SlOl的语法格式,依次解析用户输入的函数或参数。每个函数或参数生成一个 < 类型,地址> 二元组,类型和地址都用32位无符号整数表示,所有二元组依次组成一个参数列表。
[0022]请参阅图2,更具体的,所述获取函数和参数的地址和类型的步骤包括子步骤:
[0023]S102a,获取函数符号或参数符号对应的地址。
[0024]S102b,获取二元组中的地址值以及获取二元组中地址指向内存位置的32位无符号整数数值,以确定类型。
[0025]S102c,所生成的参数列表作为数组参数传递给所述内核模块,所述数组参数的元素是32位无符号整数。
[0026]此外,在一些实施例中,当函数或变量以符号(字符串)的形式输入时,通过/proc/kalIsyms文件,可以查询到该符号对应的地址。而在另一些实施例中,当函数或变量以十进制数的形式输入时,需要转换成计算机中对应的十六进制表示格式。用户输入的待调用内核函数则按照取址(也就是获取二元组中的地址值)的方式处理。
[0027]步骤S103,以所述参数列表为内核模块参数,使用载入模块指令(例如insmod命令)在系统中添加内核模块。
[0028]步骤S104,在内核空间解析所述参数列表,以获取相应函数地址和参数值。
[0029]请参阅图3,步骤S104具体包括子步骤:
[0030]步骤S104a,从所传
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1