In this article we discuss firmware - software that is directly programmed into hardware devices such as routers, cameras, network cards etc.
Table of contents.
- Types of firmware.
- Firmware updates.
Firmware is software directly placed inside a piece of hardware. Since it directly controls hardware it does not have to go through APIs, OS, or drivers to perform its functions.
In machines, firmware is stored in non-volatile memory such as ROM, EPROM or flash memory - this is a memory that cannot be erased.
Usually, firmware is the first component to run, it sends instructions to the computer processor for execution.
Firmware is found in devices such as routers, keyboards, TVs and other home appliances, phones, graphics cards, cameras.
In complex devices such as PCs and laptops, we may have multiple firmware which all work together to achieve a common goal e.g the BIOS and GRUB bootloader are different firmware that participates in the starting up of a computer.
Usually, firmware is written in low-level languages such as machine code or assembly languages since it works with the low-level bits of a machine and needs hardware access. Due to the existence of compilers and assemblers, firmware can also be written in high-level languages then translated into low-level code.
Firmware runs on a specific device with specific processor architecture and therefore we can't run firmware for one device in another device unless they are similar in terms of processor architectures.
Types of firmware.
Firmware can be low level, high level or a subsystem all depending on its location and functionality.
- Low level: This is stored in OTP(one-time programmable memory)/PLA(Programmable Logic Array) such as ROM, PROM. In this state, it cannot be rewritten or updated and thus considered a part of the hardware.
- High level: This firmware is used with flash memory allowing for updates. This functionality comes with increased complexity in the instructions since it is closer to software than hardware.
- Subsystems: We define a subsystem as a unit semi-independent of a larger unit and since firmware has its code embedded in flash memory and processors we can say that it is its own device.
We may want to update firmware for reasons such as fixing bugs or adding a new feature. Such tasks require that the ROM chips be completely replaced or reprogramming the flash memory using special procedures.
If a device ceases to be updated, it is considered obsolete since the manufacturer stopped supporting it by not making updates or resolving current issues such as bugs.
Firmware updates are important since they increase the device's capabilities.
During firmware updates, the involved device must remain powered on otherwise the update can result in a damaged device.
We should also make sure that we are using the right firmware for the specific device, for this we check the model number of the hardware which should correspond to the firmware's specification.
Firmware updates can be done manually or automatically, the latter is preferred since it requires less of computer users in that they don't need to keep up updating their firmware all the time.
This, however, has it's drawback in that, if a new update comes with a security risk and the firmware is updated automatically, this will be a problem.
This is overwriting an existing firmware on an EEPROM module in a device. Usually, this is done to upgrade a device or remove all data such as the password or change a provider's service that is associated with the device.
Firmwares are also upgraded for reasons such as dealing with bugs or replacing obsolete firmware versions.
Because upgrading or changing firmware is a very critical task, it is common for vendors to have users use vendor-specific firmware updating software that saves the old firmware so that if any complications occur during this process, the old can be restored.
This is whereby other parties create or change the already existing firmware to unlock other functionalities. For example, a manufacturer may restrict the firmware to run only some specific type of code.
These hacks are possible due to firmware update capabilities, in that, during an update we can load different firmware replacing the vendor specific one.
Other firmware hacks can be through exploitation of the existing firmware.
Firmware is a very important piece of any computer or electronic device. In PCs and Laptops, BIOS firmware plays a part in booting up the system.
Firmware can be changed or updated, however, during an update, if the firmware is corrupted, there is no fix since we can no longer communicate with the hardware.