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

Ubuntu 22.04.0(需要在root权限下)

1.查看内核源码版本

apt-cache search linux-source

image.png

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

image.png

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

image.png

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

image.png

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


进入保存退出就可以
image.png

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修改信息为空

image.png

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

image.png
保存退出,编译运行
image.png
输入命令dmesg 查看系统调用信息
image.png

OK!完成!


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

1.查看源码版本

uname -r

2.下载源码

https://www.kernel.org/

3.添加系统调用

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

image.png

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

image.png

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

image.png

4.构建

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

(2)make menuconfig(配置内核)

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

image.png
image.png

(4)执行make modules指令

image.png

(5)执行make modules_install指令

image.png
image.png

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

image.png

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

image.png
image.png
image.png

注:vim使用教程

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

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

  • 16
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 9
    评论
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

17丶

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值