Linux下实现一个系统调用
环境: 环境: cenos7 kernel: 3.10.0-862.el7.x86_64 gcc: gcc version 4.8.5 20150623 (Red Hat 4.8.5-36) (GCC) 新版内核: linux-5.2-rc2 准备: 安装相关软件: yum install make automake vim perl openssl* elfutils-libelf- curl gcc wget flex git build-essential ncurses-devel xz-utils libssl-dev bc flex libelf-dev bison elfutils-libelf-devel -y 下载内核源码并解压: tar -xf linux-5.2-rc2.tar.gz 编写系统调用: 新增系统调用表条目: cp syscall_64.tbl syscall_64.tbl.backup linux-5.2-rc2/arch/x86/entry/syscalls/syscall_64.tbl 新增下面一条 + 434 common iadd_test __x64_sys_iadd_test 其中434为新增的调用号 增加函数声明 linux-5.2-rc2/include/linux/syscalls.h:新增一行 asmlinkage long sys_iadd_test(int one, int two); 新增系统调用定义 kernel/linux-5.2-rc2/fs/iadd_test.c #include <linux/printk.h> #include <linux/syscalls.h> #include "internal.h" long do_iadd(const int one, const int two ) { long sum = 0L; sum = one + two; return sum; } SYSCALL_DEFINE2(iadd_test, const int, one, const int, two) { printk("call iaddtest..."); return do_iadd(one, two); } 修改Makfile 增加iadd_test.o ...