固件开发

时间:2015-10-12 04:57:18

标签: operating-system kernel hardware firmware

我想在问题之前澄清一点,我不是任何公司任何职位的专业程序员。这仅仅是为了满足好奇心,目前不属于任何任务或项目。

据我了解,固件是放在硬件上的软件,用于通过某种形式的输入给出指令的自主功能;只要输入流是可读的,这可以通过驱动程序实现。驱动程序是带有预先编写的参考库的软件包,可识别连接设备中每个可能功能的特定指令集。

注意:没有引用,所以我知道这可能不准确。

我想知道的是,如果没有通过操作系统或存储介质进行安装,固件或驱动程序如何放置在设备上;比如DVD或USB?特别是制造商安装的固件,如所有计算机上都存在的BIOS和键盘驱动程序。我假设这些更少或不依赖于编译才能正常运作,这是我提出这个问题的唯一原因。

可以在没有编译的情况下开发固件吗?

参考

这些只是解释了操作系统是一种固件,并且该固件主要是用C语言开发的,使用Assembly和C ++作为合理的替代方案;也与内核开发有关。

1 个答案:

答案 0 :(得分:1)

是的,特别是在较大的组件中。涉及lua的示例是http://nodelua.org/doc/index/

但是,固件开发通常是一种极其内存(并且经常是CPU)受限的环境。

C(或传统上,汇编程序)通常是首选,因为它可以生成极小的可执行文件,并且在堆栈使用方面非常有效。当您以字节或千字节计数内存时,这很重要。

使用非编译语言意味着您需要包含一个小型解释器,并且您可能无法为此留出足够的内存。

您已进行了编辑,其中您建议"操作系统是一种固件"。 从某种意义上说,这可能是真的。

固件本身通常可以包含带有组件的操作系统。例如,某些家庭互联网路由器中的固件将包含一个操作系统(很可能是Linux!),但它仍然被视为固件。计算机是带有固件的嵌入式设备与使用普通软件的常规计算机之间有一点灰色区域,但通常固件是计算机系统在非常有限的环境中运行,通常具有非常特殊的用途。

NetBSD在其内核中包含了Lua。已经开发了许多系统,它们不使用汇编(除了它的一小部分),C或C ++,而是使用其他语言 - 尽管它通常仍然是出于大小和性能原因而编译的。

至于固件的实际传输(无论其形式如何),这取决于相关设备。

某些设备要求将固件刻录到组件中。 (在ROM中,虽然有各种类型的ROM,但有些可以重写)。

其他设备要求在设备开启时传输固件。

而其他人则拥有SDCard或电池供电的RAM或任何允许在重新启动时存储固件的内容。