我正在关注this tutorial尝试向Linux添加系统调用,我完成了标题为“安装内核”的部分,然后重新启动了系统。当它开始备份时,我收到了这条消息:
我在VirtualBox上运行Lubuntu 16.04。我可以想象的唯一可能的原因是本教程使用的是Linux 4.2.0内核,而我使用的是4.4.0,但在重新启动虚拟机之前一切正常。
使用4.4.0内核而不是4.2.0内核这么简单吗?如果是这样,我需要与修复此内容的教程有什么不同?
以下是教程要执行的步骤(当然,我根据我使用的内核将4.4.0替换为4.4.0):
安装要求:
sudo apt-get source linux-image-$(uname -r)
sudo cp -r linux-4.2.0 /usr/src
sudo apt-get update
sudo apt-get build-dep linux-image-$(uname -r)
sudo apt-get install kernel-package
sudo apt-get install libncurses-dev
添加系统调用:
cd /usr/src/linux-4.2.0
mkdir hello
将以下内容放在./hello/hello.c中:
#include <linux/kernel.h>
asmlinkage long sys_hello(void) {
printk(“Hello World!\n”); // printk prints the message to the kernels logs
return 0;
}
将以下内容放在./hello/Makefile:
中obj-y := hello.o
将./Makefile的第900行(第916行(4.4.0)更新为:
core-y += kernel/ mm/ fs/ ipc/ security/ crypto/ block/ hello/
编辑./arch/x86/entry/syscalls/syscall_64.tbl并在最后64位系统调用之后添加此行(在4.4.0上调用326而不是323):
323 64 hello sys_hello
在include / linux / syscalls.h中的#endif
之前添加此行:
asmlinkage long sys_hello(void);
编译并安装内核:
make menuconfig # accept default values
sudo make modules_install install
最后,reboot
,导致内核恐慌的原因是4.4.0,而不是4.2.0。
我在使用4.2.0 linux内核的Lubuntu 15.10上重新编写了教程,它运行良好。所以我现在的问题是为什么该教程会破坏4.4.0内核,但它在4.2.0上运行良好?