【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(内核未升级之间的版本就好了)。 

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

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

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于单片机光纤测距系统的设计与实现

摘要 : 光纤由于其频带宽 、 损耗低及抗干扰能力强等优点已被广泛地应用在通信 、 电子及电力方面 , 是我们生产生活中必不可少的媒介。 在实际的光纤实验 、 安装 、 运营和维护工作中 , 一种精准 、 轻便和易操作的光纤测距系统显得尤为重…

【系统架构设计师】七、信息安全技术基础知识(信息安全的概念|信息安全系统的组成框架|信息加解密技术)

目录 一、信息安全的概念 1.1 信息安全的基本要素和范围 1.2 信息存储安全 1.3 网络安全 二、信息安全系统的组成框架 2.1 技术体系 2.2 组织机构体系 2.3 管理体系 三、 信息加解密技术 3.1 数据加密 3.2 对称加密技术 3.3 非对称加密算法 3.4 数字信封 3.5 信…

springcloud-sentinel 限流组件中文文档

快速开始 欢迎来到 Sentinel 的世界!这篇新手指南将指引您快速入门 Sentinel。 Sentinel 的使用可以分为两个部分: 核心库(Java 客户端):不依赖任何框架/库,能够运行于 Java 8 及以上的版本的运行时环境&#xff0c…

Windows 10,11 Server 2022 Install Docker-Desktop

docker 前言 Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的镜像中,然后发布到任何流行的 Linux或Windows 机器上,也可以实现虚拟化。容器是完全使用沙箱机制,相互之间不会有任何接口。 docker-compose Compose 是用于定义和运行…

centos 7.2 离线部署 mysql 5.7.37

1.安装依赖 清楚mysql从图的依赖 rpm -qa|grep mariadb 存在冲突依赖,进行卸载 rpm -e --nodeps mariadb-libs-5.5.44-2.el7.centos.x86_64 确认gcc版本 ldd --version 安装mysql5.7所需要的依赖 mkdir -p /root/AllInstalls 只下载不安装,用于放到其他机器: yum inst…

Stateflow快速入门系列(-):构造并运行 Stateflow 图

Stateflow 提供了一种图形语言,包括状态转移图、流程图、状态转移表和真值表。您可以使用 Stateflow 来说明 MATLAB 算法和 Simulink 模型如何响应输入信号、事件和基于时间的条件。 Stateflow 使您能够设计和开发监控、任务调度、故障管理、通信协议、用户界面和混…

相亲交友微信小程序系统源码

开启浪漫邂逅新篇章 相亲交友——随着年龄的增长,越来越多的人开始关注自己的婚姻问题,为了提高相亲服务的质量,这款应用就可以拓宽在线社交网络范围。​ 💑 引言:邂逅爱情的新方式 在繁忙的都市生活中,寻…

十年,亚马逊云科技合作伙伴网络开启AI新征程

“十年之前,你不认识我,我不认识你,因为云计算我们携手并肩;十年之后,我们仍是伙伴,更是朋友,因为人工智能再次起程。”这就是今天的亚马逊云科技与其合作伙伴的真实写照。 2024年是亚马逊云科技…

板凳-------unix 网络编程 卷1-1简介

unix网络编程进程通信 unpipc.h https://blog.csdn.net/u010527630/article/details/33814377?spm1001.2014.3001.5502 订阅专栏 1>解压源码unpv22e.tar.gz。 $tar zxvf unpv22e.tar.gz //这样源码就被解压到当前的目录下了 2>运行configure脚本,以生成正确…

js+php 上传文件到服务器

https://andi.cn/page/621473.html

喂饭级AI神器!免代码一键绘制图表,文本数据秒变惊艳视觉盛宴!

由于目前的AI生成图表工具存在以下几个方面的问题: 大多AI图表平台是纯英文,对国内用户来说不够友好;部分平台在生成图表前仍需选择图表类型、配置项,操作繁琐;他们仍需一份规整的数据表格,需要人为对数据…

“论模型驱动架构设计方法及其应用”写作框架,软考高级,系统架构设计师

论文真题 模型驱动架构设计是一种用于应用系统开发的软件设计方法,以模型构造、模型转换和精化为核心,提供了一套软件设计的指导规范。在模型驱动架构环境下,通过创建出机器可读和高度抽象的模型实现对不同问题域的描述,这些模型…

【Win】双系统新体验:Hyper-V上macOS安装攻略

在虚拟化的世界里,Hyper-V是探索不同操作系统的一扇大门。尽管macOS并不是Hyper-V官方支持的来宾操作系统,但这并未阻挡技术探索者的脚步。他们通过不懈努力,开辟出了一条条通往macOS的非官方路径。这些路径或许曲折,却为那些渴望…

Ubuntu挂载window的网络共享文件夹爱

1.进入win10创建一个用户smb密码也是smb 2.右键进入文件夹共享 3.进入Ubuntu安装支持cifs-utils sudo apt update sudo apt install cifs-utils 4.sudo mkdir /mnt/shared 5.挂载: sudo mount -t cifs -o usernamesm bpasswordsmb //172.16.11.37(windowsIP)/s…

controller不同的后端路径对应vue前端传递数据发送请求的方式

目录 案例一: 为什么使用post发送请求,参数依旧会被拼接带url上呢?这应该就是param 与data传参的区别。即param传参数参数会被拼接到url后,data会以请求体传递 补充:后端controller 参数上如果没写任何注解&#xff0c…

JVM专题十二:JVM 中的收集器二

上一篇JVM专题十一:JVM 中的收集器一咱们介绍了垃圾收集器的分类,已经主流的分代垃圾收集器重点看了CMS与三色标记算法,本篇咱们继续来看意G1、ZGC等。 G1收集器 G1(Garbage-First Garbage Collector)是一种服务器端的…

flask的基本使用1

【 一 】Flask介绍 python 界的web框架 -Django:大而全,使用率较高 :https://github.com/django/django -FastAPI:新项目选择使用它:https://github.com/tiangolo/fastapi -flask:公司一些小项目使用它&a…

如何提高软件APP质量的测试类型

如今,由于市场竞争非常激烈,移动应用质量至关重要。我们需要关注用户体验以及应用的性能。如果应用包含错误,应用评级就会下降,应用下载量也会下降。如果我们能使我们的应用没有错误,那么应用获得人气的机会就会增加。…

通过颜色传感器控制机械臂抓物体

目录 1 绪论 2整体设计方案 2.1 系统的介绍 2.2 抓取模块 2.2.1 机械臂的定义 2.2.2 机械臂的分类 2.2.3 机械臂的选用 2.3 颜色识别模块 2.3.1 颜色传感器识别原理 2.3.2 TCS3200简介 2.4 整体控制方案 3 颜色识别抓取系统的硬件设计 3.1 单片机选型及参数 3.2 系…

win11系统重装?正版系统Windows11安装重启!保姆级重装系统攻略!

随着科技的不断发展,Windows 11系统已经逐渐成为了众多电脑用户的新选择。然而,当当电脑出现严重故障、受到病毒攻击、软件冲突、系统升级失败、硬件更换或升级、系统性能下降或个性化需求等情况时,重装系统可能是一个有效的解决方案。本文将…