快捷搜索:  汽车  科技

如何编写linux系统调用程序:向Linux内核添加一个系统调用

如何编写linux系统调用程序:向Linux内核添加一个系统调用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 二.构建新内核在终端操作:3.linux-4.18.14步骤:一.准备环境

内容

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

环境

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.准备

在www.kernel.org下载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.添加系统调用

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

如何编写linux系统调用程序:向Linux内核添加一个系统调用(1)

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

这里添加了sys_helloworld

如何编写linux系统调用程序:向Linux内核添加一个系统调用(2)

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

如何编写linux系统调用程序:向Linux内核添加一个系统调用(3)

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

如何编写linux系统调用程序:向Linux内核添加一个系统调用(4)

3.删除无用的文件

sudo make mrproper

sudo make clean

4.配置

sudo make menuconfig

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

如何编写linux系统调用程序:向Linux内核添加一个系统调用(5)

5.编译新内核并安装

A.编译

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

如何编写linux系统调用程序:向Linux内核添加一个系统调用(6)

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

B.安装

sudo make modules_install

sudo make install

6.重启

//reboot

三.测试

先使用vim写一个测试的cpp

如何编写linux系统调用程序:向Linux内核添加一个系统调用(7)

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

然后运行

如何编写linux系统调用程序:向Linux内核添加一个系统调用(8)

demsg 查看进程信息

如何编写linux系统调用程序:向Linux内核添加一个系统调用(9)

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

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

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

A.

如何编写linux系统调用程序:向Linux内核添加一个系统调用(10)

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

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

write则为printf。

如何编写linux系统调用程序:向Linux内核添加一个系统调用(11)

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

如何编写linux系统调用程序:向Linux内核添加一个系统调用(12)

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

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

如何编写linux系统调用程序:向Linux内核添加一个系统调用(13)

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

如何编写linux系统调用程序:向Linux内核添加一个系统调用(14)

输入r可以运行程序。

如何编写linux系统调用程序:向Linux内核添加一个系统调用(15)

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

如何编写linux系统调用程序:向Linux内核添加一个系统调用(16)

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

如何编写linux系统调用程序:向Linux内核添加一个系统调用(17)

clear可以清除断点

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

如何编写linux系统调用程序:向Linux内核添加一个系统调用(18)

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

原文链接;https://www.cnblogs.com/lqerio/p/10461937.html

猜您喜欢: