邯郸哪里制作网站,请人建网站应注意什么,wordpress提高浏览量,工装设计方案网站• 块设备是Linux三大设备之一#xff08;另外两种是字符设备#xff0c;网络设备#xff09;#xff0c;块 设备也是通过/dev下的文件系统节点访问。 • 块设备的数据存储单位是块#xff0c;块的大小通常为512B至32KB不等。 • 块设备每次能传输一个或多个块#xff0c… • 块设备是Linux三大设备之一另外两种是字符设备网络设备块 设备也是通过/dev下的文件系统节点访问。 • 块设备的数据存储单位是块块的大小通常为512B至32KB不等。 • 块设备每次能传输一个或多个块支持随机访问并且采用了缓存技 术。 • 常见的块设备包括IDE硬盘、SCSI硬盘、CD-ROM等等。 – IDEIntegrated Device Electronics集成磁盘电子接口 – SCSISmall Computer System Interface小型计算机系统接口 • 12.1 块设备驱动程序设计概要
• 块设备驱动在虚拟文件系统VFS中的位置 VFSVirtual File System虚拟文件 系统的作用就是 采用标准的Unix系 统调用读写位于不 同物理介质上的不 同文件系统即为 各类文件系统提供 了一个统一的操作 界面和应用编程接 口。VFS是一个可 以让open()、read()、 write()等系统调用 不用关心底层的存 储介质和文件系统 类型就可以工作的 粘合层。
• 12.1.1 块设备的数据交换方式
– 块设备以块512B至32KB为单位进行读写字符设 备以字节为单位进行读写。
– 块设备有对应的缓冲区并使用了请求队列对I/O请求 进行管理块设备支持随机访问字符设备只能顺序 访问。
• 11.1.2 块设备读写请求
– 对块设备的读写都是通过请求实现的。
– Linux中每一个块设备都有一个I/O请求队列每个请求 队列都有调度器的插口调度器可以实现对请求队列 里请求的合理组织如合并临近请求调整请求完成 顺序等。
– Linux 2.6内核有4个I/O调度器Scheduler ① No-op I/O scheduler实现了一个简单的FIFO队列 ② Anticipatory I/O scheduler是目前内核中默认的I/O调度器 ③ Deadline I/O scheduler是针对Anticipatory I/O scheduler的 缺点进行改善而来的 ④ CFQ I/O schedule为系统内的所有任务分配相同的带宽 提供一个公平的工作环境它比较适合桌面环境。
• 12.2 Linux块设备驱动相关数据结构与函数
• 12.2.1 gendisk结构
– gendisk通用磁盘数据结构struct gendisk。在Linux内核中gendisk数据结构表示是一个 独立磁盘设备或者一个分区。
– Linux提供了一组函数接口来操作gendisk数据结构 ① 分配gendisk – structgendisk*alloc_disk(int minors); ② 增加注册gendisk – void add_disk(structgendisk *disk); ③ 释放删除gendisk – void del_gendisk(struct gendisk *gd); ④ 引用计数 – 减少引用计数get_disk(); – 增加引用计数put_disk(); ⑤ 设置和查看磁盘容量 – 设置磁盘容量void set_capacity(structgendisk*disk, sector_tsize); – 查看磁盘容量sector_tget_capacity(structgendisk*disk) • 12.2.2 request结构
– 块设备的读写都是通过请求实现的。
– 请求数据结构struct request • 12.2.3 request_queue队列
– 每一个块设备都有一个I/O请求队列。
– 请求队列数据结构struct request_queue
– 请求队列数据结构包括 ① 请求队列的初始化和清除 ② 提取和删除请求 ③ 队列的参数设置 ④ 内核通告。 • 12.2.4 bio结构
– bioblock I/O块I/O是Linux内核中通用块层的一个 核心数据结构它描述了块设备的I/O操作联系了内 存缓冲区与块设备。
– bio是底层对部分块设备的I/O请求描述其包含驱动程 序执行请求所需的全部信息。 • 12.3 块设备的注册与注销
• 块设备的注册 – int register_blkdev(unsigned int major, const char *name); • major主设备号 • name设备名
• 块设备的注销 – int unregister_blkdev(unsigned int major, const char* name); • major主设备号 • name设备名
• 12.4 块设备初始化与卸载
• 块设备的初始化过程主要完成以下的工作 ① 注册块设备及块设备驱动程序 ② 分配、初始化、绑定请求队列如果使用请求队列的话 ③ 分配、初始化gendisk为相应的成员赋值并添加gendisk ④ 其他初始化工作如申请缓存区设置硬件尺寸不同设备有不同的处理。
• 块设备的卸载过程刚好与初始化过程相反 ① 删除请求队列 ② 撤销gendisk的引用并删除gendisk ③ 释放缓冲区撤销对块设备的应用注销块设备驱动。
• 12.5 块设备操作
• 块设备操作数据结构struct block_device_operations
– 字符设备文件操作数据结构struct file_operations ① 打开和释放
– int(*open) (struct block_device *, fmode_t);
– int(*release) (struct gendisk *, fmode_t);
② I/O操作
– int(*ioctl) (struct block_device *, fmode_t, unsigned, unsigned long);
– int(*locked_ioctl) (struct block_device *, fmode_t, unsigned, unsigned long);
– int(*compat_ioctl) (struct block_device *, fmode_t, unsigned, unsigned long);
③ 介质改变
– int(*media_changed) (struct gendisk *);
④ 使介质有效
– int(*revalidate_disk) (struct gendisk *);
⑤ 获得驱动器信息
– int(*getgeo)(struct block_device *, struct hd_geometry *);
⑥ 模块指针
– struct module *owner;
• 12.6 请求处理
• 块设备没有read和write操作函数。
• 对块设备的读写是通过请求函数完成的。
• 请求处理分为两种情况
– 1使用请求队列 ① 请求函数 ② 通告内核 ③ 屏障请求和不可重试请求
– 2不使用请求队
• 12.7 MMC卡驱动
• 12.7.1 MMC/SD芯片介绍
– MMC卡Multi-Media Card多媒体卡1997年由西门子公司和 SanDisk公司共同开发基于东芝公司的NAND Flash技术。
– SD卡SecureDigital Memory Card安全数码卡SD卡是由松下电器、 东芝和SanDisk联合推出1999年8月发布。– SD卡的数据传送和物理规范由MMC卡发展而来大小和MMC卡 32mm×24mm×1.4mm差不多尺寸为32mmx24mmx2.1mm长 宽和MMC卡一样只是比MMC卡厚了0.7mm以容纳更大容量的存贮单 元。 • MMC卡、SD卡的管脚定义 • Micro SD卡TF卡
– Micro SD Card原名Trans-flash CardTF卡2004年正式更名为 Micro SD Card由SanDisk闪迪公司发明主要用于移动电话。 • MMC卡的工作模式 ① MMC模式标准的默认模式。 ② SPI模式Serial Peripheral Interface串行外设接口 用 于只需要小数量的卡通常是一个和低数据传输率。
• SD卡的工作模式 ① SD模式9根信号线CLK、CMD、DAT0-DAT3、Vcc 5V、VssGND、Css2GND。 ② SPI模式Serial Peripheral Interface串行外设接口 7 根信号线CS、CLK、MISODATAOUT、MOSI DATAIN、 Vcc5V、VssGND、Css2GND。 • 12.7.2 MMC/SD卡驱动结构
– MMC/SD驱动层次 ① 块设备驱动层drivers/mmc/card该层实现块设备驱动为上层提供块 设备的操作功能。 ② MMC/SD核心层drivers/mmc/core 该层主要完成MMC/SD规范和协议 的实现。 ③ MMC/SD接口层drivers/mmc/host 该层主要实现Host接口的驱动并 为上层提供操作接口。
– 块设备驱动层、MMC/SD核心层与具体的硬件平台无关MMC/SD接口 层根据不同的硬件和不同的控制器有不同的实现。
• 12.7.3 MMC卡块设备驱动分析
– drivers/mmc/card/block.c
– drivers/mmc/card/queue.c
– 主要完成 ① 注册与注销 ② 设备加载与卸载 ③ 设备的打开与释放 ④ MMC驱动的请求处理函数