linux操作系统下nand flash驱动框架

  当我们需要在操作系统上读写普通文件的时候,总是需要一层层往下,最终到达硬件相关操作,当然底层设备大多数都是块设备

  NAND FLASH就作为一个最底层的块设备。

  而写驱动,就是要构建硬件与操作系统之间的联系,因此我们需要知道nand flash在Linux操作系统下的框架。

  框架如下:

  1.即使nand flash是一个块设备,它也能作为一个字符设备使用,因为说到底,也只是从寄存器内部读取值而已。

  2.对于不同的文件系统,会有不同的文件组织形式。

  3.由于块设备的硬件操作繁琐,就像nand flash的读写操作就需要发送地址跟命令后才能读写数据,又比如磁盘的读写就需要选择磁头,寻道,这就花费了大量读写无关的时间

    为了最大限度发挥读写性能,就需要用算法进行读写分类,排序等。

  4.nand flash协议层也是linux提供的,该层集成了nand flash共性的操作,并且向上提供操作函数

  5.nand flash协议层缺少硬件的实际信息,如某些寄存器的地址,它并不清楚,因此某些参数以及nand flash协议层没有实现的函数需要硬件操作层向上提供

  写nand flash驱动就是写的硬件相关操作层。


块设备驱动编写流程

  块设备驱动编写流程如下:

  当读写文件请求到来的时候,流程如下

  1.通过vfs进入文件系统,

  2.文件系统把文件读写转换为块设备读写,其中有运用算法对读写操作进行合并,排序等,最后把块设备读写放进队列

  3.循环从队列中取出读写要求,然后用处理函数(blk_init_queue设置)进行处理。

     这个函数就是连接上层(IO调度)跟底层(硬件操作)的桥梁,当我们调用add_mtd_partitions的时候,就建立了上下层的联系。

  4.对不同的处理要求,调用不同的nand的底层处理函数

最新文章

  1. [No0000A0]批处理命令学习之:常用的特殊符号
  2. 关于chart.js 设置canvas的宽度为父级元素的宽度的百分百 以及 X轴上面刻度数据太多如何处理
  3. final关键字(final是最终的)
  4. Metrics-Java版的指标度量工具之二
  5. jquery可见性选择器(综合)
  6. Apache + PHP 环境搭建
  7. html:关于表单功能的学习
  8. 华为OJ平台——密码强度等级
  9. angular 按需加载
  10. android 各种xml的作用
  11. 自定义navigationBar的高度
  12. 那些过目不忘的无线端交互设计(DRIBBBLE GIF动态图)
  13. javascript王国的一次旅行,一个没有类的世界怎么玩转面向对象?
  14. (一) .net core 2.0 初体验
  15. Webpack 2 视频教程 008 - WDS 端口号等配置相关
  16. python(函数)
  17. 使用脚本删除hive分区中的问题(expecting KW_EXCHANGE near mytable in alter exchange partition)
  18. ArcGIS API For Javascript_4.8-渲染器SimpleRenderer
  19. mongodb数据分组按字符串split
  20. 重读redux源码(一)

热门文章

  1. 【DeepLearning】Exercise:Vectorization
  2. Cobbler的Web管理和维护
  3. Socket模型(二):完成端口(IOCP)
  4. Windbg使用方法
  5. WCF Service中HttpContext.Current为null的解决办法
  6. jquery ajax 回调函数的值alert出来[object Object] 解决方法
  7. php非阻塞服务器
  8. CentOS7安装Tomcat
  9. 坑爹的高德地图API
  10. excel文件导入mysql