当前位置: 首页 > news >正文

Linux实验报告15-添加系统调用

目录

一:实验目的

二:实验内容

(1)查看系统内核版本

(2)安装内核版本源码

(3)修改注册表

(4)添加系统调用头文件

(5)实现系统调用函数

(6)编译内核文件


半成品,实验最后未能成功 

一:实验目的

阅读Linux内核源代码,通过添加一个简单的系统调用实验,进一步理解Linux操作系统处理系统调用的统一流程。

二:实验内容

(1)查看系统内核版本

    开发之前首先得确定系统的内核版本是哪一个,可以通过apt-cache search linux-sourc和uname -r来查看。

 

(2)安装内核版本源码

    可以使用apt-get install linux-source-6.5.0下载相应版本的内核源码,下载后被存放在/usr/src下。

 

(3)修改注册表

修改/home/ziyang/core/arch/x86/entry/syscalls路径下的syscall_64.tbl文件,添加如下系统调用编号。其中<452为增加的系统调用号,ziyangcall为调用函数名,64为位数>

 

(4)添加系统调用头文件

    修改/home/ziyang/core/include/linux下的syscalls.h文件,添加上自己的系统调用函数的声明。

(5)实现系统调用函数

修改/home/ziyang/core/kernel下的sys.c文件,添加上自己的系统调用函数的声明。

 

实现系统调用函数的时候使用的是内核函数,所以要用printk输出而不是printf. 

 

(6)编译内核文件

    完成了上述所有的步骤之后,就是进行内核的编译了。但是在编译的过程中遇到了一些问题,例如缺少flex包等,所以在编译之前需要自行安装下列的包如图9所示。

 

在完成了相关编译包的安装后,接下来就可以正式开始进行编译了。首先第一步要完成的是清除旧的编译内容,即使用sudo make mrproper命令。

 

第二步要做的就是删除原先编译产生的.o文件,即使用sudo make clean命令,clean之后就可以进行内核配置文件的编译了,即sudo make defconfig

 

 

第三步要做的就是真正的编译了,使用sudo make命令,本次内核编译一共耗时几十分钟。 

 

第四步就是将编译好的模块进行安装,采用sudo make modules_install命令。 

 

第五步就是安装内核了,采用sudo make install命令。

 

第六步需要重启电脑linux崩溃。

本人进行了两次尝试,跟随老师给的教程,第一次做遇到了很多问题,不过自己通过查资料、问GPT等方式,边学习边做,终于做到了安装内核的部分,没想到重启之后linux直接崩掉,无法进入图形界面,使用修复指令也无济于事。以为是自己哪个步骤不小心做错了,于是进行了第二次尝试,重新做了一遍,结果还是以失败告终。 

http://www.lryc.cn/news/514654.html

相关文章:

  • logback之配置文件使用详解
  • 壁纸样机神器,这个工具适合专业设计师用吗?
  • MySQL秘籍之索引与查询优化实战指南
  • 【AI日记】25.01.03 kaggle 比赛 3-2 未来的命运
  • Linux(Centos 7.6)命令详解:ls
  • 【Unity3D】UGUI Canvas画布渲染流程
  • minikube安装k8s
  • Docker图形化界面工具Portainer最佳实践
  • 借助 FinClip 跨端技术探索鸿蒙原生应用开发之旅
  • 【网络】ARP表、MAC表、路由表
  • Linux驱动开发学习准备(Linux内核源码添加到工程-Workspace)
  • 25.1.3
  • Leecode刷题C语言之我的日程安排表②
  • 十二、Vue 路由
  • smell---Paddle-DI
  • PCL点云库入门——PCL库点云特征之点云法向量(NormalEstimation)及其可视化
  • 25.Java JUC 引入(进程与线程、线程的状态、并发与并行、管程、用户线程与守护线程)
  • Linux 异步 I/O 框架 io_uring:基本原理、程序示例与性能压测
  • Uniapp中使用`wxml-to-canvas`开发DOM生成图片功能
  • Linux之ARM(MX6U)裸机篇----5.仿stm32的LED驱动实验
  • DVWA靶场Open HTTP Redirect (重定向) 漏洞所有级别通关教程及源码审计
  • 探索 JMeter While Controller:循环测试的奇妙世界
  • Flutter踩坑记-第三方SDK不兼容Gradle 8.0,需适配namespace
  • ubuntu支持ssh
  • 浏览器书签智能分类
  • 通俗易懂的讲一下Vue的双向绑定和React的单向绑定
  • Redis 深度解析:从入门到精通
  • 基于物联网的冻保鲜运输智能控制系统
  • 【深度学习基础之多尺度特征提取】多尺度卷积神经网络(MS-CNN)是如何在深度学习网络中提取多尺度特征的?附代码(二)
  • 论文解读之learning to summarize with human feedback