无忧启动论坛

 找回密码
 注册
搜索
系统gho:最纯净好用系统下载站广告联系 微信:wuyouceo QQ:184822951
查看: 3675|回复: 2

[求助] 请教wintoflash大佬,纯UEFI/grub2环境中,U盘CHS参数是否不可或缺。

[复制链接]
发表于 2020-8-7 11:29:26 | 显示全部楼层 |阅读模式
我在以往的学习中,得知:

1、在USB启动规范中,是要求U盘固件提供CHS参数,作为CHS-LBA转换计算的基础;
2、与规范紧密相关,在BIOS环境下,已经流出的BIOS源码表明,U盘固件要提供CHS
参数,作为构造INT13 Fn服务的计算前提(即使将来引导软件-如G4D-不用CHS方式访问
U盘,BIOS照样要提前计算,等待被调用)
3、UEFI环境下,我看到流出的UEFI源码片段有与U盘CHS关联的内容,但不清楚这些代码
是否是CSM环境专用。(因为源码太庞杂,要求的知识储备很高,我没有能力了解全貌)

现在想请教的是:
纯UEFI环境(/GRUB2)下,U盘CHS参数是否不可或缺。
无论是与否,结论出处是来源于某个规范要求? 抑或是解决某个问题时所需前提基础?
如果您有时间,望不吝赐教,十分感谢!

发表于 2020-8-7 15:54:34 | 显示全部楼层
UEFI 只是规定了固件向启动程序/操作系统提供的接口,并没有规定固件内部是如何实现这些东西的。理论上在 Linux/DOS/grub 上把这些接口都实现一遍那也能叫 UEFI。
至于读写磁盘方面的接口,当然是不用 CHS 的,但是内部实现是什么样那就不一定了。

平台固件内部的具体实现,是由 PI (Platform Initialization) 来规范的。
PI 规范可以从这里下载:https://uefi.org/sites/default/f ... _7_A_final_May1.pdf
但是,实际上很多东西都不在 PI 规范里面,比如 CSM。
PI 的规范我只看了很少一部分,因为用不到。但是据我印象中,PI 规范好像也没有明确规定磁盘必须满足什么要求。

开源的 UEFI 实现,比如最常用的 edk2,内部应该是不需要 CHS 的,CSM 部分似乎也不需要 (这个我不太清楚)。

回复

使用道具 举报

 楼主| 发表于 2020-8-8 10:01:35 | 显示全部楼层
本帖最后由 wuwuzz 于 2020-8-8 12:17 编辑

谢谢wintoflash大佬!我看了PDF文档,又对照有兴趣的代码片段揣摩了一番,

您的想法很对:
“PI规范没有明确规定磁盘必须满足什么要求...
读写磁盘方面...内部实现是什么样那就不一定了。”

现在可以进一步了,内部实现是需要CHS的。从流出的代码看,
内部的大致情况是,USB存储设备驱动涉及2个层面:

一、efiusbmass
EFI USB Mass Storage Driver,作用是:Installs BlkIo protocol on a USB Mass Storage device

二、usbmass
USB Mass Storage support implementation,并作为runtime存在

这里有许多重要的子过程:
USBMass Identify DeviceType()、 USBMass Get Device Parameters()、
USBMass Check Device Ready()、 USBMass Update Device Geometry()等,
与CHS有千丝万缕的联系,   尤其是USBMass Update Device Geometry()。

在这里,C*H*S被用作计算MaxLba(总扇区数)的方法之一。

并且,MaxLba还会在Install BLOCK_IO protocol时被引用,如下
MassDev->Media->LastBlock = DevInfo->dMaxLba-1;   // LastBlock is 0-based



回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|捐助支持|无忧启动 ( 闽ICP备05002490号-1 )

闽公网安备 35020302032614号

GMT+8, 2024-3-28 17:49

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表