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

时间:2018-01-18 17:03:07

标签: kernel firmware userspace

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

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

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

固件驻留在操作系统无法直接访问的设备上(AFAIK必须通过驱动程序)其次固件驻留在只读存储器部分,用户空间应用程序如何能够访问更少的内容改变它。

1 个答案:

答案 0 :(得分:0)

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

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

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

我只是抓住了一般性的表面;这是一个很大的话题。 希望这有点帮助。