如何从用户空间更新固件?



这是一直让我大吃一惊的事情之一。当我登录到Windows时,我怎么可能运行一个应用程序,该应用程序允许我升级我的devive BIOS或为我的硬盘等安装固件。

关于这如何可能,我还没有找到任何令人满意的答案。

这对我来说如此神奇的原因是:

固件驻留在操作系统无法直接访问的设备上(AFAIK 它必须通过驱动程序)其次固件驻留在只读内存部分,用户空间应用程序如何甚至可以访问类似的东西,更不用说更改它了。

拥有操作系统的目的之一是它将与不允许用户空间通信的设备进行通信。 例如,即使打印到屏幕上也是与应用程序空间不拥有的设备进行通信。您的应用程序空间程序将调用操作系统,说"请显示这些东西",操作系统将为您完成。

在更新固件的情况下,您可以调用服务来为您执行更新。 存储固件的设备通常是称为"闪存"的设备类型的芯片。 该芯片很难写入,但如果您知道如何并具有适当的访问权限,则可以将其擦除和重新编程。操作系统将调用一个驱动程序,该驱动程序为操作系统提供服务,并知道它所支持的设备的具体细节。 因此,您调用操作系统服务,并为其提供从制造商处下载的新固件映像。映像通常经过加密签名,以便操作系统可以确定它确实来自制造商并且未被修改,这意味着它可以安全地用作新固件。 检查映像是否通过签名测试后,操作系统可以擦除闪存的一部分,并使用新固件重新编写它。 此外,闪存中可能会有固件的备份副本,以防在此过程中出现问题。

例如,如果您在擦除后但在写入新固件之前关闭计算机电源,您将没有固件,也无法启动。这就是为什么在某些更新期间,操作系统会加热您不要关闭计算机,并确保您已连接到电源。有时,固件的备份副本可以使此步骤的风险降低一些。

我只是泛泛而谈;这是一个很大的话题。 希望这有所帮助。

最新更新