尝试向Linux添加系统调用后内核出现紧急情况

时间:2016-12-29 03:04:27

标签: linux linux-kernel kernel system-calls panic

我正在关注this tutorial尝试向Linux添加系统调用,我完成了标题为“安装内核”的部分,然后重新启动了系统。当它开始备份时,我收到了这条消息:

enter image description here

我在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上运行良好?

0 个答案:

没有答案