[发明专利]一种硬件兼容性知识库构建方法有效
申请号: | 201910903233.5 | 申请日: | 2019-09-24 |
公开(公告)号: | CN110716873B | 公开(公告)日: | 2023-09-26 |
发明(设计)人: | 高艳鹍;安恒;陈鹏;陶金龙 | 申请(专利权)人: | 北京计算机技术及应用研究所 |
主分类号: | G06F11/36 | 分类号: | G06F11/36 |
代理公司: | 中国兵器工业集团公司专利中心 11011 | 代理人: | 王雪芬 |
地址: | 100854*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 硬件 兼容性 知识库 构建 方法 | ||
1.一种硬件兼容性知识库构建方法,其特征在于,包括以下步骤:
第一步分析驱动模块运行原理,确定驱动模块运行时对操作系统内核的依赖要素;
第二步获取所述依赖要素以构建硬件兼容性知识库;
第三步向所述知识库中添加驱动模块动态依赖项;
第一步中,首先对驱动模块在操作系统中运行时所调用操作系统内核的接口构成进行分析,确定硬件兼容性的依赖要素,使得在构建硬件兼容性知识库时能够搜集到这些依赖要素并对依赖要素进行分级;
第一步中,确定所述依赖要素包括内核版本、内核导出函数签名和结构体定义;
第二步中,收集已有的操作系统内核开发资源,从开发资源中提取得到驱动模块对内核的依赖要素,在知识库中添加操作系统内核信息、依赖要素构成的知识项,将知识项添加到构建的知识库中;
第二步中,所述知识项设计为包括操作系统内核版本号、驱动开发依赖的头文件、头文件内的函数声明以及结构体定义;
第二步中,收集所述依赖要素的流程包括以下步骤:
第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技术的使用,就监控到驱动模块运行时的接口调用信息,进而向知识库中添加由硬件、驱动模块、驱动模块的接口调用信息组成的知识项组成的知识项;并通过与第二步获得的知识项关联,最终得到硬件对操作系统内核的动态依赖项,具体为(硬件名,驱动模块,操作系统发布厂商,处理器架构,操作系统内核版本号,调用内核函数签名,结构体定义)的知识项。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于北京计算机技术及应用研究所,未经北京计算机技术及应用研究所许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201910903233.5/1.html,转载请声明来源钻瓜专利网。