Linux驱动中如何对文件进行读写
使用filp_open()和struct file可以在驱动模块中访问其他文件。
注意:
在调用pfilp->f_op->read和pfilp->f_op->write等对文件的操作之前,应该先备份pold_fs,然后设置set_fs(KERNEL_DS)。
默认情况下,read或者write会对传进来的参数buff进行指针检查。如果不是在用户空间会拒绝访问。因为是在内核模块中,所以buff肯定不在用户空间,所以要增大其寻址范围,即set_fs(KERNEL_DS)。该函数的作用是改变kernel对内存地址检查的处理方式,其实该函数的参数fs只有两个取值:USER_DS,KERNEL_DS,分别代表 用户空间和内核空间,默认情况下,kernel取值为USER_DS,即对用户空间地址检查并做变换。那么要在这种对内存地址做检查变换的函数中使用内核 空间地址,就需要使用set_fs(KERNEL_DS)进行设置。get_fs()一般也可能是宏定义,它的作用是取得当前的设置。
使用以上函数的其它注意点:
1. 其实Linux Kernel组成员不赞成在kernel中独立的读写文件(这样做可能会影响到策略和安全问题),对内核需要的文件内容,最好由应用层配合完成。
2. 在可加载的kernel module中使用这种方式读写文件可能使模块加载失败,原因是内核可能没有EXPORT你所需要的所有这些函数。
3. 分析以上某些函数的参数可以看出,这些函数的正确运行需要依赖于进程环境,因此,有些函数不能在中断的handle或Kernel中不属于任可进程的代码 中执行,否则可能出现崩溃,要避免这种情况发生,可以在kernel中创建内核线程,将这些函数放在线程环境下执行(创建内核线程的方式请参数 kernel_thread()函数)。
Linux驱动中如何对文件进行读写相关推荐
- Linux设备驱动开发-linux驱动中的阻塞访问方式
阻塞与非阻塞是设备访问的两种不同的模式.什么是阻塞操作呢?其是指在执行设备操作的时候,如果不能获得资源,则挂起进程直到满足可操作的条件后再进行操作.而非阻塞操作则是在进程不能进行设备操作时,并不挂起到 ...
- Linux系统中的链接文件
日志文件系统ext xfs里 1.节点区域 记录的都是文件属性,ls -l file可以看到的内容 ,文件的元数据inode tables 2.数据区域 放的是cat file看到的一切,数据块 ca ...
- linux系统中一切皆文件
linux系统中一切皆文件 linux下"一切皆文件"是Unix/Linux的基本哲学之一. 普通文件.目录.字符设备.块设备和网络设备(套接字)等在Unix/Linux都被当做文 ...
- Linux系统中运行.sh文件的几种方法
在Linux系统中执行.sh文件的几种方法: 1. cd到.sh文件所在的目录,然后执行./xxx.sh [前提:该./sh文件要有可执行的权限,chmod u+x xxx.sh] 2. 在任何 ...
- 在linux终端中重命名文件,Linux系统中重命名文件的方法有哪些
今天小编要跟大家分享的文章是关于Linux系统中重命名文件的方法有哪些.正在从事Linux运维工作和学习Linux运维知识的小伙伴们来和小编一起看一看吧,希望本篇文章能够对大家有所帮助. 在Linux ...
- 【踩坑】Linux java中ftp下载文件,解压文件损坏,以及图片下载打开只显示下载路径的问题
[踩坑]Linux java中ftp下载文件,解压文件损坏,以及图片下载打开只显示下载路径的问题 一. 问题重现 二. 问题解决思路 1. 确认是不是上传就导致数据出错了 2. 是不是平台问题 三. ...
- Linux驱动——mmc sd card 块设备读写流程(十三)
Linux驱动--mmc sd card 块设备读写流程(十三) 备注: 1. Kernel版本:5.4 2. 使用工具:Source Insight 4.0 3. 参考博客: (1) ...
- linux probe函数调用,【整理】Linux驱动中,probe函数何时被调用
[整理]Linux驱动中,probe函数何时被调用 用SourceInsight跟踪: 从driver_register看起,此处我的这里是: int driver_register(struct d ...
- 如何快速找出Linux系统中的大文件?
今日主题: 如何快速找出Linux系统中的大文件? 在前面的文章中,我们讲到了压测时磁盘空间被占满的问题,可以跟今天的文章结合着看. 在性能测试中,我们经常要关注系统磁盘空间,防止因磁盘空间占满而导致 ...
最新文章
- Android: 启动init.rc 中service的权限问题【转】
- matplotlib画图绘制辅助线
- mysql模糊查询不会区分大小写_MySQL模糊查询(like)时区分大小写
- 线程的状态 Thread.State||NEW,RUNNABLE,BLOCKED,WAITING,TIMED_WAITING,TERMINATED
- wasm + ffmpeg实现前端截取视频帧功能
- JZOJ 3766. 【BJOI2014】大融合
- SpringBoot项目启动时提示程序包不存在和找不到符号
- matlab求系统根轨迹代码_要想正确画出根轨迹,先搞清楚这8大法则再说!
- 泰坦尼克数据集预测分析_探索性数据分析-泰坦尼克号数据集案例研究(第二部分)
- oracle to_char 数值,oracle to_char格式数值
- 代码里经常看见idle,是什么意思
- 20.案例实战:为@Async实现一个自定义线程池
- 插入排序算法(insertion-sort)
- MariaDB数据库用户创建/删除及权限授权/撤回
- 2048游戏作者:2048的成功和我
- 基于Fuzzy Logic的人群疏散模型(考虑攻击者的情况)
- 如何判断 Oracle RAC 中的 Master 主节点
- 方正飞鸿:构建中小企业“两化融合”新模式
- 改版后的CSDN如何更换皮肤
- Kali忘记root密码强制更改办法