Ubuntu 22.04.0(需要在root权限下)
1.查看内核源码版本
apt-cache search linux-source
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
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
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
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
进入保存退出就可以
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修改信息为空
5.4构建模块
make modules
5.5安装模块
make modules_install
5.5安装内核
make install
6.更新启动内核
update-grub2
7.重启
reboot
8.查看内核版本是否为最新
uname -r
9.编写代码调用
vim test.c
保存退出,编译运行
输入命令dmesg 查看系统调用信息
OK!完成!
CentOs 7添加系统调用(简略版)
1.查看源码版本
uname -r
2.下载源码
3.添加系统调用
(1)修改arch/x86/syscalls/syscall_64.tbl文件
(2)修改include/linux/syscalls.h文件
(3)修改/kernel/sys.c文件
4.构建
(1)make mrproper(清理上次编译信息)
(2)make menuconfig(配置内核)
(3)执行make指令 make -j8后面的-j8是用来加快编译速度的。
(4)执行make modules指令
(5)执行make modules_install指令
(6)执行make install指令(安装完之后重启进入新内核)
(7)执行所添加系统调用
注:vim使用教程
vim a.c //进入a.c文件
进入之后按 i 开始编辑
下方有“插入”提示
输入完毕后 按“ESC
然后按“:wq”保存退出
按下“/”可以查找内容