下表是OpenWrt系统架构和其他系统架构的对比(列表中有些url打不开,请自行翻/墙):
Desktop Distributions | OpenWrt | Android | Replicant | mer-based | |||
---|---|---|---|---|---|---|---|
Typical main memory size | 128 MiB to 16 GiB (or more) | 32 MiB to 512 MiB1) | min 92 MiB for Android 2.1 min 340 MiB for Android 4.0 | ? | |||
Supported instruction sets | almost anything | almost anything | x86, 86-64, ARM, MIPS32 | ||||
non-volatile storage space | 100 MiB | 8 MiB2) | 150MiB for Android 2.1 512MiB for Android 4.0 | ? | |||
kernel | Linux kernel | ||||||
FOSS and binary drivers | FOSS drivers: e.g. 802.11; Iaccess | Android binary drivers | |||||
C standard library | glibc | uClibc | bionic | glibc + libhybris | eglibc 2.15 | ||
init | init Upstart Initng | systemd | busybox-initd | procd | Android init-fork | systemd | |
rsyslog / syslog-ng | busybox-klogd, busybox-syslogd | ||||||
watchdog | busybox-watchdog | ||||||
udev | hotplug2 | ubox? | |||||
cron | busybox-crond | ||||||
atd | na | ||||||
D-Bus | ubus | Binder | ? | D-Bus | |||
network configuration | NetworkManager + GUI | netifd | ConnectivityManager (not ConnMan = ConnectionManager!) | ? | ConnMan | ||
GLib (GObject, Glib, GModule, GThread, GIO) | libubox | ? | ? | Qt-based? | |||
PulseAudio | PulseAudio (optional) | PulseAudio | PulseAudio | PulseAudio | |||
Package management system | dpkg/APT RPM/yum portage pacman … | opkg | apk | ? | RPM |
1. 从上表我们可以看到,openwrt主要的优势体现在小,它运行的内存最小只要32M,存放FW的最小size只要8M,同时能够满足大多数汇编指令集的需求,所以从硬件成本来说,openwrt操作系统可以适应于内存和flash更小的产品上,对于功能相对单一的智能产品,openwrt有它独特的优势。
2. 不仅如此,openwrt支持使用和其他操作系统(Desktop Distributions/android)一样的linux内核,包括对802.11的支持,这也使它在无线开发方面有更多的空间。
3. openwrt使用的C库是uClibc,并不是使用glibc,它是一个面向嵌入式Linux系统的小型的C标准库,uClibc比一般用于Linux发行版的C库GNU C Library (glibc)要小得多,glibc目标是要支持最大范围的硬件和内核平台的所有C标准,而uClibc专注于嵌入式Linux.很多功能可以根据空间需求进行取舍。
4. 在openwrt中,文件系统的启动以及管理和其他几个系统有些不一样,而且在最新的版本中更是使用了集合度比较高的daemon进程进行控制。一般文件系统的启动都是从init进程开始的,从下表中我们可以看到,不同的操作系统,启动的进程不一样,即使是同一种“操作系统”,在新旧版本间的启动方式也不一样,比如openwrt中,将旧版本的bosybox里面的一些功能整合在了procd里面,hotplug2对热插拔事件的监听也又ubox来替代,crond仍然用busybox里面的,ubus是dbus的简化版,简洁的API接口更适用于嵌入式平台。
init Upstart Initng | systemd | busybox-initd | procd |
rsyslog / syslog-ng | busybox-klogd, busybox-syslogd | ||
watchdog | busybox-watchdog | ||
udev | hotplug2 | ubox? | |
cron | busybox-crond | ||
atd | na | ||
D-Bus | ubus |