如何在linux内核中重用变量?

时间:2014-04-22 10:11:21

标签: c linux linux-kernel global-variables procfs

extern unsigned long current_rx_time;
EXPORT_SYMBOL(current_rx_time);
int netif_rx(struct sk_buff *skb) 
{

current_rx_time = jiffies;

}

我在dev.c中修改了内核源代码,如上所示。后来我在procfs中创建了一个可加载的内核模块,并使用currentrx_time将它发送到用户空间,如下所示:

static int my_proc_show(struct seq_file *m, void *v)
{
    //I AM JUST PRINTING THAT VALUE BELOW

    seq_printf(m, "%lu\n", current_rx_time *1000/HZ);

    return 0;
}

但是我在上面编译我的模块时遇到错误,因为current_rx_time未声明。有人能告诉我如何解决这个问题吗?

2 个答案:

答案 0 :(得分:2)

首先,你需要声明你的变量然后你可以导出它。

所以只需在dev.c中声明它

unsigned long current_rx_time;

然后将其导出为dev.c

EXPORT_SYMBOL(current_rx_time);

以及你想要使用它的其他可加载模块(比如在temp2.​​c中)...

extern unsigned long current_rx_time;

现在确保当你编译temp2.​​c时,dev.c也正在编译。

答案 1 :(得分:0)

第二个代码需要声明外部变量,因此链接器可以知道它来自外部:

extern unsigned long current_rx_time;