我在做Linux内核编程。当我添加我的系统调用时,我收到错误“linux / linkage.h没有这样的文件或目录”。在source.c文件中,所以我移动到 include / linux并使用vi检查linkage.h。但是,linkage.h代码在那里。 为什么会出现这种情况
#include <linux/kernel.h>
#include <linux/linkage.h>
asmlinkage long sys_helloworld(void){
printk(KREN_EMERG "HelloWorld!\n");
return 1;
}
P.S)
root @ kernel-VirtualBox:/usr/src/linux-4.4.1/arch/x86/entry/syscalls#vi syscalls_64.tbl
我添加了
326 64 helloworld sys_helloworld
326是系统调用的最后一个数
和
root @ kernel-VirtualBox:/usr/src/linux-4.4.1/include/linux# vi syscalls.h
在行尾(#endif上面)
asmlinkage long sys_helloworld(void);
和
root @ kernel-VirtualBox:/usr/src/linux-4.4.1/kernel# vi Makefile
在obj-y
添加了helloworld.oobj-y = fork.o exec_domain.o panic.o \
cpu.o exit.o softirq.o resource.o \
sysctl.o sysctl_binary.o capability.o ptrace.o user.o \
signal.o sys.o kmod.o workqueue.o pid.o task_work.o \
extable.o params.o \
kthread.o sys_ni.o nsproxy.o \
notifier.o ksysfs.o cred.o reboot.o \
async.o range.o smpboot.o helloworld.o
我在linux-4.4.1 / kernel上创建helloworld.c
#include <linux/linkage.h>
#include <linux/kernel.h>
asmlinkage long sys_helloworld(void){
printk(KERN_EMERG "Helloworld\n");
return 1;
}
然后我重新编译内核,然后编译helloworld.c,但是它出现错误linux / linkage.h没有这样的文件或目录