添加系统调用

通过重新编译内核来添加系统调用

注意新内核与系统内核版本,需要的辅助工具:sudo apt install bison flex pkg-config build-essential libncurses5-dev libssl-dev libelf-dev

内核解压在/usr/src.目录下

添加系统调用号

vim ./arch/x86/entry/syscalls/syscall_64_tbl(本机是64位系统,如果是32位系统,修改syscall_32_tbl)
必须确保系统调用号是独一无二的

333     common     mycopy     sys_mycopy

声明系统调用函数原型

vim ./include/linux/syscall.h
asmlinkage long sys_mycopy(const char *src_file, const char *copy_file);

添加系统函数定义

vim ./kernel/sys.c
还可以创建一个模块,但是要修改根目录下的makefile文件

asmlinkage long sys_mycopy(const char *src_file,const char *copy_file){    
        int infd,outfd,count;    
        char buf[256];    
        mm_segment_t fs;    
        fs = get_fs();    
        set_fs(get_ds());        
        if((infd=sys_open(src_file,O_RDONLY,0)) == -1)    {        
            return 1;            
        }
        if((outfd=sys_open(copy_file,O_WRONLY | O_CREAT, S_IRUSR | S_IWUSR))== -1){
            return 2;    
        }
        while((count = sys_read(infd,buf,256))>0)
        {
            if(sys_write(outfd,buf,count)!= count)        
                return 3;        
        }    
        if(count == -1) return 4;    
        sys_close(infd);    
        sys_close(outfd);    
        set_fs(fs);    
        return 0;
 }

编译内核

sudo make menuconfig  //选择save然后退出就行,生成.config文件
sudo make -j 2;        //2个线程编译
sudo make modules_install //安装模块
sudo make install //安装内核

重启系统,进入新内核

  • 重启系统,然后长按shift进入引导界面,高级选项
  • 选择编译好的内核: 注意区分版本,是新编译好的版本是4.14.0,之前下载的那个是末尾有个old,我们选择新编译好的,进入系统。

测试调用

#include<linux/kernel.h>
#include<sys/syscall.h>
#include<unistd.h>

long int a=syscall(333,"test.c","222.c");
posted @ 2020-02-28 09:31  friedCoder  阅读(174)  评论(0)    收藏  举报