我修改了内核源代码r8169.c
并计算timestamp
,如下所示:
s64 a;
EXPORT_SYMBOL(a);
a = time();
我没有添加原始时间戳函数调用
我在内核的另一个源文件中使用变量a:ip_input.c
extern s64 a;
s64 b,c;
b= time();
c = b-a;
我收到此错误:
ERROR: undefined reference to a
如何解决?
答案 0 :(得分:1)
从不完整的源代码中,我猜是
s64 a;
EXPORT_SYMBOL(a);
a = time();
位于函数内部,因此无法导出a
,因为它是该函数的本地函数。
要在此模块之外使用a
,您必须使用文件范围定义它,例如
s64 a;
EXPORT_SYMBOL(a);
void some_function()
{
a = time();
}
这允许导出a
的符号,然后在另一个模块中使用。
答案 1 :(得分:1)
r8169.c是一个模块,而ip_input.c在主内核中。主内核无法从模块导入符号。解决此问题的方法是在ip_input.c中声明您的变量,并从r8169.c导入它。您还必须使用Olaf提到的文件范围。
ip_input.c:
s64 a, b, c;
EXPORT_SYMBOL(a);
void someFunc() {
b=time();
c=b-a;
}
r8169.c:
extern s64 a;
void someFunc() {
a=time();
}