Linux kernel 如何在内核模块中更改由EXPORT_符号导出的名称?
我有一组代码,它在模块Linux kernel 如何在内核模块中更改由EXPORT_符号导出的名称?,linux-kernel,kernel,kernel-module,Linux Kernel,Kernel,Kernel Module,我有一组代码,它在模块mod导出的函数foo上传递。 我有一个较新版本的mod,它可以导出foo_实现。 foo在那里变成了一个宏 因此,问题是:如何表达EXPORT\u SYMBOL()将foo\u实现导出为foo? 如果可能的话,只需对代码进行最小的更改 比如说,改变一下可以吗 void foo_实现(int arg){…} 导出符号(foo_实现); 到 void foo_实现(int arg){…} 导出符号(foo_实现); #ifdef foo #undef foo #恩迪夫 vo
mod
导出的函数foo
上传递。
我有一个较新版本的mod
,它可以导出foo_实现
。
foo
在那里变成了一个宏
因此,问题是:如何表达EXPORT\u SYMBOL()
将foo\u实现导出为foo
?
如果可能的话,只需对代码进行最小的更改
比如说,改变一下可以吗
void foo_实现(int arg){…}
导出符号(foo_实现);
到
void foo_实现(int arg){…}
导出符号(foo_实现);
#ifdef foo
#undef foo
#恩迪夫
void foo(int arg){返回foo_实现(arg);}
出口标志(foo);
实际上,有两种方法:
void(*foo)(
声明指向函数的指针。虽然调用foo()
和foo_实现()
在语义上是等价的,但是符号foo
和foo_实现
是不同的。此外,如果foo
一直被定义为宏,则您的声明是不正确的我有一组代码,它依赖于模块mod导出的函数foo。
-是否允许添加只调用foo实现()
的foo()
的定义到该代码中?我希望是:)也就是说,你的意思是用void foo(){foo impl()}
替换void foo(){foo impl()}
?我的意思是修改代码,它需要导出foo
(换句话说,它使用foo
),而不是实际导出它的调用方。修复调用方太复杂了,因为有几个\define
使用此foo
,我不确定我是否正确找到了所有调用方。因此,最好是修复被调用方,以提供调用方希望看到的入口点代码>,并将此声明替换为void foo_实现(void);静态内联void foo(void){foo_implementation();}
。修复导出符号也不是一件容易的任务。顺便说一句,宏EXPORT\u SYMBOL
在中定义。