admin管理员组文章数量:1665610
如何给linux添加一个系统调用
- 1、 准备工作
- a. 安装相关编译程序
- b. 获取内核源代码
- c. 解压源代码
- 2、编辑 sys.c 加入函数
- 3、添加声明
- 4、添加系统调用id
- 5、配置内核
- 6、安装内核
- 7、重启虚拟机
- 8、验证
1、 准备工作
a. 安装相关编译程序
sudo apt-get install build-essential kernel-package libncurses5-dev
注:我这里是之前已经安装完了
b. 获取内核源代码
可以在官网下载,下面附上国内比较好用的下载地址。
内核源代码下载网站 http://ftp.sjtu.edu/sites/ftp.kernel/pub/linux/kernel/v4.x/
这里我下载的是:linux-4.16.tar.gz
将源代码移动到 /usr/src/
sudo mv /xx/xx/linux-4.16.tar.gz /usr/src/
c. 解压源代码
cd /usr/src
sudo tar -zxvf /usr/src/linux-4.16.tar.gz
# -z 调用gzip程序来压缩、解压文件,文件名称以tar.gz结尾
# -j 调用bzip2程序来压缩、解压文件,文件名称以tar.bz2结尾
2、编辑 sys.c 加入函数
# 使用gedit 打开sys.c文件
sudo gedit /usr/src/linux-4.16/kernel/sys.c
在文件末尾添加如下函数,并保存,在终端窗口按`ctrl + c’ 退出
asmlinkage long sys_helloworld(void) {
printk("hello world!");
return 1;
}
3、添加声明
# 打开 /usr/src/linux-4.16/arch/x86/include/asm/syscalls.h
sudo gedit /usr/src/linux-4.16/arch/x86/include/asm/syscalls.h
插入如下声明
asmlinkage long sys_helloworld(void);
4、添加系统调用id
# 打开 /usr/src/linux-4.16/arch/x86/entry/syscalls/syscall_64.tbl
sudo gedit /usr/src/linux-4.16/arch/x86/entry/syscalls/syscall_64.tbl
添加如下行
333 64 helloworld sys_helloworld
5、配置内核
cd /usr/src/linux-4.16
sudo make mrproper
sudo make clean
# make menuconfig 时将general setup -> localversion 修改成新的名称,如 “wikiKernel”
sudo make menuconfig
# 编译线程越多,速度越快,我这里是8核8线程
make -j8
# 编译过程中出错的话,一般是缺依赖包,缺什么补什么即可
# 我编译过程中缺少了 libssl-dev, 于是执行如下命令后继续编译
sudo apt-get install libssl-dev
# 继续编译
make -j8
编译成功截图
6、安装内核
sudo make modules_install
sudo make install
安装成功截图
7、重启虚拟机
将之前的工作保存后直接重启,重启后点击鼠标进入ubuntu并且迅速长按shift,进入内核选择界面
选择 Advanced options for ubuntu,选择你编译好的内核,enter进入
8、验证
新建文件,输入如下代码
#include <stdio.h>
#include<linux/kernel.h>
#include<sys/syscall.h>
#include<unistd.h>
int main()
{
long int a = syscall(333);
printf("System call sys_helloworld return %ld\n", a);
return 0;
}
# 编译
gcc hello.c
打开另一个终端查看内核日志
dmesg -wH | grep "hello"
运行
./a.out
效果截图
版权声明:本文标题:如何给linux添加一个系统调用 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://m.elefans.com/xitong/1730050055a1220717.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论