Ubuntu16.04添加系统调用函数

开发环境

  • Ubuntu16.04
  • VMware Workstation Pro 15.0
  • Linux内核版本 5.0.1

我们需要完成

  • 添加三个新的系统调用,完成任意一个功能,重新编译和运行内核,使新的系统调用可用
  • 编写用户态程序,使用新的系统调用,证明其可行

步骤

Step 1:

添加系统调用号,用 gedit 打开 /usr/src/linux-5.0.1/arch/x86/entry/syscalls/syscall_64.tbl

sudo /usr/src/linux-5.0.1/arch/x86/entry/syscalls/syscall_64.tbl

添加了 335 号系统调用函数:
Ubuntu16.04添加系统调用函数_第1张图片

Step 2:

添加系统调用函数申明,用 gedit 打开:/usr/src/linux-5.0.1/include/linux/syscalls.h

sudo /usr/src/linux-5.0.1/include/linux/syscalls.h

增加函数:hello注意保持格式一致
例如:

asmlinkage long sys_hello(void)

Ubuntu16.04添加系统调用函数_第2张图片

Step 3:

定义系统调用函数:
Ubuntu16.04添加系统调用函数_第3张图片

Step 4:

编译内核、安装内核:

sudo make mrproper
sudo make clean
sudo make menuconfig
sudo make -j2
sudo make modules_install
sudo make install

编译安装详细过程

完成后重启加载内核

Step 5:

编写程序验证系统调用:text.c
#include
#include
#include
#include

int main()
{
long ret1;
ret1 = syscall(335);
printf(“return %ld\n”, ret1);
return 0;
}

Step 6:

编译并运行C程序:

gcc text.c -o text
./text

Ubuntu16.04添加系统调用函数_第4张图片

dmesg | tail -6 #查看日志的最后六行 

在这里插入图片描述
成功!
小知识:Linux 的dmesg 命令集合详解

你可能感兴趣的:(操作系统)