网站首页 > 技术教程 正文
固件C字营·版权所有
敬请关注微信公众号:“固件C字营”
敬请关注今日头条号:”固件C字营“
-------------------------------------------------------
块存储设备主要有硬盘、U盘、光盘等,读写这类设备我们需要通过ATA driver、NVME、USB driver来完成对底层硬件的最基本的访问,但是仅仅是能访问硬件是远远不够的,设计UEFI的最终目的是引导操作系统(也可以用来运行EFI shell),引导操作系统就需要使用Mass Storage Driver Stack。通常来说我们只需要实现Block I/O Protocol、Block I/O2 Protocol(支持non-blocking操作)就可以了,如果设备支持the SPC-4 /ATA8-ACS security commands的话那么我们还需要Storage Security Command Protocol,他们一起完成如下的工作(大概就是5个:读、写、block大小检测、容量检测、热插拔检测):
1.Read blocks of data from the mass storage device.
2.Write blocks of data to the mass storage device.
3. Determine the size of the blocks on the mass storage device.
4. Determine the total number of blocks on the mass storage device.
5.If the mass storage device supports removable media, then methods must exist to determine if media is present/ not present, and if the media has been changed.
Block I/O Protocol的实现:
它的实现在UDK里面有例子,以下是它要完成的任务:
1.Add global variable for the EFI_BLOCK_IO_PROTOCOL instance to BlockIo.c.
2.Add global variable for the EFI_BLOCK_IO2_PROTOCOL instance to BlockIo.c.
3.Add global variable for the EFI_BLOCK_IO_MODE structure to BlockIo.c.
4.Implement the Block I/O Protocol and Block I/O 2 Protocol services in BlockIo.c.
Block I/O Protocol的数据结构(Block.c):
Block I/O Protocol:Reset()
reset外设,默认假设不需要特别等待外设reset完毕,如果参数ExtendedVerification ==TRUE,那么就可能需要等待设备reset完成。
Block I/O Protocol:ReadBlocks() /ReadBlocksEx()
由以下的一系列步骤来完成:
1.检查设备是否存在。
2.如果侦测到media change event这通常是设备移除或者重新插入,那么就需要使用BS的ReinstallProtocolInterface()服务重新install Block I/O Protocols。BlockSize不允许为0不管有没有外接设备,如果没有侦测到设备就返回EFI_NO_MEDIA;如果设备改变了就返回EFI_MEDIA_CHANGED.
3.检查输入参数:主要是看看输入读取的地址和大小是否超过设备本身的大小和地址。
? The Buffer, sized BufferSize, must be a whole number of blocks
? The read does not start past the end of the media
? The read does not extend past the end of the media
? The Buffer is aligned as required
4.从设备读取指定的扇区,分两种情况,一个是阻塞的方式,一个是非阻塞的方式。后者需要有timer event去周期的侦测读操作是否完成,当完成后会signal调用者去完成后续操作。
5.If needed, copy the appropriate portion of the buffer to a location visible to the mass storage device.
Block I/O Protocol:WriteBlocks()/WriteBlockEx()
由以下的一系列步骤来完成:
1.检查设备是否存在。
2.如果侦测到media change event这通常是设备移除或者重新插入,那么就需要使用BS的ReinstallProtocolInterface()服务重新install Block I/O Protocols。BlockSize不允许为0不管有没有外接设备,如果没有侦测到设备就返回EFI_NO_MEDIA;如果设备改变了就返回EFI_MEDIA_CHANGED.
3.检查设备的私有数据结构Media structure的BlockSize字段,不允许为0不管有没有外接设备
4.检查输入参数
? The Buffer, sized BufferSize, is a whole number of blocks.
? The write does not start past the end of the media.
? The write does not extend past the end of the media.
? The Buffer is aligned as required.
5.If needed, copy the appropriate portion of the buffer to a location visible to the mass storage device.
6.把数据写入到扇区
7.把数据写入到指定的扇区,分两种情况,一个是阻塞的方式,一个是非阻塞的方式。后者需要有timer event去周期的侦测读操作是否完成,当完成后悔signal调用者去完成后续操作。
8.(Optional) Update the driver’s cache for better performance.
Block I/O Protocol:FlushBlocks()/FlushBlocksEx():
这两个服务是用来确保所有的挂起写操作都能最终完成写入到存储设备的扇区上去。它可以作为侦查设备移除之前的操作的一部分来保证数据的完整性。同时当使用非阻塞的方式的时候我们也需要使用timer event来周期的侦测写完成,然后signal调用者。
EFI_STORAGE_SECURITY_COMMAND_PROTOCOL 的实现:
只有设备支持SPC-4 or ATA8-ACS security commands的时候才需要,下面是简单示例,详细请参考UDK中的MdeModulePkg/Bus/Ata/AtaBusDxe
块存储设备的Block I/O Protocol这部分就先到这里,更多内容关注公众号。
敬请关注微信公众号:“固件C字营”
敬请关注今日头条号:”固件C字营“
猜你喜欢
- 2024-09-24 基于RT1052 Aworks使能U盘功能(十九)
- 2024-09-24 嵌入式入门级学习——基于国产平台T3开发板的测试教程(3)
- 2024-09-24 温馨呵护、音乐相伴!N9300音乐芯片在婴儿安抚器上的突破与应用
- 2024-09-24 「嵌入式必学」eMMC读写、SATA接口测试——基于全志T3平台(3)
- 2024-09-24 雅马哈RX-A8A/RX-A6A/RX-A4A功放8K60 4K120固件更新1.65来了
- 2024-09-24 U盘文件自动拷贝的软件
- 2024-09-24 adb使用技巧和usb通信原理探索
- 2024-09-24 N930X音乐芯片四种功能型号的MP3芯片
- 2024-09-24 还在花20元去电脑城?系统重装不求人,记住只修电脑不过夜!
- 2024-09-24 MP3音乐芯片有哪些?N930X音乐芯片核心特征!
你 发表评论:
欢迎- 05-14喜报!双色球5注824万头奖花落辽宁等地,开奖情况一览
- 05-14双色球新一期前瞻:红球蓝球走势深度剖析,精选号码提前看
- 05-1449倍、33倍、30倍、15倍!双色球第25053期开奖:多张倍投票集结
- 05-14双色球25054期:红球:04、05、15、18、29、33 蓝球:05、08
- 05-14厉害了!495倍独蓝票、万元独蓝票双双报喜!双色球第25053期开奖
- 05-14双色球25054期!龙头02凤尾31,独蓝14稳中,连号20-21围剿奖池!
- 05-14双色球25054期参考:蓝球侧重选2路蓝,红球依然三金胆、重号先
- 05-14双色球25054期:独蓝04,头01尾30,连号15-16,6+1精选
- 最近发表
-
- 喜报!双色球5注824万头奖花落辽宁等地,开奖情况一览
- 双色球新一期前瞻:红球蓝球走势深度剖析,精选号码提前看
- 49倍、33倍、30倍、15倍!双色球第25053期开奖:多张倍投票集结
- 双色球25054期:红球:04、05、15、18、29、33 蓝球:05、08
- 厉害了!495倍独蓝票、万元独蓝票双双报喜!双色球第25053期开奖
- 双色球25054期!龙头02凤尾31,独蓝14稳中,连号20-21围剿奖池!
- 双色球25054期参考:蓝球侧重选2路蓝,红球依然三金胆、重号先
- 双色球25054期:独蓝04,头01尾30,连号15-16,6+1精选
- 一号之差!井喷1416注,5注一等奖,100注二等,双色球25053开奖
- 双色球25054期:1、5尾,头单,尾双,斜连三码,胆11、12、27
- 标签列表
-
- sd分区 (65)
- raid5数据恢复 (81)
- 地址转换 (73)
- 手机存储卡根目录 (55)
- tcp端口 (74)
- project server (59)
- 双击ctrl (55)
- 鼠标 单击变双击 (67)
- debugview (59)
- 字符动画 (65)
- flushdns (57)
- ps复制快捷键 (57)
- 清除系统垃圾代码 (58)
- web服务器的架设 (67)
- 16进制转换 (69)
- xclient (55)
- ps源文件 (67)
- filezilla server (59)
- 句柄无效 (56)
- word页眉页脚设置 (59)
- ansys实例 (56)
- 6 1 3固件 (59)
- sqlserver2000挂起 (59)
- vm虚拟主机 (55)
- config (61)
本文暂时没有评论,来添加一个吧(●'◡'●)