[发明专利]一种Linux内核模块中有限数量函数重载的方法及装置在审
申请号: | 201910922723.X | 申请日: | 2019-09-27 |
公开(公告)号: | CN110659085A | 公开(公告)日: | 2020-01-07 |
发明(设计)人: | 连志军;王平江;张锴;张顺林;洪亮;张雪俊;焦明杰;陈曼林;徐慧;魏梦晴 | 申请(专利权)人: | 泉州华中科技大学智能制造研究院;泉州华数机器人有限公司 |
主分类号: | G06F9/445 | 分类号: | G06F9/445 |
代理公司: | 35229 泉州市宽胜知识产权代理事务所(普通合伙) | 代理人: | 廖秀玲 |
地址: | 362000 福建省泉州市丰泽区*** | 国省代码: | 福建;35 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 加载 虚拟模块 函数重载 拓展 多义性 导出函数 函数模块 函数实现 模块定义 主控程序 符号表 导出 内核 灵活 失败 外部 | ||
本发明属于Linux操作系统技术领域,特别的,涉及一种Linux内核模块中有限数量函数重载的方法及装置。通过将要实现多义性的函数,在主控程序中分多种CASE,每种CASE在不同拓展模块定义,同时对外导出函数符号表,并根据需要加载特定拓展函数模块,灵活实现函数重载。本发明在所有模块最后加载了虚拟模块,虚拟模块中定义了所有拓展模块中导出的函数,但所有函数实现为空,直接return,虚拟模块加载是为了避免因某些模块未加载而存在未定义的外部符号,导致内核加载失败。
技术领域
本发明属于Linux操作系统技术领域,特别的,涉及一种Linux内核模块中有限数量函数重载的方法及装置。
背景技术
在Linux内核模块的开发中主要基于C语言,但经常会涉及函数的多义性,即一个函数名有多种特定的实现,实现不同的拓展功能。但是在内核模块开发中C语言不像C++能支持函数重载,无法由不同的函数实现。对灵活实现特定功能造成极大不便。当程序主模块只调用同一函数实现不同拓展功能时,可以将不同拓展功能写在多个目标文件中,但是会因在多个目标文件中含有相同函数定义,在目标文件链接时候出现符号表重定义错误,无法实现函数的重载。
对于动态库和动态库中的符号冲突,加载器的原则是广度优先(BFS),即首先加载主程序,然后加载所有主程序显式依赖所有动态库,然后加载动态库们依赖的动态库,直到全部加载完毕。载入两个动态库时,如果存在相同名称的函数,只有第一个加载的函数生效,即所有对该函数的调用都指向第一个加载的动态库中的函数,没有办法实现导出函数重载。
发明内容
针对现有技术,本发明提出一种在Linux操作系统下实现内核模块中有限数量函数重载的方法及装置,能够实现函数重载,根据需要加载不同的拓展模块,使得程序的功能更加容易裁剪和灵活组合。
本发明采用如下技术方案:
一种Linux内核模块中有限数量函数重载的方法,包括以下步骤,
S1、程序主模块中调用func()函数,但是func()函数有多种不同的具体实现,在程序源码一次编译链接后,自由选择具体实现,不需要再编译源码。程序主模块中调用func()函数,func()函数分多种case,分别调用func_0(),func_1(),…,func_n()。
S2、拓展模块A、B、…、Max中分别定义func_0(),func_1(),…,func_n()函数的具体实现,并通过EXPORT_SYMBOL将函数func_0(),func_1(),…,func_n()导出。
S3、拓展功能模块加载并与程序主模块一起链接,程序主模块在链接的时候就能找到函数func()的对应实现,实现内核模块中有限数量的函数重载。实际运行时根据需要加载对应拓展模块,当程序被装载的时候,系统的动态链接器会将程序所需的动态链接库装载到进程的地址空间中,并将所有未决议的符号绑定到相应的动态链接库中,进行重定位。
本技术方案进一步的优化,还包括虚拟模块,虚拟模块中定义了所有拓展模块中导出的函数,但所有函数实现为空,直接return,所述虚拟模块在所有模块最后加载,避免因某些模块未加载而存在未定义的外部符号,导致内核加载失败。
本技术方案进一步的优化,所述步骤S3,根据实际函数实现需要,加载不同数量的拓展模块。根据实际函数实现需要,加载特定的拓展模块,可以有限个拓展模块同时加载,也可以只加载其中的某些拓展模块。实现内核模块中特定功能函数的重载及灵活组合。
一种Linux内核模块中有限数量函数重载的装置,包括,
程序主模块,用于调用func()函数,func()函数分多种case,分别调用func_0(),func_1(),…,func_n();
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于泉州华中科技大学智能制造研究院;泉州华数机器人有限公司,未经泉州华中科技大学智能制造研究院;泉州华数机器人有限公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201910922723.X/2.html,转载请声明来源钻瓜专利网。