添加系统调用

    科技2022-07-15  125

    添加系统调用

    环境Ubuntu12.04 Linux 3.13.0-32下载Linux 3.14.1版本内核编译用2-3小时

    步骤

    下载高版本内核

    添加系统调用号 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

    reboot后

    uname -a 查看内核

    编译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

    Processed: 0.014, SQL: 8