IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> 如何给linux添加一个系统调用 -> 正文阅读

[系统运维]如何给linux添加一个系统调用

1、 准备工作

a. 安装相关编译程序

sudo apt-get install build-essential kernel-package libncurses5-dev

注:我这里是之前已经安装完了
在这里插入图片描述

b. 获取内核源代码

可以在官网下载,下面附上国内比较好用的下载地址。
内核源代码下载网站 http://ftp.sjtu.edu.cn/sites/ftp.kernel.org/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

效果截图
在这里插入图片描述

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2022-05-25 11:45:26  更:2022-05-25 11:46:06 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 14:01:18-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码