步骤
下载高版本内核
添加系统调用号 sudo gedit arch/x86/syscalls/syscall_64.tbl
添加服务例程(系统调用实现)sudo gedit kernel/sys.c
声明系统调用 sudo gedit arch/x86/include/asm/syscalls.h
编译内核(要下载一些插件)
重启
编写程序验证是否成功
查看系统内核版本 ~$ uname -srm #uname -a Linux 3.13.0-32-generic x86_64下载稍高版本的内核
地址
将其移动到/usr/src目录下
解压后
tar zxvf进入目录添加自己的系统调用
sudo gedit kernel/sys.c // 末尾添加自己的函数
return 0; } asmlinkage void sys_hello(void) { printk("Hello!This is zzl's syscall test"); } #endif /* CONFIG_COMPAT */这个asmlinkage大都用在系统调用中
sudo gedit arch/x86/include/asm/syscalls.h // 声明 /* kernel/ioport.c */ asmlinkage long sys_ioperm(unsigned long, unsigned long, int); asmlinkage long sys_iopl(unsigned int); asmlinkage void sys_hello(void); sudo gedit arch/x86/syscalls/syscall_64.tbl // 添加调用号加个666的调用 351 i386 sched_setattr sys_sched_setattr 352 i386 sched_getattr sys_sched_getattr 666 64 hello sys_hello添加依赖
sudo apt-get install build-essential sudo apt-get install libelf-dev sudo apt-get install libncurses-dev sudo apt-get install flex sudo apt-get install bison编译内核和安装内核.
依次输入这四条语句
sudo make mrproper sudo make clean sudo make menuconfig sudo make -j4 (-jx来使用x线程进行并发编译),线程越多编译越快! 。22.07--11.24安装modules: sudo make modules_install
安装: sudo make install
编译gcc -o a a.c
运行编译的程序./a
#include<stdio.h> #include<stdlib.h> #include<sys/types.h> #include<sys/stat.h> #include<unistd.h> int main() { long int a=syscall(666); printf("return %ld\n",a); return 0; }输入 dmesg 显示printk的输出(在最后)
https://blog.csdn.net/qq_41175905/article/details/80529245
https://www.jianshu.com/p/061ec6c81ecf