Linux 编译内核且增加一个系统调用
Linux 编译内核且增加一个系统调用
文章目录
- Linux 编译内核且增加一个系统调用
- 一.在添加系统调用之前需要先编译一个Linux的内核。
- 解压
- 安装依赖
- 编译
- 安装内核
- 二.系统调用
- 声名和定义系统调用函数
- 声名
- 定义
- 添加一个系统调用id
- 进行编译
- 可能出现的错误
- 运行检验
一.在添加系统调用之前需要先编译一个Linux的内核。
下载地址
解压
在下载了源码之后,需要对其进行解压和编译
sudo tar -xavf linux-5.7.tar.xz
解压文件到桌面
安装依赖
这个也是笔者在网上找的在编译时所需要的一些资源,直接安装就可以了。
sudo apt-get install gcc make libncurses5-dev openssl libssl-dev
sudo apt-get install build-essential
sudo apt-get install pkg-config
sudo apt-get install libc6-dev
sudo apt-get install bison
sudo apt-get install flex
sudo apt-get install libelf-dev
编译
1.进入刚刚解压的文件里面(此处我是在桌面操作的)
cd linux-5.7
2.复制一份系统自带的config文件(这个需要自己去目录下面找)
sudo cp /boot/config-5.3.0-53-generic .config
3.使用make menuconfig(如果想了解可以去看https://blog.csdn.net/xuyuefei1988/article/details/8635539)
sudo make menuconfig
这个可以直接关闭
4.然后就可以直接开始编译
这里所需要的时间有点长
sudo make -j4 #编译内核,这个时候你可以去吃点东西.......
sudo make modules_install #安装模块
安装内核
1.由于此时我们编译好的内核还在我们的桌面上,因此首先需要把内核移动到/usr/src目录内,然后切换到该目录下
sudo mv linux-5.7 /usr/src
cd /usr/src/linux-5.7/
2.安装内核
sudo make installsudo mkinitramfs -o /boot/initrd.img-5.7.0
sudo update-initramfs -c -k 5.7.0 sudo update-grub2
可能大家现在发现了一件事,就是现在的系统内核还是之前的,此时需要重启电脑,然后开机后再次查看
此时的内核版本就已经改为了我们最新安装的。
编译内核到此就结束了。
二.系统调用
因为本文主要介绍怎么操作,因此不会介绍原理,如果大家感兴趣可以自行百度或Goole
声名和定义系统调用函数
声名
1.这个需要注意一下,最好是写在/usr/src/linux-5.7/include/linux 这个文件夹下,要不可能会找不到函数的声名
gedit syscalls.h #你也可以使用vim
定义
此处需要注意一点,就是在最新的里面"The x64_sys*() stubs are created on-the-fly for sys*() system calls"
这个定义和声名最好比接下来要写的系统调用id多上"_x64",要不可能会报错。
sudo vim kernel/sys.c
添加一个系统调用id
注意:id不要和已存在的系统调用重复
此处笔者多写了一个横杠,其实可以不要
sudo vim arch/x86/entry/syscalls/syscall_64.tbl
进行编译
sudo make clean
sudo make oldconfig #仍采用原内核配置文件
sudo make
sudo make modules_install
sudo make install
在编译完成之后 reboot 重启系统
可能出现的错误
1.arch/x86/entry/syscall_64.o:(.rodata+0xdb8):对‘__x64_sys_myno_name’未定义
这个一个可能是你文件路径找错了,根据我说的目录重新找过
还有一个可能就是,你在定义了id之后,把声明函数和定义函数写的和你所添加的一致,我之前也是这个问题,然后发现需要在声明函数和定义函数前**加上"_x64"**才可以
这个错误只适用于5.7版本的,以后会不会变,我也不知道。
2.ubuntu AER: device [8086:9d14] error status/mask=00000001/00002000
解决方法:
vim /etc/default/grubGRUB_CMDLINE_LINUX_DEFAULT="quiet splash"
pci=nomsi pci=noaer pcie_aspm=off
GRUB_CMDLINE_LINUX_DEFAULT="quiet splash pci=nomsi pci=noaer pcie_aspm=off"sudo update-grub
运行检验
#include <linux/unistd.h>
#include <sys/syscall.h>
int main(){syscall(439);
return 0;
}
使用gcc 编译
gcc -o test test.c
./test
dmesg
OK!,结束了。
Linux 编译内核且增加一个系统调用相关推荐
- Linux实验 | Ubuntu20.04编译内核并添加一个系统调用
实验环境 Ubuntu 20.04 LTS VMware Workstation Pro 16 Linux Kernel 5.10.2 存储空间至少留55GB,我第一次做就因为空间不够编译失败,最后编 ...
- linux内核打开prntk,操作系统实验一向Linux内核增加一个系统调用.docx
操作系统实验一: 向Linux内核增加一个系统调用 xx 711103xx 2012年3月18日 一.实验目的 通过实验,熟悉Linux操作系统的使用,掌握构建与启动Linux内核的方法:掌握用 户程 ...
- 向Linux增加一个系统调用或内核模块
向Linux增加一个系统调用或内核模块 配置环境 获取root权限 sudo su 更新系统 sudo apt-get update 安装相关编译程序包 sudo apt-get install li ...
- Ubuntu增加一个系统调用(20.04)西电软工OS实验专题二
title: 西电软工OS实验专题二–增加系统调用 date: 2022-05-14 07:48:48 tags: OS 写在前面: 如果这个过程中你某个地方没有把握,切记使用vm的快照功能,血的教训 ...
- 非常好的Linux编译内核详解 - -
转载: http://blog.chinaunix.net/uid-263488-id-2138150.html 非常好的Linux编译内核详解 - - 一.内核简介 内核,是一个操作系统的核心.它 ...
- linux编译内核支持pam,linux编译内核make menuconfig报错解决办法
linux编译内核时 输入make menuconfig命令 *** Unable to find the ncurses libraries or the *** required header f ...
- linux内核编译系统调用,linux编译内核及添加系统调用
我们都知道系统功能调用是Unix/Linux操作系统向用户程序提供支持的接口,通过这些接口应用程序向操作系统请求服务,控制转向操作系统,而操作系统在完成服务后,将控制和结果返回给用户程序. 系统调用的 ...
- 操作系统作业:给linux系统增加一个系统调用
前不久开了一门<操作系统>,老师上课留下了一个作业--给Linux系统添加一个系统调用.刚开始只能用一脸懵逼来形容,只能硬着头皮做下去.由于刚的新电脑,所以就没敢装双系统.所以我选择了虚拟 ...
- 给linux系统增加一个系统调用并测试,超详细含错误锦集
操作系统:给linux系统内核增加系统调用并测试 实验内容 实验环境 实验过程 1.安装环境 2.给内核增加系统调用 3.编译内核 4.安装内核 5.编辑测试文件 实验内容 1.给linux系统内核增 ...
最新文章
- 阿里云首席科学家闵万里:我们为什么敢挑战一百年的制度,因为黑科技能为挽救生命抢来50%的可能性
- 五大常用算法之二:动态规划算法
- shell脚本 逐行读取文本并且 进行字符串的截取
- LeetCode 53. 最大子序和(Maximum Subarray)
- 征战蓝桥 —— 2016年第七届 —— C/C++A组第2题——生日蜡烛
- cenos 安装 phpredis 扩展
- 中石油训练赛 - Bad Treap(数学)
- 制作支付页面弹框html,JS实现仿微信支付弹窗功能_蜡烛_前端开发者
- 《架构之美》阅读笔记06
- Linux学习总结(六十六)打印一串数字的脚本
- 那些有实力进入 BAT 的本科生,都做对了什么事?
- 分布式存储系统学习笔记(二)—分布式文件系统(1)—Google文件系统GFS
- Network 第三篇 - STP生成树协议
- python的输入来源包括啥_Python中使用 input 函数来获取输入
- CSTAnbsp;【Computer-Supportedamp;n…
- koreader下载_Koreader阅读器app免费安装最新版|Koreader阅读器2018手机最新版下载_v1.0_9ht安卓下载...
- Macbook Pro 201 装Win10 声卡_直播_个人工作室入门_1K-2k价位录音编曲声卡推荐
- kotlin-stdlib 与 kotlin-stdlib-jdk7
- 三级网络技术通关指南
- ai人工智能开发_面向开发人员的十大人工智能(AI)工具