2017-04-14 11 views
0

我有一组代码在模块mod导出的函数foo上继续。 而我有一个mod的较新版本,它可以导出foo_implementation。 的foo成为有宏...如何更改由内核模块中的EXPORT_SYMBOL导出的名称?

所以,问题是:如何表达EXPORT_SYMBOL()foo_implementation导出为foo 用最少的修改代码,如果可能的话...

难道是好的改变,说

void foo_implementation(int arg) { ... } 
EXPORT_SYMBOL(foo_implementation); 

void foo_implementation(int arg) { ... } 
EXPORT_SYMBOL(foo_implementation); 

#ifdef foo 
#undef foo 
#endif 
void foo(int arg) { return foo_implementation(arg); } 
EXPORT_SYMBOL(foo); 

???

+0

'void(* foo)()'声明一个**指针**给函数。虽然调用'foo()'和'foo_implementation()'在语义上是等价的,**符号**'foo'和'foo_implementation'是**不同**。而且,如果'foo'被定义为一个*宏*,你的声明是不正确的。 '我有一组代码可以在模块mod输出的函数foo上传递函数。' - 是否允许将'foo()'的定义添加到这个代码中? – Tsyvarev

+0

我希望是的:) 即使你的意思是用'void foo(){foo_impl();}'替换'void(* foo)()= ...' – jno

+0

我的意思是修改需要'foo'导出的代码(换句话说,**使用**'foo'),而不是实际导出它的代码。 – Tsyvarev

回答

0

事实上,有方式:

  1. hackish的,在这个问题提出的。它以某种方式工作,允许您至少加载模块。
  2. 正常人:)不仅重建不仅受到kmod影响,而且重建的整个代码集。这将使#define正常工作,问题将自行消失,无任何暴力。
相关问题