【驱动】14.块设备驱动
【嵌入式八股】一、语言篇https://www.nowcoder.com/creation/manager/columnDetail/mwQPeM
【嵌入式八股】二、计算机基础篇https://www.nowcoder.com/creation/manager/columnDetail/Mg5Lym
【嵌入式八股】三、硬件篇https://www.nowcoder.com/creation/manager/columnDetail/MRVDlM
【嵌入式八股】四、嵌入式Linux篇(本专栏)https://www.nowcoder.com/creation/manager/columnDetail/MQ2bb0
块设备驱动
硬件原理
块设备驱动基本概念
- 数据传输以块为单位
- 带有数据缓冲区,使得数据传输非实时可以根据需要优化
- 缓冲区的数据读写顺序
- 一般不用关心与内核相关的大量数据结构
磁盘的基本概念
- 扇区(Sectors): 读写数据基本单位
- 磁道:存储数据的介质,可以分解成多个扇区
- 块(Blocks): 擦除数据基本单位
- 柱面(cylinders): 是由多个不同磁盘的相同磁道组成的存储区域
- 磁头: 读取磁盘数据的传感器,数量与磁盘保持一至
- 磁盘的运行过程:电梯调度算法
应用编程
磁盘使用流程
-
磁盘分区,相当于买了个大开间的房子,需要自己打隔断
- fdisk /dev/ramdiska
-
设备格式化,相当于给不同的隔断做装修
- mkfs.vfat /dev/ramdiska
-
挂载磁盘,拎包入住
- mount /dev/ramdiska /media
-
访问磁盘
- 直接对设备文件进行读写
- 直接对挂载点进行访问
- 读写磁盘数据的时机
- 缓冲区缓冲超时
- 读写数据量足够大
- 强制同步刷新缓冲区: sync卸载磁盘时,会刷新缓冲区
内核驱动
块设备数据结构
- page是最终写入磁盘的数据,所以必须是连续的,
- page是磁盘管理数据的颗粒度一般通用层的IO请示,也就是fs发起的,这些请示进入块设备之前,都可能被拆成多个更小的bio,主要是基于写平衡
- 这些被拆分的bio,再通过一定规则将相邻的多个bio进行合并,合并成request
- 而request就可以进入块设备了,但进入之前,一般还会进行数据优化调度
- 最后再对request进行统一管理,会建立一个request queue,而request就放在这个请求队列,一个磁盘一般维护着一个
剩余60%内容,订阅专栏后可继续查看/也可单篇购买
【嵌入式八股】嵌入式Linux 文章被收录于专栏
查阅整理上千份嵌入式面经,将相关资料汇集于此,主要包括: 0.简历面试 1.语言篇 2.计算机基础 3.硬件篇 4.嵌入式Linux【本专栏】 (建议PC端查看)