linux内核源代码中的错误?

时间:2014-05-20 08:14:59

标签: c linux linux-kernel kernel extern

我修改了内核源代码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 

如何解决?

2 个答案:

答案 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();
}