我们知道基于“vtable”原理的接口。一旦有了指向对象的指针,就可以将其缩小到接口,新对象是同一个对象,但仅限于接口。我一直认为硬件固件有点相似。例如,对于块设备(HDD 或 SSD),此接口类似于读、写、状态等。所以驱动程序就是这样一个设备接口的用户。
不,不是。面向对象的编程与个人计算机硬件无关,您认为virtual
调用与设备驱动程序相关的印象是错误的。他们完全没有关系。
事实证明,任何存储设备都有固件和一个标记为内部的特殊存储区域,用于保存固件。制造商发布的程序允许“闪存”他们的特定设备,例如通过将新程序写入其内部空间,对操作系统隐藏。
这不是真的。并非所有存储设备都具有固件 - 并且它们具有的任何固件(如果有)不一定存储在可重写闪存上。例如,存在不可重写的ROM 芯片。
我的问题是:在软件级别上,他们如何对驱动器的“隐藏”区域执行这种读写操作?死的“COM端口”有什么关系?
如果您指的是现代(2004 年后)SATA 和 NVMe 存储设备的固件更新,那么可以使用 SATA 和 NVMe 的内置命令更新这些设备的固件。
这记录在像这样的地方和t13.org ATA/ATAPI 命令集 - 4
如果 HDD 可以在所有操作系统上运行,为什么固件升级软件只针对 Windows 发布?在 linux 的开源世界中,我需要阅读哪些内容才能更好地理解“调试固件”?
为什么固件升级软件只针对Window发布
因为 Windows 是这类硬件用户使用的主要操作系统。虽然可以使用原始 SATA/NVMe 命令更新固件,但您仍然需要主机操作系统来运行将发出这些 SATA/NVMe 命令的程序。假设为 Windows 的 SSD 构建固件更新需要 10 万美元,而 Linux 的固件更新需要花费 10 万美元(Linux 和 Windows 都需要 20 万美元)——但 90% 的 Linux 用户也运行 Windows——那么为什么要花 20 万美元购买 100当您可以花 10 万美元购买 90% 的覆盖率,然后花额外的 10 万美元购买法拉利或特斯拉 Model X P100D 并责怪用户没有从 Windows U 盘启动来升级他们的固件时,百分比覆盖率?(旁注:我选择了后者,是的,我真的很喜欢我的特斯拉 Model X)
你不可能有一个程序只是神奇地在任何计算机平台(Windows、BSD、Linux、macOS、QNX 等)上运行并更新外围设备固件:它总是需要是一个可以由主机操作系统执行的程序(你可以认为 UEFI/EFI 是一种与平台无关的方法,但实际上 UEFI/EFI 仍然是它自己的平台)
在 linux 的开源世界中,我需要阅读哪些内容才能更好地理解“调试固件”?
200 毫克 Adderall 和IDA Pro的盗版副本。
...或 500mg 右旋糖苷和NSA Ghidra。