Developer OpenWrt Project | Written in Lua Working state Current Initial release January 2004 (2004-01) | |
![]() | ||
OpenWrt is an embedded operating system based on Linux, primarily used on embedded devices to route network traffic. The main components are Linux, util-linux, uClibc or musl, and BusyBox. All components have been optimized for size, to be small enough for fitting into the limited storage and memory available in home routers.
Contents
- History
- Hardware incompatibilities
- Features
- Web interface
- Development
- Hardware compatibility
- Adoption
- Derivatives
- References
OpenWrt is configured using a command-line interface (ash shell), or a web interface (LuCI). There are about 3500 optional software packages available for installation via the opkg package management system.
OpenWrt can run on various types of devices, including CPE routers, residential gateways, smartphones, pocket computers (e.g. Ben NanoNote), and laptops. It is also possible to run OpenWrt on personal computers, which are most commonly based on the x86 architecture.
History
The project came into being because Linksys built the firmware for their WRT54G series of wireless routers from publicly available code licensed under the GPL. Under the terms of that license, Linksys was required to make the source code of its modified version available under the same license, which in turn enabled independent developers to create additional derivative versions. Support was originally limited to the WRT54G series, but has since been expanded to include many other chipsets, manufacturers and device types, including Plug Computers and Openmoko mobile phones.
Using this code as a base and later as a reference, developers created a Linux distribution that offers many features not previously found in consumer-level routers. Some features formerly required proprietary software. Before the introduction of OpenWrt 8.09, using Linux 2.6.25 and the b43
kernel module, WLAN for many Broadcom-based routers was only available through the proprietary wl.o
module that was also provided for Linux 2.4.x only.
The code names of OpenWrt branches are named after alcoholic beverages, usually including their recipes in the MOTD as well, cf. White Russian, Kamikaze, Backfire, Attitude Adjustment, Barrier Breaker.
Hardware incompatibilities
With the Attitude Adjustment (12.09) release of OpenWrt, all hardware devices with 16 MB or less RAM are no longer supported as they can run out of memory easily. Older Backfire (10.03) is recommended instead for bcm47xx
devices, as issues for those devices came from dropping support for the legacy Broadcom target brcm-2.4
.
Features
OpenWrt follows the bazaar-philosophy and is known for an abundance of options. Features include:
Web interface
Before release 8.09, OpenWrt had a minimal web interface. In OpenWrt releases 8.09 and newer, a more capable web interface is included. This interface is based on LuCI, an MVC framework written in the Lua programming language.
The X-Wrt project provides an alternative web interface, named webif² in the package repositories, for the current and previous versions of OpenWrt.
The Gargoyle Router Management Utility is a web interface for OpenWrt with a strong emphasis on usability. It was originally available as a set of packages for OpenWrt. As the author of Gargoyle started to make modifications to the base system layout of OpenWrt, the package system was dropped and only complete firmware images are now available for download. Gargoyle makes extensive use of JavaScript to offload as much work as possible to the client computer, and is focused on ease of use, striving to reach a level comparable to the appliance feeling of commercial router firmware.
Development
OpenWrt's development environment and build system, known together as OpenWrt Buildroot, are based on a heavily modified Buildroot system. OpenWrt Buildroot is a set of Makefiles and patches that automates the process of building a complete Linux-based OpenWrt system for an embedded device, by building and using an appropriate cross-compilation toolchain.
Embedded devices usually use a different processor than the one found in host computers used for building their OpenWrt system images, requiring a cross-compilation toolchain. Such a compilation toolchain runs on a host system, but generates code for a targeted embedded device and its processor's instruction set architecture (ISA). For example, if a host system uses x86 and a target system uses MIPS32, the regular compilation toolchain of the host runs on x86 and generates code for x86 architecture, while the cross-compilation toolchain runs on x86 and generates code for the MIPS32 architecture. OpenWrt Buildroot automates this whole process to work on the instruction set architectures of most embedded devices and host systems.
OpenWrt Buildroot provides the following features:
Besides building system images, OpenWrt development environment also provides a mechanism for simplified cross-platform building of OpenWrt software packages. Source code for each software package is required to provide a Makefile-like set of building instructions, and an optional set of patches for bug fixes or footprint optimizations.
Hardware compatibility
OpenWrt runs many different routers, and includes a table of compatible hardware on its website. In its buyer's guide, it recommends Qualcomm Atheros chips over Broadcom chips.
Adoption
OpenWrt, especially its Buildroot build system, has been adopted many times: