Answers:
首先,您必须了解路由器不过是具有专用网络硬件的嵌入式(超紧凑型)计算机。
路由器的固件由路由器运行的操作系统,驱动程序和应用程序组成。它本质上是一个磁盘映像,就像Dell或HP在出厂之前用来初始化其计算机的磁盘映像一样。
由于路由器是嵌入式设备,因此它们必须尽可能高效且小巧。这就是将固件作为单个文件分发的原因。该文件根据路由器的确切型号进行定制。没有针对不存在的硬件的驱动程序,也没有针对固件设计的路由器不支持的功能的应用程序。
固件没有“实现” DNS / DHCP / etc。该固件包含实现了这些协议/服务(应用程序DNSMasq
,DHCPd
等等)。就像有许多可以处理*.zip
文件的应用程序一样,有许多可以完成这些角色的应用程序都具有稍微不同的功能,或者允许稍有不同的自定义。你可能想交换DNSMasq
出来Bind
,例如)。这些实际上是在台式机或服务器上可以找到的具有相同作用的应用程序。
其次,许多制造商确实在每个固件的核心使用相同的内核。许多人使用精简的Linux操作系统。路由器固件的相似性使DD-WRT之类的开源固件项目可以在数百种不同的路由器模型上工作。否则,这只会需要太多的工作。
之所以出现这些开放源代码固件社区,是因为在路由器上运行的软件很少依赖于硬件。您可以轻松安装其他应用程序,例如OpenVPN,流媒体服务器和代理,只要路由器具有足够的CPU能力和内存来支持您想做的事情即可。
固件特定于硬件及其功能。这适用于路由器,电话(不仅是智能手机),大型路由器,交换机,网桥(随便命名)。固件的某些部分执行低级任务,例如从闪存/磁盘存储中读取数据,下一部分介绍如何与无线电通讯或与板载LAN芯片通讯。对于(A)DSL路由器,还有一部分负责拨号和DHCP,DNS等。其他部分负责为您提供WEB界面,您可能会猜到,路由器的选项在路由器之间因硬件功能而异(这就是为什么同一路由器制造商的不同型号使用不同的固件部分的原因)。
所有这些与硬件或表示有关的部分(drivers
为简单起见,我们都称其为“部分”)由某个中央程序告知操作方法。该程序管理各种驱动程序/模块之间的交互,并且不允许它们执行无意义的操作。kernel
为简单起见,我们再次将此中央管理器称为a 。
考虑到以上内容,您可能会说“ 嘿,它看起来像一个linux / windows /任何盒子”,看着这种结构!。好吧,没错!它既没有键盘也没有鼠标,但实际上是一台小型的任务专用计算机。其中许多家用路由器确实使用Linux(不是Windows)或能够运行Linux(例如Tomato)。
至于为什么有人为他们编写新固件的原因 -假设您的路由器没有实现您关心的特定功能(在我的情况下是静态分配的DHCP)。但是这里有一个Tomato路由器固件,它具有此功能,并且确实支持路由器的硬件。为什么不使用它?(除了放弃制造商的保修)。我会的,我会的。因此,答案是- 人们为我们的路由器编写不同的固件,因为对它的需求是由原始制造商的能力不足/不愿意/缓慢地实现功能引起的。