我有两个 Linux 内核模块,其中一个可以为另一个提供一些功能。但使用该功能并不是必需的,即使第一个模块不存在,第二个模块也可以(并且应该)工作。
如果我只是从第一个模块导出函数并在第二个模块中使用它,则第二个模块依赖于该符号,并且在没有第一个模块的情况下无法加载。
解决方案之一是让用户脚本在 /proc/kallsym 中查找第一个模块中的函数,如果该函数存在,则脚本将其地址作为参数传递给第二个模块,然后第二个模块从中生成指针。但出于显而易见的原因,我不喜欢这个解决方案。
是否有更正确和优雅的解决方案允许第二个模块获取第一个模块中某个符号的地址,但避免硬依赖?
最后我找到了解决方案:内核有symbol_get()和symbol_put(),这使我有机会在另一个模块中查找任意符号(当然,它需要导出)并防止模块在我使用其时卸载象征。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)