我正在编写驱动程序作为模块。我必须从模块调用系统调用sys_epoll_create1()
。我写了一个这样的模块:
#include <linux/init.h>
#include <linux/module.h>
#include <linux/kernel.h>
#include <linux/net.h>
#include <linux/syscalls.h>
#include <linux/eventpoll.h>
#include <net/sock.h>
MODULE_LICENSE("GPL");
static int hello_init(void)
{
sys_epoll_create1(1);
return 0;
}
static void hello_exit(void)
{
}
module_init(hello_init);
module_exit(hello_exit);
编译日志显示如下:
~/test $ make
make -C /lib/modules/4.2.0-16-generic/build M=/home/kyl/test modules
make[1]: Entering directory '/usr/src/linux-headers-4.2.0-16-generic'
CC [M] /home/kyl/test/hello.o
Building modules, stage 2.
MODPOST 1 modules
WARNING: "sys_epoll_create1" [/home/kyl/test/hello.ko] undefined!
CC /home/kyl/test/hello.mod.o
LD [M] /home/kyl/test/hello.ko
make[1]: Leaving directory '/usr/src/linux-headers-4.2.0-16-generic'
在我查看时,sys_epoll_create1()
linux/syscalls.h
声明
asmlinkage long sys_epoll_create1(int flags);
我已将<linux/syscalls.h>
作为头文件,为什么gcc仍显示WARNING: "sys_epoll_create1" [/home/kyl/test/hello.ko] undefined!
?