OpenWRT is a Linux distribution optimized especially for embedded devices and also builds the starting point for many popular RouterOS distributions, like
DD-WRT,
FreeWRT, or
X-Wrt. Wikipedia has details on all those project, a good starting point would be
here.
Since OpenWrt is optimized for embedded systems, it doesn't come as a surprise that features like a read-only Flash memory filesystem (
SquashFS) and a read/write Flash memory filesystem (
JFFS2), or
BusyBox, which combines many common UNIX utilities into a single executable, are readily available to be configured into a custom image. OpenWrt also comes with a lightweight package management system (
IPKG or more recently
OPKG), meaning that features that have not already been built into the kernel, can be added later, at runtime.
A
Java-Runtime Environment would be one of those features that are not built-in but would be nice to have for some of us. So let's take a look at how a JavaVM could be build, packaged, and deployed into an embedded system that has the OpenWrt firmware.