EDKII: 磁盘操作之 BlockIo(2), DiskIo(2)
EDKII中提供了几种磁盘操作方法,包括同步/异步,块操作/任意操作。整理如下:
函数 | 备注 | BlockIo | BlockIo2 | DiskIo | DiskIo2 |
操作方式 | 按Block | 按Block | 任意大小、位置 | 任意大小、位置 | |
同、异步 | 阻塞 | 异步 | 阻塞 | 异步 | |
成员Revision | 有 | 无 | 有 | 有 | |
成员Media | 设备信息 | 有 | 有 | 无 | 无 |
函数Reset | 有 | 有(阻塞) | 无 | 无 | |
函数ReadBlocks | 有 | 有 | 有 | 有 | |
函数WriteBlocks | 有 | 有 | 有 | 有 | |
函数FlushBlocks | 有 | 有 | 无 | 有 | |
函数Cancel | 无 | 无 | 无 | 有 | |
1. 更高级的磁盘操作可以用PassThrough操作,透过PassThru直接向ATA设备发送ATA命令。(How about NVMe device?)
2. 异步函数可以通过 Event或Notification来处理。
很奇怪,这些属性、函数的定义并不统一,不知道是什么原因! 哪位大神可以解释一下?