一种硬件兼容性知识库构建方法与流程

文档序号:19744926发布日期:2020-01-21 18:11阅读:232来源:国知局

本发明涉及硬件兼容性测试技术领域,具体涉及一种硬件兼容性知识库构建方法。



背景技术:

随着基于国产处理器的操作系统的迅速发展,国内众多操作系统产品百花齐放,在国产化关键软硬件名录测试中已经对硬件兼容性做了大量的适配测试。

但由于目前各厂商产品缺乏统一的产品研发规范和标准,经常出现由于操作系统版本的变化导致硬件设备无法兼容使用的情况,因此对操作系统进行硬件的兼容性测试就显得尤为重要。

目前操作系统厂商都不具备所有待适配的硬件资源,缺少兼容性检测技术规范以及手段且工作量巨大,导致由厂商接入硬件直接开展兼容性测试变得尤为困难。而目前国内外针对操作系统兼容性测试的研究主要集中在软件方面,导致对国产操作系统的硬件兼容性测试还没有一种通用的方法。



技术实现要素:

(一)要解决的技术问题

本发明要解决的技术问题是:如何实现一种硬件兼容性知识库构建方法,解决当前国产操作系统缺少硬件兼容性测试方法以及数据的问题。

(二)技术方案

为了解决上述技术问题,本发明提供了一种硬件兼容性知识库构建方法,包括以下步骤:

第一步分析驱动模块运行原理,确定驱动模块运行时对操作系统内核的依赖要素;

第二步获取所述依赖要素以构建硬件兼容性知识库;

第三步向所述知识库中添加驱动模块动态依赖项。

优选地,第一步中,首先对驱动模块在操作系统中运行时所调用操作系统内核的接口构成进行分析,确定硬件兼容性的依赖要素,使得在构建硬件兼容性知识库时能够搜集到这些依赖要素并对依赖要素进行分级。

优选地,第一步中,确定所述依赖要素包括内核版本、内核导出函数签名和结构体定义。

优选地,第二步中,收集已有的操作系统内核开发资源,从开发资源中提取得到驱动模块对内核的依赖要素,在知识库中添加操作系统内核信息、依赖要素构成的知识项,将知识项添加到构建的知识库中。

优选地,第二步中,所述知识项设计为包括操作系统内核版本号、驱动开发依赖的头文件、头文件内的函数声明以及结构体定义。

优选地,第二步中,收集所述依赖要素的流程包括以下步骤:

第1步,收集已有版本的操作系统内核开发资源,这些资源以开发包的形式存在,不同的发行厂商、处理器架构、内核版本号三种信息作为一个独立的知识项集合;

第2步,从内核开发相关的头文件中自动提取所有的函数签名以及结构体定义,得到根据头文件构造出的知识项列表;

第3步,通过在/proc/kallsyms文件中能够查询到内核对外提供服务的所有导出函数符号,将内核内部调用函数的非直接依赖要素项与导出函数符号进行匹配以进一步获取依赖要素项,从第2步得到的所有函数声明中以kallsyms文件中列出的属性为t或t的函数符号名进一步提取,形成不同内核版本的知识集合,每个知识集合中包括函数签名、结构体声明信息。

优选地,第三步中,在存在已知外设硬件的情况下,在内核中加载驱动模块监控模块,对硬件使用时驱动模块的运行过程进行监控,获得驱动模块的接口调用信息;利用kprobe技术定义自己的回调函数,然后在静态扫描得到的驱动模块依赖的函数中动态地插入探测点,当内核执行流程执行到指定的探测函数时,调用该回调函数,收集所需的信息,同时内核回到原本的正常执行流程。

优选地,第三步具体为:

首先通过elf文件格式扫描硬件对应的驱动模块,获得其所有调用的接口函数符号名,不包括签名信息;

将静态扫描获得的调用接口名设置为探测点,kprobe备份被探测点的对应指令,然后将原始指令的入口点替换为断点指令;

当驱动模块运行过程中,cpu执行到探测点的断点指令时,就触发了一个陷阱trap,trap保存当前cpu的寄存器信息并调用对应的trap处理函数,该处理函数设置kprobe的调用状态并调用注册的pre_handler回调函数,kprobe向该函数传递注册的structkprobe结构地址以及保存的当前cpu寄存器信息;

kprobe单步执行前面所拷贝的被探测指令;

在单步执行完成后,kprobe执行用户注册的post_handler回调函数,根据运行地址查询/proc/kallsyms返回程序调用的函数符号名称,并记录当前执行的函数符号名;

最后,执行流程回到被探测指令之后的驱动模块正常流程继续执行;

这样通过对kprobe技术的使用,就监控到驱动模块运行时的接口调用信息,进而向知识库中添加由硬件、驱动模块、驱动模块的接口调用信息组成的知识项组成的知识项;并通过与第二步获得的知识项关联,最终得到硬件对操作系统内核的动态依赖项,具体为(硬件名,驱动模块,操作系统发布厂商,处理器架构,操作系统内核版本号,调用内核函数签名,结构体定义)的知识项。

(三)有益效果

本发明基于对驱动模块在操作系统中运行的原理以及操作系统内核导出信息的分析,总结了硬件的驱动模块运行在操作系统上所需的依赖要素,创建硬件兼容性知识库并在知识库中添加内核信息、运行依赖要素信息的知识项;通过在硬件设备运行过程中对其驱动模块的运行过程进行监控,得到其驱动模块的接口调用信息并存入知识库,形成设备信息、驱动模块、内核版本信息、接口调用信息的知识项。该方法能够为国产操作系统的硬件兼容性提供测试手段以及必要的测试信息,实现国产操作系统升级后在没有硬件设备的情况下进行硬件兼容性测试,有利于推动国产操作系统的兼容性测试技术发展。

具体实施方式

为使本发明的目的、内容、和优点更加清楚,下面结合实施例,对本发明的具体实施方式作进一步详细描述。

本发明提供了一种硬件兼容性知识库构建方法,具体实施步骤为:

第一步分析硬件依赖要素

本步骤分析驱动模块在操作系统中运行的原理,总结驱动模块运行的依赖要素,为后续创建硬件兼容性知识库提供数据源支撑。

驱动模块在操作系统中运行需要调用操作系统内核提供的接口服务,要构建硬件兼容性知识库首先要对这些接口的构成进行分析。通过对接口信息的分析,总结硬件兼容性的依赖要素,保证在构建硬件兼容性知识库时可以搜集到这些依赖要素并对依赖要素进行分级。这些接口以函数声明以及结构体定义的形式向模块开发提供使用,因此要分析依赖要素首先要找到这些函数以及结构体所在的路径;

操作系统内核为驱动模块开发人员提供了开发包,开发包中保存了大量的头文件,这些函数和结构体的声明就保存在头文件中,通过指定搜索路径就可以找到操作系统内核的头文件、头文件中的函数声明以及结构体定义;

操作系统在升级更新时伴随着大量代码级别的改动,其中的改动可能包括函数声明以及结构体定义的改动,为了保证原有驱动模块可以直接迁移到新的操作系统中运行,直接提供给驱动调用函数的签名以及结构体的定义不能进行修改,否则将导致原驱动模块无法使用,因此可以通过对函数的签名以及结构体的定义在不同版本的内核间匹配检测,给出对硬件的兼容性测试结果;

通过上述分析,操作系统硬件的依赖要素包括内核版本、内核导出函数签名和结构体定义;

第二步构建硬件兼容性知识库

本步骤分析操作系统内核组成,收集已有的操作系统内核开发资源,从开发资源中提取得到驱动模块对内核的依赖要素,在知识库中添加操作系统内核信息、依赖要素构成的知识项,将知识项添加到构建的知识库中;

经过分析,知识项设计为包括操作系统内核版本号、驱动开发依赖的头文件、头文件内的函数声明以及结构体定义;收集依赖要素的具体流程为:

第1步,从操作系统厂商收集已有版本的操作系统内核开发资源,这些资源一般以开发包的形式存在,不同的发行厂商+处理器架构+内核版本号作为一个独立的知识项集合;

第2步,从内核开发相关的头文件中自动提取所有的函数签名以及结构体定义,下表1是根据/lib/modules/3.10.0-862.el7.x86_64/source/include/linux/cdev.h头文件扫描构造出的的知识项列表:

表1

第3步,由于在第2步中,可能存在一些内核内部调用函数的非直接依赖要素项,通过在/proc/kallsyms文件中能够查询到内核对外提供服务的所有导出函数符号,将非直接依赖要素项与导出函数符号进行匹配以进一步精确获取依赖要素项,下表2是内核的全局函数符号导出表的部分数据,从第2步得到的所有函数声明中以kallsyms文件中列出的属性为t或t的函数符号名进一步提取,最终形成不同内核版本知识集合,每个知识集合中包括函数签名、结构体声明信息的知识项;最终知识库中将包括不同结合知识项的构成;

表2

第三步向知识库中添加驱动模块动态依赖项

以上构造了内核的知识库,在此基础上需要进一步在其中添加已适配的“硬件+驱动模块+内核”的知识项,作为后续操作系统硬件开展兼容性测试的比对项依据;

在存在已知外设硬件的情况下,在内核中加载驱动模块监控模块,对硬件使用时驱动模块的运行过程进行监控,获得驱动模块的接口调用信息。

利用kprobe技术定义自己的回调函数,然后在静态扫描得到的驱动模块依赖的函数中动态地插入探测点,当内核执行流程执行到指定的探测函数时,会调用该回调函数,即可收集所需的信息,同时内核最后还会回到原本的正常执行流程。具体实现流程为:

1、首先通过elf文件格式扫描硬件对应的驱动模块,获得其所有调用的接口函数符号名(不包括签名信息);

2、将静态扫描获得的调用接口名设置为探测点,kprobe备份被探测点的对应指令,然后将原始指令的入口点替换为断点指令;

3、当驱动模块运行过程中,cpu执行到探测点的断点指令时,就触发了一个陷阱trap,trap会保存当前cpu的寄存器信息并调用对应的trap处理函数,该处理函数会设置kprobe的调用状态并调用注册的pre_handler回调函数,kprobe会向该函数传递注册的structkprobe结构地址以及保存的当前cpu寄存器信息;

4、kprobe单步执行前面所拷贝的被探测指令;

5、在单步执行完成后,kprobe执行用户注册的post_handler回调函数,根据运行地址查询/proc/kallsyms返回程序调用的函数符号名称,并记录当前执行的函数符号名;

6、最后,执行流程回到被探测指令之后的驱动模块正常流程继续执行;

这样通过对kprobe技术的使用,就监控到驱动模块运行时的接口调用信息,进而向知识库中添加由硬件、驱动模块、驱动模块的接口调用信息组成的知识项;并通过与第二步获得的知识项关联,最终得到硬件对操作系统内核的动态依赖项,具体为(硬件名,驱动模块,操作系统发布厂商,处理器架构,操作系统内核版本号,调用内核函数签名,结构体定义)的知识项。

知识库可以支持分布式处理融合,知识项的收集可以经由多个不同组织在对某个实际硬件设备开展兼容性测试时,自动获取当前的测试知识,测试完成后向统一的归口单位上报,最终经过知识库统一整合各个节点的知识项,形成完备的硬件兼容性的测试知识项,为后续操作系统升级时缺少实际的硬件开展兼容性测试提供较为方便的测试证据。

可以看出,本发明的一种硬件兼容性知识库构建方法具有如下特点:

1)是一种适用于当前国产操作系统的硬件开展兼容性测试的知识库构建方法,推动了国产操作系统硬件兼容性测试方法的研究;

2)形成了分布式的可融合知识库,集合了大量版本的不同国产操作系统内核信息,硬件驱动模块运行依赖要素知识,汇聚多个操作系统厂商,第三方测试机构的测试知识推动国产操作系统发展;

硬件兼容性知识库的构建可以为基于运行要素比对的国产操作系统兼容性测试方法提供数据基础,可以后续为构建不同厂商的国产操作系统兼容性测试技术提供良好的基础。

以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明技术原理的前提下,还可以做出若干改进和变形,这些改进和变形也应视为本发明的保护范围。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1