Я пишу модуль ядра 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*
.