LDD3之scull--从open系统调用到模块的scull_open执行流程分析

工业互联网工控安全与工业质检AI大模型建设方案.pptx 立即下载
本帖的主要内容提供一个从系统调用open到内核中该文件实际的open方法的调用流程分析,基本上列出来从open系统调用到scull_open过程中调用的函数。

在这个过程中很多调用以及函数实现的细节还并不是很清楚。希望在随后的研究过程中,以及和别人的交流中,把这个调用流程丰富起来。

int open(const char *pathname, int flags, mode_t mode); --系统调用
                            ||
                            \/
long sys_open(const char __user *filename, int flags, int mode) -- fs/open.c
/*对应内核中的open接口函数*/
                            ||
                            \/
long do_sys_open(int dfd, const char __user *filename, int flags, int mode) --fs/open.c
/*用户空间的filename被拷贝到内核空间,获取当前可用的文件描述符*/
                            ||
                            \/
static struct file *do_filp_open(int dfd, const char *filename, int flags, int mode) --fs/open.c
                            ||
                            \/
int open_namei(int dfd, const char *pathname, int flag,
  int mode, struct nameidata *nd)
/*获取该文件对应的nameidata结构.该函数执行完毕,接着调用下面函数。这两个函数是顺序被do_filp_open调用*/
                            ||
                            \/
struct file *nameidata_to_filp(struct nameidata *nd, int flags) --fs/open.c
/*将nameidata 结构转换为打开的struct file结构*/
                            ||
                            \/
static struct file *__dentry_open(struct dentry *dentry, struct vfsmount *mnt,
     int flags, struct file *f,
     int (*open)(struct inode *, struct file *)) --fs/open.c
                            ||
                            \/
open = f->f_op->open;
open(inode, f);    --fs/open.c
/*以上两行代码分别完成了open系统调用时执行实际文件对应内核的open方法,即scull_open*/


open->sys_oepn->do_sys_open 从open到sys_open是系统调用产生了中断,查找到了系统调用表,open函数对应的系统调用表里面的就是sys_open函数
 
( The fd is not get in file_operations open function, which just do some initialization. If you do not need initialization or do it somewhere else, we can omit it.)
 
====
2024 《计算机网络》实验教学指导书.doc 立即下载

相关推荐

Intel MKL库常用模块的C语言实现

文章目录1. 随机数生成1.1 等概率的01分布 viRngUniform1.2 (复)高斯分布 vsRngGaussian2. 向量-向量运算2.1 向量数乘与加法 cblas_caxpby2.2 向量内积 cblas_cdotu_sub2.3 向量范数 cblas_scnrm23. 矩阵-向量运算3.1 矩阵存储方案3.2 矩阵-向量乘法 cblas_cgemv4. 矩阵-矩阵运算4.1 矩阵...

月半 月半的博客 4650

Claude Code Router 多语言入门指南:3 步切换中英文,看懂 3 个翻译关键点

Claude Code Router 把多个 AI Agent 接到统一的模型网关上,内置中英文多语言支持:界面文案和网关报错提示都能整体换语言。下面 3 步完成切换,再讲清 3 个关键机制,最后给出 2 个自定义场景和一张避坑清单,改报错文案、换界面用词都能照做。 网关启动失败,弹窗里全是英文错误;或者同事把界面切成了中文、你这边还停留在英文——这类问题都出在同一套多语言机制上。看懂它之后,切

gitblog_00670的博客 878

macOS 27下PlayCover“没有权限打开”的完整修复指南

macOS系统通过Gatekeeper、TCC(透明、同意与控制)和安全启动等机制,对第三方应用进行层层校验,以防范恶意代码。这些机制会检查应用的隔离属性、签名状态以及所需系统权限,当任一环节不满足时,就会出现“没有权限打开”的提示。对于开发者工具或未上架App Store的开源软件,这类拦截尤为常见。尤其在macOS 27上,系统进一步收紧了绕过策略,导致PlayCover等工具无法正常启动。本文以PlayCover为例,详细解析权限链路上的三道关卡,并给出清除隔离属性、调整SIP状态、重置TCC记录等完

weixin_32612263的博客 732

LDD3中scull字符设备源代码完全解析(二) open、read、write方法

在上一篇的最后我们提到了scull设备的内存结构,今天主要介绍源程序中的几个重要方法,会用到那张内存区图。   首先是open方法,其原型是int (*open)(struct inode *inode, struct file *filp);下面先贴出open方法的函数代码

flowingtc的专栏 3802

我用WorkBuddy“克隆“了一个我,从此每句话像我自己说的

各位,做这件事花了多长时间?准备样本可能要半小时,提炼风格十分钟,保存固化再花十分钟。加起来不到一个小时。但这一个小时之后呢?你就拥有了一个"永远在线的文字替身"。以后写口播稿,打开WorkBuddy跟它说;写课程逐字稿,跟它说;写公众号文章,也跟它说。写出来的东西,你的学员一看——“嘿,这不就是翟猛老师说的嘛。说到这儿,可能有人会问:老师,我的风格有那么重要吗?AI写的不都挺好的吗?各位你想想看,你为什么愿意听某个老师的课?不只是因为他讲的内容好,更是因为你喜欢他讲话的方式。

weixin_39284145的博客 816

Burp靶场实战:JWT签名绕过漏洞分析与利用

本文通过Burp Suite靶场实战,深入剖析了JWT签名绕过漏洞的多种攻击手法,包括签名未验证、alg:none攻击、弱密钥爆破、JWK/JKU头注入、KID路径遍历及算法混淆攻击。文章详细演示了利用过程,并提供了关键的防御指南,帮助开发和安全人员加固JWT实现,确保认证安全。

weixin_29325515的博客 593

LDD3边读边学(第三章)字符设备驱动 scull 实验全过程

通过本次实验,完成了一个简单的 Linux 字符设备驱动 scull 的实现,并掌握了以下关键知识:1. Linux 字符设备驱动的基本结构2. 内核模块的编译与加载过程3. 设备文件 /dev 与驱动之间的关系4. 用户空间程序与内核驱动之间的通信机制5. copy_to_user() 与 copy_from_user() 的使用实验验证了 Linux 字符设备驱动中 open、read、write、release 等接口能够正常工作。

ada73的博客 430

ArcGIS天地图矢量化秘籍:用重分类+ArcScan高效提取建筑轮廓线

本文详细介绍了利用ArcGIS重分类和ArcScan技术高效提取天地图建筑轮廓线的半自动化流程。通过动态中断值计算、多级重分类策略和ArcScan高级矢量化技巧,显著提升城市规划中的矢量化效率与精度,适用于中级GIS用户。

weixin_30879169的博客 475

LDD3源码学习笔记之scull_pipe转

/*pipe.c*//*=========================================*//*驱动功能分析*/本驱动使用环形缓冲作为scull设备的的具体实现,类似于pipe.其中实现了阻塞的I/O读写和非同步通知./*=========================================*//*主函数流程分析*/1.定义scull_pipe设备机构体(){/*由于

weixiuc的专栏 825

【AI大模型:认知升级】1、全面解析AI大模型:从起源到发展脉络与应用价值

AI大模型是具备超大规模参数(千亿至万亿级)、海量训练数据(TB级)和强迁移学习能力的基础模型。其技术特征包括Transformer架构革新、大数据预训练范式及参数规模超过临界值后的能力涌现。发展历程经历了语言模型突破(2018-2020)、多模态融合(2021-2023)和架构创新(2023至今)三波浪潮,遵循数据、算力、算法协同进化规律。底层驱动因素包括能力涌现机制、算力基础设施突破和应用场景拓展,正在重构产业价值链。通过"知识星系""认知

2025博客之星Top81。专注AI工程化与架构实战。从分布式思维到模型部署,用工程化视角为你厘清AI落地的真实路径。 2289

Dify框架面试内容整理-如何优化Dify的应用性能?

为1536维)可选用 PCA、FAISS 的量化压缩方法降低维度(如128、256、512);对知识库预览、任务流配置等页面,使用 nginx/cache-control 减少请求。API 响应耗时(P50/P95)、Token 使用量、缓存命中率、向量检索耗时;对 Prompt+输入内容计算 Hash,缓存相同请求的返回结果;使用占位符 + 函数拼接,按需组合 Prompt,而非静态长模板;数据量大时,应在构建索引前清洗冗余段落、统一格式,避免重复向量。维度越低,检索越快,但可能影响召回准确度,需平衡。

不务正业的猿 1548

LDD3字符设备驱动pipe提示No such device or address

在学习LDD3的时候,学习到字符设备驱动scull 使用scull驱动的设备有三类设备文件,分别是scull、scullp、sculla,使用scul.init start加载驱动,创建设备文件后,cat /proc/devices如下: 203 cpu/cpuid 249 scull 249 scullp 249 sculla 250 hidraw 设备文件如下: crw-r

Kevin的专栏 6141

【项目解析】2KW 230V 数字逆变器控制系统(二)

【项目解析】 2KW 230V 数字逆变器控制系统(一) 项目的 交流输出电压 并不是单纯一个电压环就能控制好的,而是典型的 双环控制架构:最终占空比控制量会经过计算: 然后写入 单片机 TMM 定时器的比较寄存器 (TMGRA0/TMGRD0/TMGRC1), → 定时器输出互补 PWM, → 驱动 IGBT 全桥, → 经过 LC 滤波形成 230 VAC / 50Hz 的正弦电压。总结交流电压是双环控制的结果:目标/作用:把输出 RMS 电压稳到目标(例如 230 VAC);在母线波动与负载变化下

Naiva的博客 1296

LDD3源码分析之访问控制

LDD3源码分析之访问控制 分类: LDD3源码分析2012-03-29 16:29 164人阅读 评论(0) 收藏 举报 作者:刘昊昱  博客:http://blog.youkuaiyun.com/liuhaoyutz 编译环境:Ubuntu 10.10 内核版本:2.6.32-38-generic-pae LDD3源码路径:examples/scull/ access.c

视频拼接器 1091

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

LDD3源码分析之字符设备驱动程序

作者:刘昊昱  博客:http://blog.youkuaiyun.com/liuhaoyutz 编译环境:Ubuntu 10.10 内核版本:2.6.32-38-generic-pae LDD3源码路径:examples/scull/main.c   本文是对LDD3第三章驱动代码的分析记录。LDD3的scull源码是一个综合性的驱动程序,内容涵盖了第三章到第六章的内容,初学者在学习过程中

zjy900507的博客 401

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

LDD3源码分析之阻塞型I/O

作者:刘昊昱  博客:http://blog.youkuaiyun.com/liuhaoyutz 编译环境:Ubuntu 10.10 内核版本:2.6.32-38-generic-pae LDD3源码路径:examples/scull/pipe.c  examples/scull/main.c   本文分析LDD3第六章介绍的scullpipe设备是如何实现阻塞I/O的。另外,我发现sc

Linux/Android开发记录 4399

(LDD3实践)Chapter-3:字符驱动

SCULL的模型 首先明确一下scull设备的模型:scull设备有qset个scull_qset结构,每个scull_qset结构维护着qset个quantum,每个quantum默认是4000,而qset默认是1000,所以一个qset的大小是4000*1000个char 源代码分析: 对源码的分析:http://blog.youkuaiyun.com/liuhaoyutz/article/

forsakening的专栏 1282

linux字符设备驱动剖析,Linux字符设备驱动程序工作机理分析

该楼层疑似违规已被系统折叠隐藏此楼查看此楼Linux字符设备驱动程序工作机理分析1 本文主题本文主要分析Linux字符设备驱动程序的工作机理。主要内容以及代码片段来源于《LDD3》,俺只是从另外一个角度来讲述。见过很多关于驱动程序的书,基本上都是告诉你怎么做,然后你STEP BY STEP,然后运行完后结果就出来了,可是其背后到底是如何工作的呢?虽说《LDD3》也讲了很多原理性的东西,但是我觉得...

weixin_39702479的博客 95

linux字符设备驱动程序流程图,Linux字符设备驱动程序工作机理分析

该楼层疑似违规已被系统折叠隐藏此楼查看此楼Linux字符设备驱动程序工作机理分析1 本文主题本文主要分析Linux字符设备驱动程序的工作机理。主要内容以及代码片段来源于《LDD3》,俺只是从另外一个角度来讲述。见过很多关于驱动程序的书,基本上都是告诉你怎么做,然后你STEP BY STEP,然后运行完后结果就出来了,可是其背后到底是如何工作的呢?虽说《LDD3》也讲了很多原理性的东西,但是我觉得...

weixin_39714275的博客 472

Linux字符设备驱动程序工作机理分析

1 本文主题 本文主要分析Linux字符设备驱动程序的工作机理。主要内容以及代码片段来源于《LDD3》,俺只是从另外一个角度来讲述。 见过很多关于驱动程序的书,基本上都是告诉你怎么做,然后你STEP BY STEP,然后运行完后结果就出来了,可是其背后到底是如何工作的呢?虽说《LDD3》也讲了很多原理性的东西,但是我觉得这个问题其描述得并不明确。 2 关于scull scull是《LDD3》的一个...

weixin_42976659的博客 161
上一篇: 如何使LXR索引的代码在线阅读时语法高亮显示
下一篇: lseek() sample program in C
Alan0521
博客等级 码龄19年 77粉丝 6原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值