当前位置: 首页 > news >正文

嵌入式培训机构四个月实训课程笔记(完整版)-Linux ARM驱动编程第五天-ARM Linux编程之file_operations详解 (物联技术666)

链接:https://pan.baidu.com/s/1V0E9IHSoLbpiWJsncmFgdA?pwd=1688
提取码:1688

struct file_operations{

struct module *owner;

// 指向拥有该结构的模块的指针,避免正在操作时被卸载,一般为初始化THIS_MODULES

loff_t (*llseek) (struct file *, loff_t, int);

// llseek用来修改文件当前的读写位置,返回新位置

// loff_t为一个"长偏移量"。当此函数指针为空,seek调用将会以不可预期的方式修改file结构中的位置计数器。

ssize_t (*read) (struct file *, char __user *, size_t, loff_t *);

// 从设备中同步读取数据。读取成功返回读取的字节数。设置为NULL,调用时返回-EINVAL

ssize_t (*aio_read) (struct kiocb *, char __user *, size_t, loff_t);

// 初始化一个异步的读取操作,为NULL时全部通过read处理

ssize_t (*write) (struct file *, const char __user *, size_t, loff_t *);

// 向设备发送数据。

ssize_t (*aio_write) (struct kiocb *, const char __user *, size_t, loff_t);

// 初始化一个异步的写入操作。

int (*readdir) (struct file *, void *, filldir_t);

// 仅用于读取目录,对于设备文件,该字段为 NULL

unsigned int (*poll) (struct file *, struct poll_table_struct *);

// 返回一个位掩码,用来指出非阻塞的读取或写入是否可能。

// 将pool定义为 NULL,设备会被认为即可读也可写。

int (*ioctl) (struct inode *, struct file *, unsigned int, unsigned long);

// 提供一种执行设备特殊命令的方法。不设置入口点,返回-ENOTTY

long (*unlocked_ioctl) (struct file *, unsigned int, unsigned long);

// 不使用BLK的文件系统,将使用此种函数指针代替ioctl

long (*compat_ioctl) (struct file *, unsigned int, unsigned long);

// 在64位系统上,32位的ioctl调用,将使用此函数指针代替

int (*mmap) (struct file *, struct vm_area_struct *);

// 用于请求将设备内存映射到进程地址空间。如果无此方法,将访问-ENODEV。

int (*open) (struct inode *, struct file *);

// 如果为空,设备的打开操作永远成功,但系统不会通知驱动程序

// 由VFS调用,当VFS打开一个文件,即建立了一个新的"struct file",之后调用open方法分配文件结构。open属于struct inode_operations。

int (*flush) (struct file *);

// 发生在进程关闭设备文件描述符副本,执行并等待,若设置为NULL,内核将忽略用户应用程序的请求。

int (*release) (struct inode *, struct file *);

// file结构释放时,将调用此指针函数,release与open相同可设置为NULL

int (*fsync) (struct file *, struct dentry *, int datasync);

// 刷新待处理的数据,如果驱动程序没有实现,fsync调用将返回-EINVAL

int (*aio_fsync) (struct kiocb *, int datasync);// 异步fsync

int (*fasync) (int, struct file *, int);

// 通知设备FASYNC标志发生变化,如果设备不支持异步通知,该字段可以为NULL

int (*lock) (struct file *, int, struct file_lock *);

// 实现文件锁,设备驱动常不去实现此lock

ssize_t (*readv) (struct file *, const struct iovec *, unsigned long, loff_t *);

ssize_t (*writev) (struct file *, const struct iovec *, unsigned long, loff_t *);

// readv和writev 分散/聚集型的读写操作,实现进行涉及多个内存区域的单次读或写操作。

ssize_t (*sendfile) (struct file *, loff_t *, size_t, read_actor_t, void *);

// 实现sendfile调用的读取部分,将数据从一个文件描述符移到另一个,设备驱动通常将其设置为 NULL

ssize_t (*sendpage) (struct file *, struct page *, int, size_t, loff_t *, int);

// 实现sendfile调用的另一部分,内核调用将其数据发送到对应文件,每次一个数据页,设备驱动通常将其设置为NULL

unsigned long (*get_unmapped_area)(struct file *, unsigned long,

       unsigned long,unsigned long, unsigned long);

// 在进程地址空间找到一个合适的位置,以便将底层设备中的内存段映射到该位置。大部分驱动可将其设置为NULL

int (*check_flags)(int);

// 允许模块检查传递给fcntl(F_SETEL…)调用的标志

int (*dir_notify)(struct file *filp, unsigned long arg);

// 应用程序使用fcntl来请求目录改变通知时,调用该方法。仅对文件系统有效,驱动程序不必实现。

int (*flock) (struct file *, int, struct file_lock *);// 实现文件锁

};

相关文章:

嵌入式培训机构四个月实训课程笔记(完整版)-Linux ARM驱动编程第五天-ARM Linux编程之file_operations详解 (物联技术666)

链接:https://pan.baidu.com/s/1V0E9IHSoLbpiWJsncmFgdA?pwd1688 提取码:1688 struct file_operations{ struct module *owner; // 指向拥有该结构的模块的指针,避免正在操作时被卸载,一般为初始化THIS_MODULES loff_t &#…...

第9章 网络编程

9.1 网络通信协议 通过计算机网络可以实现多台计算机连接,但是不同计算机的操作系统和硬件体系结构不同,为了提供通信支持,位于同一个网络中的计算机在进行连接和通信时必须要遵守一定的规则,这就好比在道路中行驶的汽车一定要遵…...

Python setattr函数

在Python编程中,setattr()函数是一个有用且灵活的内置函数,用于设置对象的属性值。它可以在运行时动态地设置对象的属性,无论是新建对象还是已有对象。本文将深入探讨setattr()函数的用法、语法、示例代码,并探讨其在实际编程中的…...

[C#]winform制作仪表盘好用的表盘控件和使用方法

【仪表盘一般创建流程】 在C#中制作仪表盘文案(通常指仪表盘上的文本、数字或指标显示)涉及到使用图形用户界面(GUI)组件,比如Windows Forms、WPF (Windows Presentation Foundation) 或 ASP.NET 等。以下是一个使用W…...

探索弗洛姆的思想:人类本质与爱的哲学

探索弗洛姆的思想:人类本质与爱的哲学 摘要:艾里希弗洛姆是20世纪著名的德裔美国哲学家和精神分析学家,他的理论在心理学、社会学和哲学领域均产生了广泛影响。弗洛姆的核心思想围绕人的本性、自由发展以及爱的重要性展开,强调了人…...

【碎片知识点】安装Linux系统 VMware与kali

天命:VMware就是可以运行操作系统的载体,kali就是Linux的其中一个分支 天命:Linux有两个分支版本:centos与ubuntu,kali底层就是ubuntu(所有Linux用起来都差不多,没啥区别) 天命&…...

Android 车载应用开发之SystemUI 详解

一、SystemUI SystemUI全称System User Interface,直译过来就是系统级用户交互界面,在 Android 系统中由SystemUI负责统一管理整个系统层的 UI,它是一个系统级应用程序(APK),源码在/frameworks/base/packages/目录下,而不是在/packages/目录下,这也说明了SystemUI这个…...

C# CAD-Xdata数据 添加(一)

运行环境Visual Studio 2022 c# cad2016 一、XData(扩展数据)特定代码值 XData(扩展数据)特定代码值 XData通过一系列DXF组码(DxfCode)存储不同类型的数据,包括但不限于ASCII字符串、已注册应…...

【NLP】MHA、MQA、GQA机制的区别

Note LLama2的注意力机制使用了GQA。三种机制的图如下: MHA机制(Multi-head Attention) MHA(Multi-head Attention)是标准的多头注意力机制,包含h个Query、Key 和 Value 矩阵。所有注意力头的 Key 和 V…...

nginx upstream server主动健康监测模块添加https检测功能

1 缘起 前面的《nginx upstream server主动健康检测模块ngx_http_upstream_check_module 使用和源码分析》系列已经分析了ngx_http_upstream_check_module的实现原理,并且在借助这个模块的框架实现了一个udp健康检测的新功能。   但是ngx_http_upstream_check_mod…...

OCP的operator——(4)用户任务:使用Operator创建etcd集群

文章目录 环境在namespace中安装Operator先决条件使用Web console从OperatorHub安装删除 使用CLI从OperatorHub安装从已安装的Operator创建应用使用Operator创建etcd集群报错从web console debug从命令行debug分析 参考 环境 RHEL 9.3Red Hat OpenShift Local 2.32 在namespa…...

win7自带截图工具保存失效解决办法

今日发现一台远航技术的win7中自带的截图工具使用时正常,保存图片时没有弹出保存位置的对话窗口,无法正常保存图片。解决方案如下: 1、进入注册表编辑器。开始-搜索程序和文件-输入 regedit 按下回车键,打开注册表; 2、…...

Android14之Android Rust模块编译语法(一百八十七)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏:多媒…...

分布式文件系统 SpringBoot+FastDFS+Vue.js【三】

分布式文件系统 SpringBootFastDFSVue.js【三】 七、创建后台--分角色管理7.1.创建后台数据库表7.2.创建实体类7.2.1.Admin7.2.2.Menu7.2.3.MenuBean7.2.4.Role7.2.5.RoleMenu 7.3.编辑配置文件application.yml7.4.编写工具类7.4.1.AuthContextHolder7.4.2.HttpUtils7.4.3.Stri…...

【深度学习每日小知识】全景分割

全景分割 全景分割是一项计算机视觉任务,涉及将图像或视频分割成不同的对象及其各自的部分,并用相应的类别标记每个像素。与传统的语义分割相比,它是一种更全面的图像分割方法,传统的语义分割仅将图像划分为类别,而不…...

机器人能否返回原点

657. 机器人能否返回原点 在二维平面上,有一个机器人从原点 (0, 0) 开始。给出它的移动顺序,判断这个机器人在完成移动后是否在 (0, 0) 处结束。 移动顺序由字符串 moves 表示。字符 move[i] 表示其第 i 次移动。机器人的有效动作有 R(右&a…...

Mysql5.6忘记密码,如何找回(windows)

mysql5.6安装 第一步:关闭正在运行的数据库服务 net stop mysql第二步:在my.ini文件当中的[mysqld] 任意一个位置放入 skip-grant-tables第三步:启动mysql服务 net start mysql第四步:服务启动成功后就可以登录了,…...

算法训练营day29, 贪心算法3

import ( "sort" ) // 1005. K 次取反后最大化的数组和 func largestSumAfterKNegations(nums []int, k int) int { //先从小到大排序 sort.Ints(nums) sum : 0 //将数组中负数转为正数 for i : 0; i < len(nums); i { if nums[i] < 0 && k > 0 …...

164基于matlab的奇异值分解、小波降噪、zoom细化

基于matlab的奇异值分解、小波降噪、zoom细化。程序已调通&#xff0c;可直接运行。 164 奇异值分解 小波降噪 zoom细化 (xiaohongshu.com)...

每日OJ题_算法_递归③力扣206. 反转链表

目录 力扣206. 反转链表 解析代码 力扣206. 反转链表 206. 反转链表 LCR 024. 反转链表 难度 简单 给你单链表的头节点 head &#xff0c;请你反转链表&#xff0c;并返回反转后的链表。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5] 输出&#xff1a;[5,4,3,…...

IDEA运行Tomcat出现乱码问题解决汇总

最近正值期末周&#xff0c;有很多同学在写期末Java web作业时&#xff0c;运行tomcat出现乱码问题&#xff0c;经过多次解决与研究&#xff0c;我做了如下整理&#xff1a; 原因&#xff1a; IDEA本身编码与tomcat的编码与Windows编码不同导致&#xff0c;Windows 系统控制台…...

模型参数、模型存储精度、参数与显存

模型参数量衡量单位 M&#xff1a;百万&#xff08;Million&#xff09; B&#xff1a;十亿&#xff08;Billion&#xff09; 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的&#xff0c;但是一个参数所表示多少字节不一定&#xff0c;需要看这个参数以什么…...

.Net框架,除了EF还有很多很多......

文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...

visual studio 2022更改主题为深色

visual studio 2022更改主题为深色 点击visual studio 上方的 工具-> 选项 在选项窗口中&#xff0c;选择 环境 -> 常规 &#xff0c;将其中的颜色主题改成深色 点击确定&#xff0c;更改完成...

java调用dll出现unsatisfiedLinkError以及JNA和JNI的区别

UnsatisfiedLinkError 在对接硬件设备中&#xff0c;我们会遇到使用 java 调用 dll文件 的情况&#xff0c;此时大概率出现UnsatisfiedLinkError链接错误&#xff0c;原因可能有如下几种 类名错误包名错误方法名参数错误使用 JNI 协议调用&#xff0c;结果 dll 未实现 JNI 协…...

Nuxt.js 中的路由配置详解

Nuxt.js 通过其内置的路由系统简化了应用的路由配置&#xff0c;使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...

Cinnamon修改面板小工具图标

Cinnamon开始菜单-CSDN博客 设置模块都是做好的&#xff0c;比GNOME简单得多&#xff01; 在 applet.js 里增加 const Settings imports.ui.settings;this.settings new Settings.AppletSettings(this, HTYMenusonichy, instance_id); this.settings.bind(menu-icon, menu…...

Android15默认授权浮窗权限

我们经常有那种需求&#xff0c;客户需要定制的apk集成在ROM中&#xff0c;并且默认授予其【显示在其他应用的上层】权限&#xff0c;也就是我们常说的浮窗权限&#xff0c;那么我们就可以通过以下方法在wms、ams等系统服务的systemReady()方法中调用即可实现预置应用默认授权浮…...

DeepSeek 技术赋能无人农场协同作业:用 AI 重构农田管理 “神经网”

目录 一、引言二、DeepSeek 技术大揭秘2.1 核心架构解析2.2 关键技术剖析 三、智能农业无人农场协同作业现状3.1 发展现状概述3.2 协同作业模式介绍 四、DeepSeek 的 “农场奇妙游”4.1 数据处理与分析4.2 作物生长监测与预测4.3 病虫害防治4.4 农机协同作业调度 五、实际案例大…...

使用 SymPy 进行向量和矩阵的高级操作

在科学计算和工程领域&#xff0c;向量和矩阵操作是解决问题的核心技能之一。Python 的 SymPy 库提供了强大的符号计算功能&#xff0c;能够高效地处理向量和矩阵的各种操作。本文将深入探讨如何使用 SymPy 进行向量和矩阵的创建、合并以及维度拓展等操作&#xff0c;并通过具体…...