Linux添加系统调用

0. 环境准备

Ubuntu16.04 Desktop x86_64
Linux Kernel 4.4.0(tar.xz)

1. 解压缩内核包

xz -d linux-4.4.0.tar.xz
tar -xvf linux-4.4.0.tar

2. 添加系统调用

  • 添加系统调用号
    编辑 linux-4.4.0/arch/x86/entry/syscalls/syscall_64.tbl
    在编号332添加新的系统调用号,格式如同332
    例如
333 common  victim          sys_victim
add syscall number.png
  • 添加系统调用函数声明
    编辑linux-4.4.0/include/linux/syscalls.h
    在syscalls.h文件最后添加新的函数声明,函数名同上一步添加的函数名,声明格式如同syscalls.h文件中的前几行
    例如
asmlinkage long sys_victim(void);
  • 添加系统调用函数定义
    编辑linux-4.4.0/kernel/sys.c
    文件最后添加函数定义
    例如
SYSCALL_DEFINE0(victim)
{
    ......
}

3. 编译安装内核

  • 配置内核参数
    使用make menuconfig命令图形化配置内核参数,配置完成后选择Save,然后选择Exit
    PS.过程中可能报错缺失ncurses相关组件,可用如下命令安装
sudo apt install libncurses5-dev
  • 编译内核
    使用make命令编译内核,可以声明 -jn(n为数字)选项,多线程编译
    例如
make -j8

PS.过程中可能报错确实libelf,可用如下命令安装

sudo apt install libelf-dev
  • 安装内核模块
    使用命令make modules_install安装内核模块

  • 安装内核
    使用命令make install安装内核

  • 重启并选择新内核
    PS.重启前需要修改默认内核,见linux修改默认内核

你可能感兴趣的:(Linux添加系统调用)