我正在编写Linux内核模块,并希望获得指向设备上全局网络名称空间的struct net*
指针。我在模块初始化函数中尝试了以下代码:
// test-module.c
#include <linux/kernel.h>
#include <linux/module.h>
#include <net/net_namespace.h>
int init_dev (void)
{
struct net *net1;
printk ("Init Module\n");
net1 = get_net_ns_by_pid(1); // getting NS for PID 1 (init process)
if(net1 != NULL){
printk ("Init Module --- Got net ns pointer \n");
}
else {
printk ("Init Module --- Blank net ns pointer \n");
}
return 0;
}
void cleanup (void)
{
printk ("Cleaning Up the Module\n");
return;
}
module_init (init_dev);
module_exit (cleanup);
Makefile:
obj-m += test-module.o
all:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules
clean:
make -C /lib/modules/$(shell uname -r)/build M=$(PWD) clean
我可以编译模块,但是当我尝试使用sudo insmod test-module.ko
插入模块时,在dmesg中得到了错误:
test-module: Unknown symbol get_net_ns_by_pid (err 0)
我想问问是否有人知道如何获取struct net*
指针。
答案 0 :(得分:0)
如@Tsyvarev所述,我在文件末尾添加了以下行,并且运行良好:
MODULE_LICENSE("GPL");