使用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驱动中如何对文件进行读写相关推荐

  1. Linux设备驱动开发-linux驱动中的阻塞访问方式

    阻塞与非阻塞是设备访问的两种不同的模式.什么是阻塞操作呢?其是指在执行设备操作的时候,如果不能获得资源,则挂起进程直到满足可操作的条件后再进行操作.而非阻塞操作则是在进程不能进行设备操作时,并不挂起到 ...

  2. Linux系统中的链接文件

    日志文件系统ext xfs里 1.节点区域 记录的都是文件属性,ls -l file可以看到的内容 ,文件的元数据inode tables 2.数据区域 放的是cat file看到的一切,数据块 ca ...

  3. linux系统中一切皆文件

    linux系统中一切皆文件 linux下"一切皆文件"是Unix/Linux的基本哲学之一. 普通文件.目录.字符设备.块设备和网络设备(套接字)等在Unix/Linux都被当做文 ...

  4. Linux系统中运行.sh文件的几种方法

    在Linux系统中执行.sh文件的几种方法: 1. cd到.sh文件所在的目录,然后执行./xxx.sh   [前提:该./sh文件要有可执行的权限,chmod u+x xxx.sh]  2. 在任何 ...

  5. 在linux终端中重命名文件,Linux系统中重命名文件的方法有哪些

    今天小编要跟大家分享的文章是关于Linux系统中重命名文件的方法有哪些.正在从事Linux运维工作和学习Linux运维知识的小伙伴们来和小编一起看一看吧,希望本篇文章能够对大家有所帮助. 在Linux ...

  6. 【踩坑】Linux java中ftp下载文件,解压文件损坏,以及图片下载打开只显示下载路径的问题

    [踩坑]Linux java中ftp下载文件,解压文件损坏,以及图片下载打开只显示下载路径的问题 一. 问题重现 二. 问题解决思路 1. 确认是不是上传就导致数据出错了 2. 是不是平台问题 三. ...

  7. Linux驱动——mmc sd card 块设备读写流程(十三)

    Linux驱动--mmc sd card 块设备读写流程(十三) 备注:   1. Kernel版本:5.4   2. 使用工具:Source Insight 4.0   3. 参考博客:   (1) ...

  8. linux probe函数调用,【整理】Linux驱动中,probe函数何时被调用

    [整理]Linux驱动中,probe函数何时被调用 用SourceInsight跟踪: 从driver_register看起,此处我的这里是: int driver_register(struct d ...

  9. 如何快速找出Linux系统中的大文件?

    今日主题: 如何快速找出Linux系统中的大文件? 在前面的文章中,我们讲到了压测时磁盘空间被占满的问题,可以跟今天的文章结合着看. 在性能测试中,我们经常要关注系统磁盘空间,防止因磁盘空间占满而导致 ...

最新文章

  1. Android: 启动init.rc 中service的权限问题【转】
  2. matplotlib画图绘制辅助线
  3. mysql模糊查询不会区分大小写_MySQL模糊查询(like)时区分大小写
  4. 线程的状态 Thread.State||NEW,RUNNABLE,BLOCKED,WAITING,TIMED_WAITING,TERMINATED
  5. wasm + ffmpeg实现前端截取视频帧功能
  6. JZOJ 3766. 【BJOI2014】大融合
  7. SpringBoot项目启动时提示程序包不存在和找不到符号
  8. matlab求系统根轨迹代码_要想正确画出根轨迹,先搞清楚这8大法则再说!
  9. 泰坦尼克数据集预测分析_探索性数据分析-泰坦尼克号数据集案例研究(第二部分)
  10. oracle to_char 数值,oracle to_char格式数值
  11. 代码里经常看见idle,是什么意思
  12. 20.案例实战:为@Async实现一个自定义线程池
  13. 插入排序算法(insertion-sort)
  14. MariaDB数据库用户创建/删除及权限授权/撤回
  15. 2048游戏作者:2048的成功和我
  16. 基于Fuzzy Logic的人群疏散模型(考虑攻击者的情况)
  17. 如何判断 Oracle RAC 中的 Master 主节点
  18. 方正飞鸿:构建中小企业“两化融合”新模式
  19. 改版后的CSDN如何更换皮肤
  20. Kali忘记root密码强制更改办法

热门文章

  1. python 日期字符串转换时间戳
  2. App推广人员应该知道的事:一条热门微博背后的传播心理
  3. 基于python的医学图像以辅助医疗系统
  4. 《网络安全2022:守望高质量》报告之数据安全热点事件与趋势解读
  5. 计算机科学与技术书单
  6. JQ如何获取原生的event对象
  7. Matlab 基于遗传算法优化的VMD信号去噪算法 创新点:基于样本熵作为适应度函数
  8. 建议先倒杯水,这次的货是真的干
  9. 【面经】三七互娱Java游戏研发实习(一面)
  10. python+HTMLTable,生成html表格