如何更改内核模块中EXPORT_SYMBOL导出的名称?

时间:2017-04-14 09:25:48

标签: linux-kernel kernel kernel-module

我有一组代码可以在模块foo导出的函数mod上进行中继。 我有一个较新版本的mod代替导出foo_implementationfoo在那里变成了一个宏......

所以,问题是:如何表达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);

???

1 个答案:

答案 0 :(得分:0)

实际上,有两种方式:

  1. Hackish,在问题中提出。它以某种方式工作,允许您至少加载模块。
  2. 正常一个:)只是重建受影响的kmod,而不是重建它的整个代码集。这将使IPHostEntry host1 = Dns.GetHostEntry(""); // Gives me the PC name IPHostEntry host2 = Dns.GetHostEntry(IPAddress.Parse("127.0.0.1")); // Gives me the hosts entry 正常工作,问题将在没有任何暴力的情况下发生。