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 立即下载

相关推荐

Dify插件实战:实时渲染AI生成的HTML/SVG/Canvas代码

在现代Web开发与AI应用集成中,前端渲染技术是实现动态内容展示的核心。其原理在于浏览器引擎解析HTML、CSS、JavaScript等代码,并将其转换为可视化的用户界面。这项技术的价值在于极大提升了开发效率与用户体验,允许开发者快速构建和迭代交互式应用。在AI应用开发领域,尤其是大语言模型(LLM)集成场景,如何将模型生成的**结构化代码**(如描述UI的HTML或数据图表的SVG)实时转化为可视化组件,成为一个关键需求。这直接关系到**Dify**等低代码AI平台能否提供流畅的、所见即所得的交互体验。本

weixin_42545664的博客 498

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

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

gitblog_00670的博客 878

OMI数据获取与可视化:从下载到大气污染分析

本文详细介绍了如何获取与处理OMI卫星数据,以进行大气污染分析。内容涵盖从NASA GES DISC官方源下载对流层NO2数据、使用MATLAB或Python进行月均数据处理与网格化,到利用m_map或cartopy工具进行专业可视化的完整流程。重点解析了数据下载技巧、NetCDF格式处理、地图投影与填色方法,并探讨了时间序列分析与动态可视化等深度应用,为环境研究者提供了一套从数据到洞察的实用指南。

weixin_29210759的博客 269

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

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

flowingtc的专栏 3802

基于SHIS凝视型短波红外高光谱相机(900-1700nm)区分不同宝石的差异性和可分性(宝石分选)

SHIS系列凝视型高光谱相机基于液晶可调谐滤波器(LCTF),通过电控LCTF进行连续细分窄波段分光,对每个波段进行高分辨率的二维面阵成像,进行图像处理后,获得完整的高光谱高清图像序列。具有低功耗、小型化、使用方便和易于扩展的优势。其工作波段覆盖400nm至1000nm,能够捕捉宝石在不同波长下的光谱特征,为宝石鉴定提供了新的工具。

wayho的博客 707

从零搭建openEuler ARM64开发测试环境:手把手教你用libvirt+KVM配置虚拟机(含VNC远程安装)

本文详细介绍了如何在ARM64平台上从零搭建openEuler开发测试环境,涵盖libvirt和KVM配置虚拟机的完整流程,包括环境准备、存储配置、网络优化、XML配置详解以及VNC远程安装。特别针对华为欧拉(openEuler)系统进行了优化,帮助开发者快速构建高效的ARM架构虚拟化环境。

weixin_30545945的博客 586

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

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

ada73的博客 430

YoloV8优化:感受野注意力卷积运算(RFAConv),效果秒杀CBAM和CA等 | 即插即用系列

感受野注意力卷积运算(RFAConv),解决卷积块注意力模块(CBAM)和协调注意力模块(CA)只关注空间特征,不能完全解决卷积核参数共享的问题

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 4263

LDD3源码学习笔记之scull_pipe转

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

weixiuc的专栏 825

【Burp入门第三十三篇】BurpSuite+Proxifier安装配置,实现微信小程序抓包

本文介绍Burp+Proxifier安装配置,实现微信小程序抓包

等风来 5873

SKUA-GOCAD入门教程-第二节

软件启动及项目设置

江洋大葱的博客 1146

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

《30天入门 SAP BTP 开发》教程的目录和使用说明,建议收藏

本教程分为两部分:第一部分为SAP BTP入门系列,包含从基础概念到操作步骤的系统性学习内容,建议零基础用户按顺序学习;第二部分为专题文章集合,涵盖SAP BTP的多个技术点,适合已有基础的用户按需查阅。教程包含账号申请、Global Account操作、Java应用开发、AI工具使用等丰富内容,同时解答常见问题并提供实战案例。所有文章均附带详细链接,便于读者系统学习或针对性查阅。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 4377

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

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

IEM模型,地表粗糙度模拟

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

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

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

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

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

(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、付费专栏及课程。

余额充值