We were approached by a German producer of network hardware. In almost every networked device,
be it a router, access point, firewall, network file server or media server, there is firmware
which contains a range of software:
- Operating system
- Device drivers
- TCP/IP protocol stack
- System and application network software
- Remote administration tools
For the device to be operational it is necessary to download ready-to-use firmware, which
consists of an assembly of many different components taken from different manufacturers, along
with administrative tools designed for that particular device model. We swiftly dealt with the
core of the issue which lay in creating a service that downloads the Linux packages to the
repository as source code, where it is hen necessary to update to the latest version from the
manufacturer, providing a baseline package assembly and implementing it into the firmware.
Specific programme packages are added to the firmware of the device (a router or server) and
then it is ready to record data via flash memory. Which the firmware set up, the device comes
alive, turning from a ‘brick’ into a useful part of a household or office infrastructure.
The presence of a code cross-compilation feature in the system should be noted, as it allows
for the compiling of an executable file for an ARM processor when the assembly has been
produced using i386 PC. ARM-based code cannot be run on an i386 processor of course,
but cross-compilation allows for all firmware to be compiled. In order for the firmware
to be compiled correctly it was necessary to monitor different package versions and their
relations to each other. For example, if a specific kernel version is required for TCP/IP
component assembly, then TCP/IP will be necessary for assembly of the router code, hence the
fact that before we began to assemble the router code, we needed to download and compile the
kernel and internet protocol, and in a specific sequence. Furthermore, each package comes in
many versions, and the latest version is not always used in the assembly of dependent packages.
There is a process whereby after the end of a working day the source code is updated, the
repository's status is declared active, modified packets are rebuilt on a selective basis
and engineers acquire the latest version of the firmware for the client automatically and
every day, covering all network hardware lines based on i386 and ARM.