【006 Linux内核】应用程序中open()在linux中执行过程中是如何从用户空间到内核空间?

news2024/12/25 0:43:25

一、前言

应用程序运行在用户空间,而 Linux 驱动运行于内核空间。当我们在用户空间想要实现对内核的操作,比如使用 open 函数打开/dev/led 这个驱动,由于用户空间不能直接对内核进行操作,因此必须使用一个叫做 “系统调用” 的方法来实现从用户空间“陷入”到内核空间,这样才能实现对底层驱动的操作。

索引节点对象代表一个具体文件,由struct inode结构体表示,定义在linux/fs.h中。


二、具体过程

用户空间使用open()系统调用函数打开一个字符设备时( int fd = open("dev/demo", O_RDWR) )大致有以下过程:

  1. VFS层接收open()系统调用,在虚拟文件系统VFS中的查找与字符设备对应 struct inode节点;
  2. 遍历字符设备列表(chardevs数组),根据inod节点中的 cdev_t设备号找到cdev对象;
  3. 创建struct file对象,作为这个打开的文件的描述符。
  4. 初始化struct file对象,将 struct file对象中的 file_operations成员(指针)指向字符设备驱动 struct cdev对象中的 file_operations成员(file->fops =  cdev->fops);
  5. 回调file->fops->open函数。
  6. 任务完成,VFS层会给应用返回一个文件描述符(fd)。这个fd是和struct file结构体对应的。
  7. 应用程序使用 fd 调用 read()/write() 等读写函数,VFS层再回调 file->fops->read()/write() 函数,调用字符设备驱动读写。

在这里插入图片描述

 


三、参考内容

1.Linux 字符设备驱动结构(三)—— file、inode结构体及chardevs数组等相关知识解析_发如雪Jay的博客-CSDN博客

2.Linux字符设备中的两个重要结构体(file、inode)_clam_zxf的博客-CSDN博客

3.linux字符设备驱动之open()函数_d_backing_inode_麻辣小新的博客-CSDN博客

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

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

相关文章

论文阅读 (90):Proposal-based Multiple Instance Learning (P-MIL, 2023CVPR)

文章目录 1 要点1.1 概述1.2 一些概念1.3 主要步骤 2 方法2.1 候选提案生成2.2 提案特征提取和分类2.2.1 周围对比特征提取2.2.2 分类头 2.3 提案微调2.3.1 提案完备性评估2.3.2 实例级秩一致性 2.4 网络训练和推理2.4.1 网络训练2.4.2推理 3 实验3.1 数据集即评估标准3.1.1 数…

一线大厂Java 面试题大全1100+ 面试题附答案详解(2023最新整理)

写在前面 今年的面试比往年要难得多,各个互联网企业对于 Java 岗位的要求越来越多,也越来越高,主要是初级岗位已经趋近饱和,但高级岗位又相对来说缺乏,这类的人才偏少,因此作为 Java 开发人员,…

【新星计划回顾】第四篇学习计划-自定义函数、存储过程、随机值知识点

🏆🏆时间过的真快,这是导师回顾新星计划学习的第四篇文章! 最近这段时间非常忙,虽然导师首次参与新星计划活动已经在4月16日圆满结束,早想腾出时间来好好整理活动期间分享的知识点。 🏆&#x1…

【TiDB Future App Hackathon 2023 】TiDB 首届全球黑客马拉松,开发者的狂欢夏日盛会!快来一起 Coding 吧!...

作者: Billmay表妹 原文来源: https://tidb.net/blog/cf364859 2023 TiDB Future App Hackathon 来啦!本届 Hackathon 的主题为:Code, Innovate & Build Amazing Data Applications —— 释放你的创造力、构建突破性的应用…

JS逆向之大众点评mtgsig

本教程仅限于学术探讨,也没有专门针对某个网站而编写,禁止用于非法用途、商业活动、恶意滥用技术等,否则后果自负。观看则同意此约定。如有侵权,请告知删除,谢谢! 目录 前言 一、先分析下接口参数 二、开导…

不懂这个118358-80-8甘露糖丝氨酸?看看Fmoc-Ser(Ac4Manα)-OH的全面解析吧!

Fmoc-Ser(Ac4Manα)-OH,甘露糖丝氨酸Product structure: Product specifications: 1.CAS No:118358-80-8 2.Molecular formula:C32H35NO14 3.Molecular weight:657.63 4.Packaging specification&#xff1…

浅谈响应式网页设计 —— 测试该知道的二三事

😏作者简介:博主是一位测试管理者,同时也是一名对外企业兼职讲师。 📡主页地址:【Austin_zhai】 🙆目的与景愿:旨在于能帮助更多的测试行业人员提升软硬技能,分享行业相关最新信息。…

【LeetCode】每日一题 -- 1240. 铺瓷砖 -- Java Version

题目链接:https://leetcode.cn/problems/tiling-a-rectangle-with-the-fewest-squares/ 1. 题解(1240. 铺瓷砖) 23.05.31 华为机试第二题 1.1 暴力深搜 – DFS NP-Complete 问题 题解参考:Java DFS暴力递归(详细注释&…

LeetCode 2352. Equal Row and Column Pairs【模拟,哈希表,前缀树】中等

本文属于「征服LeetCode」系列文章之一,这一系列正式开始于2021/08/12。由于LeetCode上部分题目有锁,本系列将至少持续到刷完所有无锁题之日为止;由于LeetCode还在不断地创建新题,本系列的终止日期可能是永远。在这一系列刷题文章…

100G QSFP28光模块类型和使用场景

100G QSFP28光模块是当前数据中心和通信网络中广泛应用的高速光模块之一。本文将详细介绍100G QSFP28光模块的类型、应用场景以及市场发展前景,并引用相关产品参数和行业统计数据,为读者提供全面的了解。 一、100G QSFP28光模块类型 100G QSFP28光模块…

开源 API 网关的访问策略(一)

许多企业和组织面临着网关访问控制的挑战,因为传统的访问控制方法往往过于笨重和繁琐。这些方法可能涉及复杂的规则集、繁琐的手动配置过程、缺乏灵活性和可扩展性等问题。此外,随着云计算和移动设备的广泛应用,访问控制的复杂性和挑战程度也…

stable-diffusion-webui 安装采坑日记

这里写自定义目录标题 安装容易采坑的点效果测试 安装容易采坑的点 1、不愿安装大佬的整合包。在自己时间足够多的情况下,可以尝试自己搭环境。但是自己安装的时间成本真的非常高,环境配置报错会让人陷入崩溃,如果没有代码排错能力&#xff…

sw2urdf导出的urdf文件中的惯性参数(inertial)错误的问题

现象描述 有时候,当我们使用solidworks建好我们的模型,然后利用【sw2urdf】导出后,发现其中的惯性参数,似乎不正确,ixx、izz这些参数都是很接近0的: 资料查找 其实这个不是我们设置的问题,而…

蓝牙耳机什么牌子好?无线蓝牙耳机品牌推荐

相信很多人都有过这样的经历,早晚高峰像沙丁鱼般被挤在公交或地铁上,嘈杂的环境、工作的劳累让你只想听听音乐追追剧,给自己一些放松的时光。可拿出有线耳机却常常被挤掉,更有被扯到耳朵的时候。想换一款蓝牙耳机,但面…

做连接中国企业出海的全球技术桥梁,亚马逊云科技出海日盛夏盛启

出海路漫漫,企业开拓全球市场而孤军奋战,常常会感到力不从心。好的产品有了,渠道有了,供应链有了,还要自己从0-1搭建存储、网络和架构?营销季来了想趁机冲一波销量,还要自己运维本地IDC、大促来…

docker-compose 部署zookeeper集群 —— 筑梦之路

1. zookeeper介绍 Zookeeper是一个开源的分布式协调服务中间件,它提供了一种分布式数据管理服务,能够实现分布式锁、命名服务、配置管理、集群管理等功能,从而帮助用户构建高可用、高性能的分布式系统。以下是Zookeeper的一些主要特点和功能&…

Java注解的入门学习

一、概念 Java注解是一种元数据形式,可以被添加到Java代码中的各种元素(类、方法、字段等)上,以提供关于这些元素的额外信息。注解是在Java 5中引入的一项特性,它们不直接影响代码的执行,而是提供了一种机…

顺序表算法练习

一.顺序表基础算法 1.说明 博主这里是算法练习,帅气的读者来这里默认已经知道了它,这里主要是针对408考研真题中关于线性表的算法题进行编写。第一部分是根据课本编写线性表的基本函数,剩下四个部分是针对考研真题的算法练习。 2.C语言代码…

ChatGLM的模型架构

ChatGLM的部署微调等,很多资料,不再赘述。 P-tuning V2 以P-Turing V2为例,介绍ChatGLM的网络结构。P-tuning V2方法训练时冻结模型的全部参数,只激活prefix_encoder的参数。 1、prefix encoder 初始化pre_len,代表…

Apple pencil平替哪款好?平价电容笔测评

现今,使用电容笔的人越来越多,各大品牌厂商对电容笔各种性能的设计也愈发用心。那么,电容笔哪个品牌好用呢?下面,我来给大家推荐几款质量好的Apple pencil平替,需要的小伙伴可以当个参考。 一、如何挑选到…