固件开发
Firmware Development
我想在问题之前澄清一下,我不是任何公司任何职位的成熟专业程序员。这只是为了满足好奇心,目前与任何任务或项目无关。
据我了解,固件是放置在硬件上的软件,可根据指令授予其自主功能,指令是通过某种形式的输入给出的;只要输入流是可读的,这就可以通过驱动程序实现。驱动程序是带有预写参考库的软件包,这些参考库可以识别附加设备中每个可能功能的一组特定指令。
注意: 未引用,所以我知道这可能不准确。
我想知道的是固件或驱动程序是如何在不通过 OS 或存储介质安装的情况下放置在设备上的;例如 DVD 或 USB?特别是制造商安装的固件,例如所有计算机上都存在的 bios 和键盘驱动程序。我假设这些为了正常运行而较少或不依赖编译,这是我问这个问题的唯一原因。
不编译也能开发固件吗?
参考资料
Demystifying Firmware
C++ Kernel Development
Starting Firmware Development
这些只是说明 OS 是一种固件,并且该固件主要是用 C 语言开发的,汇编和 C++ 是可能的替代方案;也与内核开发有关。
是的,尤其是在较大的组件中。涉及 lua 的示例是 http://nodelua.org/doc/index/
但是,固件开发通常是一个非常受内存(并且经常 CPU)限制的环境。
C(或传统上,汇编程序)通常是首选,因为它可以生成非常小的可执行文件,并且在堆栈使用方面非常高效。当您以字节或千字节为单位计算内存时,这很重要。
使用非编译语言意味着您需要包含一个小型解释器,并且您可能无法为此留出足够的内存。
您进行了编辑,其中您建议"OS is a type of firmware"。
从某种意义上说,这可能是真的。
通常固件本身可以由操作系统和组件组成。例如,某些家庭互联网路由器中的固件将包含一个 OS(很可能是 linux!),但它仍被视为固件。 "embedded device with firmware" 的计算机与 'regular computer with regular software' 的计算机之间存在一点灰色区域,但固件通常是非常受限环境中的计算机系统 运行,通常带有非常具体的用途。
NetBSD 在其内核中包含 Lua。许多系统已经开发出来,它们不使用汇编(除了一小部分)、C 或 C++,而是使用其他一些语言——尽管出于大小和性能的原因,它通常仍然被编译。
至于固件的实际传输(无论其形式如何),这取决于相关设备。
有些设备要求将固件烧录到组件中。 (在ROM中,虽然有各种类型的ROM,有些可以重写)。
其他设备需要在设备开机时传输固件。
还有一些人拥有 SD 卡或电池供电的 RAM 或任何允许在重新启动时存储固件的东西。
我想在问题之前澄清一下,我不是任何公司任何职位的成熟专业程序员。这只是为了满足好奇心,目前与任何任务或项目无关。
据我了解,固件是放置在硬件上的软件,可根据指令授予其自主功能,指令是通过某种形式的输入给出的;只要输入流是可读的,这就可以通过驱动程序实现。驱动程序是带有预写参考库的软件包,这些参考库可以识别附加设备中每个可能功能的一组特定指令。
注意: 未引用,所以我知道这可能不准确。
我想知道的是固件或驱动程序是如何在不通过 OS 或存储介质安装的情况下放置在设备上的;例如 DVD 或 USB?特别是制造商安装的固件,例如所有计算机上都存在的 bios 和键盘驱动程序。我假设这些为了正常运行而较少或不依赖编译,这是我问这个问题的唯一原因。
不编译也能开发固件吗?
参考资料
Demystifying Firmware
C++ Kernel Development
Starting Firmware Development
这些只是说明 OS 是一种固件,并且该固件主要是用 C 语言开发的,汇编和 C++ 是可能的替代方案;也与内核开发有关。
是的,尤其是在较大的组件中。涉及 lua 的示例是 http://nodelua.org/doc/index/
但是,固件开发通常是一个非常受内存(并且经常 CPU)限制的环境。
C(或传统上,汇编程序)通常是首选,因为它可以生成非常小的可执行文件,并且在堆栈使用方面非常高效。当您以字节或千字节为单位计算内存时,这很重要。
使用非编译语言意味着您需要包含一个小型解释器,并且您可能无法为此留出足够的内存。
您进行了编辑,其中您建议"OS is a type of firmware"。 从某种意义上说,这可能是真的。
通常固件本身可以由操作系统和组件组成。例如,某些家庭互联网路由器中的固件将包含一个 OS(很可能是 linux!),但它仍被视为固件。 "embedded device with firmware" 的计算机与 'regular computer with regular software' 的计算机之间存在一点灰色区域,但固件通常是非常受限环境中的计算机系统 运行,通常带有非常具体的用途。
NetBSD 在其内核中包含 Lua。许多系统已经开发出来,它们不使用汇编(除了一小部分)、C 或 C++,而是使用其他一些语言——尽管出于大小和性能的原因,它通常仍然被编译。
至于固件的实际传输(无论其形式如何),这取决于相关设备。
有些设备要求将固件烧录到组件中。 (在ROM中,虽然有各种类型的ROM,有些可以重写)。
其他设备需要在设备开机时传输固件。
还有一些人拥有 SD 卡或电池供电的 RAM 或任何允许在重新启动时存储固件的东西。