首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >设备的固件在何时何地运行?

设备的固件在何时何地运行?
EN

Software Engineering用户
提问于 2015-03-21 19:51:59
回答 3查看 2.6K关注 0票数 4

设备的固件在设备或设备的控制器中运行吗?

设备的固件什么时候运行?它是否在cpu向设备控制器发送命令和/或数据时才运行?

例如,

  • 对于一个硬盘驱动器及其控制器和固件,它的固件是否在其控制器中运行,并且只有当cpu读写到硬盘驱动器时才运行?
  • 对于无线适配器及其固件,其固件是否在计算机连接或连接到无线互联网的情况下才运行?
  • 对于BIOS,它是裸计算机系统的固件吗?它在cpu中运行吗?在操作系统完全启动之后,它还在运行吗?

谢谢。

我不认为链接的问题是关于固件。

EN

回答 3

Software Engineering用户

回答已采纳

发布于 2015-03-21 21:50:53

设备的固件在设备或设备的控制器中运行吗?设备的固件什么时候运行?它是否在cpu向设备控制器发送命令和/或数据时才运行?

这完全取决于设备,而不是。

例如,您的花园品种SATA磁盘驱动器有自己的一个或多个处理器,并且磁盘驱动器的大部分固件都是在这些处理器上执行的。除其他杂务外,磁盘驱动器的处理器不断监视磁盘的错误,并在请求时向主机CPU报告。这被称为自我监控、分析和报告技术(聪明).

设备还可以具有选项ROM,其中包含可由主机CPU执行的设备的支持代码。

对于BIOS,它是裸计算机系统的固件吗?它在cpu中运行吗?在操作系统完全启动之后,它还在运行吗?

是的,它在计算机CPU上运行,但我的印象是,您认为它在某种单独的执行上下文中运行。它实际上只是一个代码库,操作系统可以根据需要调用它来执行某种低级IO (BIOS代表基本的输入/输出系统)。如果操作系统有用于同一任务的其他代码库,那么操作系统可能会忽略BIOS,也可能不会忽略BIOS。

固件实际上只是一种存储类型。它可以包含供主机CPU使用的代码,也可以包含机载设备控制器的代码,或者只包含数据。

票数 8
EN

Software Engineering用户

发布于 2016-04-25 14:54:59

我认为你把固件和软件分开处理。固件与存储在内存中的应用软件不同,一旦设备启动,固件就会运行。这就是为什么它被称为(坚固的)器皿。现在,您的问题,剂量固件运行的设备。是的,每个固件都会在他的专用控制器上运行。

对于一个硬盘驱动器及其控制器和固件,它的固件是否在其控制器中运行,并且只有当cpu读写到硬盘驱动器时才运行?

是的,它将运行在自己的controller.But固件将持续运行,直到它的电源。它可能在某个无限循环中等待,直到收到来自CPU的命令。

对于无线适配器及其固件,其固件是否在计算机连接或连接到无线互联网的情况下才运行?

如前所述,一旦控制器启动,固件将立即运行。它可以对接收到的事件执行某些指定的操作。

对于BIOS,它是裸计算机系统的固件吗?它在cpu中运行吗?在操作系统完全启动之后,它还在运行吗?

在BIOS情况下,固件存储在BIOS上,但将运行在CPU上。一个称为引导加载器的小型固件将在RAM中加载BIOS固件,CPU将开始执行它,直到操作系统加载。

票数 2
EN

Software Engineering用户

发布于 2019-06-27 08:37:18

一个“设备”通常会有某种处理器和内存。它可以是小的,也可以是非常强大的,而且内存的数量可以是小的,也可以是非常大的。现代固态驱动器(SSD)本质上是一台计算机,其固件和硬件设计用于管理NAND,以及从主机接收命令并对其进行处理。固件是通常在设备的处理器和内存上运行的代码和潜在的数据。可以编写固件来接收主机的命令并执行某些操作。

我写了一篇文章,解释了固件的更多细节,以及它是如何从这里开始的:https://medium.com/solid-state-drives-ideas-knowledge-and-development/where-firmware-begins-ssd-firmware-development-part-9-4fb9f84dd16a

这篇文章引用了几句话

应用软件通常在已经从系统“引导”的环境上执行,通常是与操作系统一起执行。对于那些已经熟悉软件应用程序开发的人来说,主要的功能通常是一切都从那里开始。对于固件开发,开发人员需要了解启动过程,从启动时开始。一个SoC将至少有一个CPU和各种硬件组件,这些都是在开机时启动的.硬件组件最初将根据设计定义的规则运行,并且通常通过寄存器根据固件中的设置更改行为(参见第4部分)。对于CPU (至少是主CPU),有一个起点。根据SoC的规范,起点可能会有所不同,但是有一个预定义的指令地址,该指令地址将从CPU开始执行。例如,CPU可以在指令地址0x00000000处开始执行。

在同一组文章中,您还可以找到有关固件开发的更多信息。

票数 0
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/276981

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档