Linux 添加系统调用命令(Ubuntu22.04.0和CentOs7)

Ubuntu 22.04.0(需要在root权限下)

1.查看内核源码版本

apt-cache search linux-source

Linux 添加系统调用命令(Ubuntu22.04.0和CentOs7)_第1张图片

2.下载内核源码

apt-get install linux-source-5.19.0

3.解压源码

下载好的源码会在/usr/src目录下,进入/usr/src/linux-source-5.19.0解压源码

tar -xvjf linux-source-5.19.0

4.修改源码(vim简单使用见下方注)

4.1添加系统调用

进入目录 /usr/src/linux-source-5.19.0/linux-source-5.19.0/kernel ,找到sys.c文件进入编辑添加系统调用

cd  /usr/src/linux-source-5.19.0/linux-source-5.19.0/kernel
vim sys.c

Linux 添加系统调用命令(Ubuntu22.04.0和CentOs7)_第2张图片

printk是一个用于在LInux内核中输入消息的函数。

SYSCALL_DEFINE是一个在LInux内核源代码中使用的宏,用于定义系统调用函数。它简化了系统调用函数的定义过程,并提供了正确的函数名和参数类型。
SYSCALL_DEFINEx(x代表参数个数)
asmlinkage用于指示函数采用与内核调用约定相匹配的参数传递方式。它在函数声明中使用,确保函数的参数传递方式与内核要求一致。
SYSCALL_DEFINE和asmlinkage配合使用,可以确保系统调用函数按住奥内核要求采用正确的参数传递方式。

asmlinkage long sys_my_syscall(int arg1, unsigned long arg2)
{
    // 系统调用的实现
    // ...
    return 0;
}
SYSCALL_DEFINE2(my_syscall, int, arg1, unsigned long, arg2)
{
    return sys_my_syscall(arg1, arg2);
}

4.2添加系统调用号

cd /usr/src/linux-source-5.19.0/linux-source-5.19.0/arch/entry/x86/entry/syscalls
vim syscall_64.tbl

Linux 添加系统调用命令(Ubuntu22.04.0和CentOs7)_第3张图片

syscall_64.tbl用于x86架构上64位系统调用编号和对应的函数
第一列式系统调用的编号,第二列是标志,第三列是系统调用的名称,第四列是对应的函数名

4.3添加声明

cd /usr/src/linux-source-5.19.0/linux-source-5.19.0/include/linux
vim syscalls.h

Linux 添加系统调用命令(Ubuntu22.04.0和CentOs7)_第4张图片

5.编译(在源码目录下进行)

5.1 make mrproper(清理上次编译信息)

5.2 make menuconfig(配置内核)

需要下载库

sudo apt-get install libncurses-dev
sudo apt-get install flex
sudo apt-get install bison
sudo apt-get install libelf-dev
sudo apt-get install libssl-dev


进入保存退出就可以
Linux 添加系统调用命令(Ubuntu22.04.0和CentOs7)_第5张图片

5.3 make -j4(构建)

j4表示同时执行的并发任务量,可以加快构建速度
如果遇到
No rule to make target ‘debian/canonical-certs.pem’, needed by ‘certs/x509_certificate_list’
这个错误

vim .config

进入文件找到CONFIG_SYSTEM_TRUSTED修改信息为空

Linux 添加系统调用命令(Ubuntu22.04.0和CentOs7)_第6张图片

5.4构建模块

make modules

5.5安装模块

make modules_install

5.5安装内核

make install

6.更新启动内核

update-grub2

7.重启

reboot

8.查看内核版本是否为最新

uname -r
image.png

9.编写代码调用

vim test.c

Linux 添加系统调用命令(Ubuntu22.04.0和CentOs7)_第7张图片
保存退出,编译运行
image.png
输入命令dmesg 查看系统调用信息
Linux 添加系统调用命令(Ubuntu22.04.0和CentOs7)_第8张图片

OK!完成!


CentOs 7添加系统调用(简略版)

1.查看源码版本

uname -r

2.下载源码

https://www.kernel.org/

3.添加系统调用

(1)修改arch/x86/syscalls/syscall_64.tbl文件

Linux 添加系统调用命令(Ubuntu22.04.0和CentOs7)_第9张图片

(2)修改include/linux/syscalls.h文件

image.png

(3)修改/kernel/sys.c文件

Linux 添加系统调用命令(Ubuntu22.04.0和CentOs7)_第10张图片

4.构建

(1)make mrproper(清理上次编译信息)

(2)make menuconfig(配置内核)

(3)执行make指令 make -j8后面的-j8是用来加快编译速度的。

Linux 添加系统调用命令(Ubuntu22.04.0和CentOs7)_第11张图片
Linux 添加系统调用命令(Ubuntu22.04.0和CentOs7)_第12张图片

(4)执行make modules指令

Linux 添加系统调用命令(Ubuntu22.04.0和CentOs7)_第13张图片

(5)执行make modules_install指令

Linux 添加系统调用命令(Ubuntu22.04.0和CentOs7)_第14张图片
Linux 添加系统调用命令(Ubuntu22.04.0和CentOs7)_第15张图片

(6)执行make install指令(安装完之后重启进入新内核)

Linux 添加系统调用命令(Ubuntu22.04.0和CentOs7)_第16张图片

(7)执行所添加系统调用

Linux 添加系统调用命令(Ubuntu22.04.0和CentOs7)_第17张图片
Linux 添加系统调用命令(Ubuntu22.04.0和CentOs7)_第18张图片
Linux 添加系统调用命令(Ubuntu22.04.0和CentOs7)_第19张图片

注:vim使用教程

vim a.c   //进入a.c文件

进入之后按 i 开始编辑
下方有“插入”提示
输入完毕后 按“ESC
然后按“:wq”保存退出
按下“/”可以查找内容

你可能感兴趣的:(linux)