在之前的创建简单的Kernel System Call内,如果每次想要修改system call的源代码,都要重新执行一次编译内核、make install、重新启动, 步骤麻烦而且还需要浪费很多时间。
一个简单的方法是,可以在system call的源代码中创建一个 函数指针,并将其暴露给外部的 kernel module;kernel module可以自己设置真正的函数逻辑,然后绑定这个函数指针。这样原来的system call就成了一个 wrapper/decorator。
1. 修改原本的system call代码
接着上次的代码,这次将原本的 kernel根目录下的kernel/hello.c
的代码修改为:
#include <linux/linkage.h>
#include <linux/kernel.h>
#include <linux/module.h>
#include <linux/errno.h>
long (*stub_hello_call)(long, long) = NULL; // 函数指针
EXPORT_SYMBOL(stub_hello_call); //
asmlinkage long sys_hello(long a,