【LINUX】内核源码文件系统调用相关摸索

首先,先看看想测试那个系统调用,在应用层,如果使用C语言编程一般我们一来就是open函数,实际在测试的时候,直接用touch xxx.txt然后 echo "xxx" >> xxx.txt,这样就完成了文件创建和写文件的操作,那肯定会用到open的系统调用,但是有一个问题:从【linux】6.9.0系统调用接口列表,一共644个-CSDN博客这篇文章来看,里边有好几个长得像open的,不知道调用的是哪个?只是看名称也不太容易看得出来,我们去内核源代码里边去搜索:

有好些,也不知道调用的是哪个,碰到这样的情况,直接去内核源代码里找到代码(因为是文件系统,所以直接进入fs目录),使用的命令行是grep -Hrn "SYSCALL" *.c | grep "(open":

然后添加打印日志,这里我们在fs/open.c这个文件里加了个计数的count,然后在刚才搜索出来结果的地方添加了打印,具体这个为什么要添加判断count>20才打印,不太记得了,在内核初始化的时候,要把内核压缩包的虚拟文件系统解压出来,实际上会调用到fopen的系统调用,好像是这样,不太记得了:

从前面的搜索得知,open.c 这个文件里实际上有好几个跟fopen长得像的,我们当前只用一个 count,注意是搜索出来的每个里边都去添加下打印日志,添加完成后,编译(编译如果报错,一般是新增代码出现的语法错误),重启电脑,再看看日志:

日志类似这样的,这样可以看出来(实际上调用的是openat这个系统调用,行数有点对不上,因为代码经过多次测试,失败了N多次):

从打印的日志来看,其实已经出现不断调用openat系统调用的死循环了,具体原因还不太清楚(这里需要注意,在本机测试的时候发现:

1)只是执行pr_info("");这个代码对内核影响是最小的;

2)如果想执行pr_info("count: %d", count); 这个也能执行,有时候能成功,有时候不一定,说人话就是内核不一定能起来;

3)再如果想执行pr_info("count: %d, filename: %s", count, filename); 本意是想把被操作的文件名显示出来,测试结果是内核根本起不来,就是这么刺激);

从这个栈看不太出来,这块不太懂,猜测内核前面已经出问题了,最后随便打印点日志意思意思。

另外,如果操作系统未能正常启动,内核打印的日志不一定能看到,显示画面滚动太快。

这应该也是调用栈,不太看得出来跟我们合入代码有啥关系,估计是间接影响的吧。

 上图这个也不太会看,跟上边那个有点像。

这个调用栈就明显跟我们代码合入有关了。红色方框上边部分一看就是内核打印日志那个宏的栈。。这里注意下这个日志是在 busybox 时调用dmesg 打印的日志,这里对grep命令如果学会使用grep -A, -B,会比较容易看到详细的日志,grep过滤的时候不会找关键字就直接基于前面的时间戳过滤,这样容易找到自已想要的信息,不过要需要耐心。

 这个日志从第一行看到是我们合入代码出了问题,这也是为什么在我们合入代码的时候,自已感觉没有问题,实际就会有问题。不过调用栈后边的代码,还不太懂。

这就是基于时间戳过滤,从内核启动时间来看大概是5秒多一点。 

这也是。

这个图不太懂,猜测是内核文件系统初始化内核运行依赖的一些系统库。

搞文件系统的摸索,经常把虚拟机搞死机,当然外边的电脑也蓝屏了好几次,这样多有意思,doge。

在文件系统系统调用API添加打印日志会导致UBUNTU不能正常启动,坏消息就是系统不能正常启动,好消息就是知道系统一定会走到我们打印日志的地方,doge... 

系统起不来,有时候会进到busybox的界面,注意这里边可以使用的命令比较有限。

不能正常起动的问题可以通过开机进入高级选项,选项里边选择较前面编译的可以启动的版本(比如:6.9.0+)就可以了,实在不放心直接使用6.8.0(内核未升级之间的版本就好了)。 

然后进入代码目录,把修改的可能导致系统不能起来的代码回退掉,然后重新编译代码,这样问题基本可以解决。

博客内容估计还有很多不对的地方,请包涵。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/758493.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

idea 用久了代码提示变慢卡顿优化

idea 用久了代码提示变慢卡顿优化 修改虚拟机配置 修改编译构建堆内存

CesiumJS【Basic】- #028 天空盒

文章目录 天空盒1 目标2 代码2.1 main.ts3 资源天空盒 1 目标 配置显示天空盒 2 代码 2.1 main.ts import * as Cesium from cesium;// 创建 Cesium Viewer 并配置地形数据和天空盒 const viewer = new Cesium.Viewer(

【Python系列】列表推导式:简洁而强大的数据操作工具

💝💝💝欢迎来到我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

最强文生图模型Stable Diffusion 3 Medium 正式开源

Stability AI 宣布 Stable Diffusion 3 Medium 现已开源,是 Stable Diffusion 3 系列中最新、最先进的文本生成图像 AI 模型 —— 官方声称是 “迄今为止最先进的开源模型”,其性能甚至超过了 Midjourney 6。 Stable Diffusion 3 Medium 模型规格参数达到…

用友U8 Cloud smartweb2.showRPCLoadingTip.d XXE漏洞复现

0x01 产品简介 用友U8 Cloud 提供企业级云ERP整体解决方案,全面支持多组织业务协同,实现企业互联网资源连接。 U8 Cloud 亦是亚太地区成长型企业最广泛采用的云解决方案。 0x02 漏洞概述 用友U8 Cloud smartweb2.showRPCLoadingTip.d 接口处存在XML实体,攻击者可通过该漏…

redis实战-短信登录

基于session的登录流程 session的登录流程图 1. 发送验证码 用户在提交手机号后,会校验手机号是否合法,如果不合法,则要求用户重新输入手机号 如果手机号合法,后台此时生成对应的验证码,同时将验证码进行保存&#x…

昇思25天学习打卡营第七天|模型训练

背景 提供免费算力支持,有交流群有值班教师答疑的华为昇思训练营进入第七天了。 今天是第七天,前六天的学习内容可以看链接 昇思25天学习打卡营第一天|快速入门 昇思25天学习打卡营第二天|张量 Tensor 昇思25天学习打卡营第三天|数据集Dataset 昇思25天…

51单片机第17步_外部中断

本章重点学习外部中断。 1、外部中断0框图&#xff1a; 2、外部中断1框图&#xff1a; 3、程序举例&#xff1a; #include <REG51.h> //包含头文件REG51.h,使能51内部寄存器; #include <intrins.h> //包含头文件intrins.h,要放在stdio.h的头文件之前; //使能…

[leetcode]圆圈中最后剩下的数字/ 破冰游戏

. - 力扣&#xff08;LeetCode&#xff09; class Solution {int f(int num, int target) {if (num 1) {return 0;}int x f(num - 1, target);return (target x) % num;} public:int iceBreakingGame(int num, int target) {return f(num, target);} };

基准测试程序的认知与分析 —— SPEC基准测试程序集的深入探索

基准测试程序的认知与分析 —— SPEC基准测试程序集的深入探索 一、实验目的&#xff1a; 了解和掌握Spec基准程序测试对基准程序测试结果进行分析和比较 二、实验准备知识&#xff1a; 计算机系统设计和分析的量化原则。 计算机系统设计和分析的量化原则是指导计算机系统架…

一篇就够了,为你答疑解惑:锂电池一阶模型-离线参数辨识(附代码)

锂电池一阶模型-参数离线辨识 背景模型简介数据收集1. 最大可用容量实验2. 开路电压实验3. 混合动力脉冲特性实验离线辨识对应模型对应代码总结下期预告文章字数有点多,耐心不够的谨慎点击阅读。 下期继续讲解在线参数辨识方法。 背景 最近又在开始重新梳理锂电池建模仿真与S…

【保姆级教程+配置源码】在VScode配置C/C++环境

目录 一、下载VScode 1. 在官网直接下载安装即可 2. 安装中文插件 二、下载C语言编译器MinGW-W64 三、配置编译器环境变量 1. 解压下载的压缩包&#xff0c;复制该文件夹下bin目录所在地址 2. 在电脑搜索环境变量并打开 3. 点击环境变量→选择系统变量里的Path→点击编…

羊了个羊:羊、羊、羊

一、I am me&#xff0c;羊羊羊 英文中的 我就是我&#xff08;I am me&#xff09;&#xff0c;其实就是&#xff1a;羊 羊 羊&#xff0c;为什么会有这么一个结论呢&#xff1f; 请往下看&#xff1a; I&#xff0c;就是羊 am&#xff08;是&#xff09;&#xff0c;也是羊 …

『MySQL 实战 45 讲』22 - MySQL 有哪些“饮鸩止渴”提高性能的方法?

MySQL 有哪些“饮鸩止渴”提高性能的方法&#xff1f; 需求&#xff1a;业务高峰期&#xff0c;生产环境的 MySQL 压力太大&#xff0c;没法正常响应&#xff0c;需要短期内、临时性地提升一些性能 短连接风暴 短连接模式&#xff1a;执行很少的 SQL 语句就断开&#xff0c;…

等保测评练习卷15

等级保护初级测评师试题15 姓名&#xff1a; 成绩&#xff1a; 判断题&#xff08;10110分&#xff09; 1. 防火墙应关闭不需要的系统服务、默认共享和高危端口&#xff0c;可以有效降低系统遭受攻击的可能性。&am…

学会整理电脑,基于小白用户(无关硬件升级)

如果你不想进行硬件升级&#xff0c;就要学会进行整理维护电脑 基于小白用户&#xff0c;每一个操作点我都会在后续整理出流程&#xff0c;软件推荐会选择占用小且实用的软件 主要从三个角度去讨论【如果有新的内容我会随时修改&#xff0c;也希望有补充告诉我&#xff0c;我…

【数据结构】详解二叉树之堆

失败只是暂时停止成功&#xff0c;假如我不能&#xff0c;我就一定要&#xff1b;假如我要&#xff0c;我就一定能&#xff01;&#x1f493;&#x1f493;&#x1f493; 目录 ✨说在前面 &#x1f34b;知识点一&#xff1a;树的概念和结构 • &#x1f330;1.什么是树&#x…

什么是自然语言处理(NLP)?详细解读文本分类、情感分析和机器翻译的核心技术

什么是自然语言处理&#xff1f; 自然语言处理&#xff08;Natural Language Processing&#xff0c;简称NLP&#xff09;是人工智能的一个重要分支&#xff0c;旨在让计算机理解、解释和生成人类的自然语言。打个比方&#xff0c;你和Siri对话&#xff0c;或使用谷歌翻译翻译一…

h5兼容table ,如何实现h5在app内使用h5渲染table表格而且实现横屏预览?

压图地址 横屏div 通过css 实现 transform: rotate(90deg); transformOrigin: 50vw 50vw ; height: 100vw; width: 100vh;<divclass"popup-box":style"{transform: originSet 0 ? rotate(90deg) : ,transformOrigin: originSet 0 ? 50vw 50vw : ,height…

正版软件 | R-Studio T80+:数据恢复与取证分析的专业之选

在数据恢复和数字取证领域&#xff0c;专业人士需要一款强大、可靠的工具来应对复杂和高要求的任务。R-Studio T80 由 R-TT 公司推出的新型许可软件&#xff0c;以其年度付费订阅模式&#xff0c;为专家提供了成本效益更高的解决方案。 全面功能&#xff0c;专业服务 R-Studio …