龙空技术网

操作系统项目:向Linux内核添加一个系统调用

Linux那些事 247

前言:

而今你们对“ubuntu系统调用”大体比较关怀,你们都需要了解一些“ubuntu系统调用”的相关文章。那么小编在网络上网罗了一些对于“ubuntu系统调用””的相关内容,希望各位老铁们能喜欢,兄弟们快快来学习一下吧!

内容

向Linux增加一个系统调用撰写一个应用测试程序调用该系统调用使用ptrace或类似的工具对该测试程序进行跟踪调小编自己整理了一些个人觉得比较好的学习书籍、视频资料有需要的可以私信【内核】自行免费领取!

环境

1.vmware workstation 15.0.0

2.ubuntu-18.10-desktop

3.linux-4.18.14

步骤

一.准备环境

在终端操作:

sudo apt-get update  //更新系统源码 sudo apt-get install vim //安装vimsudo apt-get install libncurses5-dev libssl-dev  //下载依赖包sudo apt-get install libelf-devsudo apt-get install build-essential openssl  sudo apt-get install zlibc minizip  sudo apt-get install libidn11-dev libidn11sudo apt-get install flex bison

二.构建新内核

1.准备

在下载linux-4.18.14.tar.gz

解压

将在官网下好的内核直接拉到ubuntn里,然后将压缩包用指令移到/usr/src目录下(过程需要root权限)。

sudo su //获取root

sudo mv 压缩包位置 /usr/src //移动文件

cd /usr/src //切换到该目录下进行操作

sudo tar -xvflinux-4.18.14.tar.gz //解压

2.添加系统调用

先将目录切换到解压后的内核里操作

sudo vim kernel/sys.c //添加自己的函数

这里添加了sys_helloworld

2.sudo vim arch/x86/include/asm/syscalls.h //添加声明

3.sudo vimarch/x86/entry/syscalls/syscall_64.tbl //添加调用号

3.删除无用的文件

sudo make mrproper

sudo make clean

4.配置

sudo make menuconfig

此处直接save,exit即可,无需修改

5.编译新内核并安装

A.编译

sudo make -j2 //将处理机内核总数调整为4,会明显加快编译速度

(-j2为开启双线程编译)

B.安装

sudo make modules_install

sudo make install

6.重启

//reboot

三.测试

先使用vim写一个测试的cpp

之后gcc编译(前提是apt-get install build-essential安装gcc/g++/gdb/make 等基本编程工具。)

然后运行

demsg 查看进程信息

上图最后一行说明系统调用添加成功。

四.使用ptrace或类似的工具对测试程序进行跟踪调试:

1.先用strace,可以查看程序的系统调用。

A.

下图中read(0, 就是程序中a的输入,这里我输入19.

而syscall_0x150则是测试程序中的系统调用,0x150 16进制转化为10进制即为336,是我们刚刚添加的系统调用号。

write则为printf。

B.再用strace -c 可以查看测试程序的各类系统调用。如下图。

2.接下来用gdb调试。gdb在ptrace的基础上得来,功能强大且简便。

A.我们这里仅仅简单的调试。

输入l可以查看程序源码。

输入r可以运行程序。

输入b x,可以在x行前添加断点。

加断点后先r,再用c可以一步步执行,每次到断点停止。

clear可以清除断点

在return前插入断点,运行,输入bt可以查看堆栈调用。

3.Gdb和strace还有很多功能,对测试程序进行调试。在此不再演示。

原文链接;

标签: #ubuntu系统调用