Kernel-Modules

從核心模組呼叫 Linux 核心方法

  • June 17, 2021

從 Linux 的核心模組呼叫 C 文件中的核心函式的正確方法是什麼?

我想從我exit_task_namespaceslinux/nsproxy.c第一個核心模組呼叫

我正在這樣做:

#include <linux/nsproxy.h>
…

static ssize_t device_read(struct file *flip, char *buffer, size_t len, loff_t *offset)
{
   struct task_struct *task = current;
   …
   exit_task_namespaces(task);
   …
}

當我嘗試時,make我收到以下錯誤:

ERROR: "exit_task_namespaces" [/home/.../lkm_example.ko] undefined!
make[2]: *** [scripts/Makefile.modpost:94: __modpost] Error 1
make[1]: *** [Makefile:1673: modules] Error 2
make[1]: Leaving directory '/usr/src/linux-headers-5.4.0-73-generic'
make: *** [Makefile:3: all] Error 2

我可以在文件中看到/usr/src/linux-headers-5.4.0-73-generic/include/linux/nsproxy.h該方法存在。

這是我的 Makefile:

obj-m += lkm_example.o
all:
   make -C /lib/modules/$(shell uname -r)/build M=$(PWD) modules

模組只能訪問導出的符號,並且exit_task_namespaces不會被導出——所以即使它在標頭檔中可見,它也不能在模組中使用。

導出的符號可以按照您的預期訪問,沒有什麼特別的事情要做。

引用自:https://unix.stackexchange.com/questions/654555