Reverse engineering binary firmware

Alexandre Oliva lxoliva at
Tue Mar 3 19:59:04 UTC 2009

On Feb 27, 2009, Richard M Stallman <rms at> wrote:

> I am looking for firmware released as binaries under a free license.
> If someone decompiles such a binary and gives it meaningful function
> and variable names, and comments to explain it, that will be free
> source code.

> Can anyone recommend a real candidate?

The ATI Radeon are probably the most relevant candidates, but it's hard
for me to guess how difficult the task would be, since I don't know
anything about the actual processors and ISAs involved.

e100 might be a simpler task, and nearly as useful: there's some
indication in the driver that the processor that runs the microcode is
8086, the microcode snippets are small (limited to 134 32-bit words),
and a very large number of Intel chipsets are bundled with network
interfaces that require this microcode.

Another more challenging piece of firwmare is that for Broadcom Everest
network cards, bnx2x driver.  It's a pretty large, often-changing chunk
of (IIRC MIPS-targeted) management firmware.  I have no idea of how
widely deployed it is.

One that would take a different, more clean-room approach, would be for
nVidia video cards.  The nouveau project is developing Free in-kernel
drivers, not yet integrated in upstream Linux, that currently contain
chunks of code obtained by taking MMIO dumps while the non-Free driver
was running; the strings are named after 'voodoo', or 'ctx_prog', or
'ctxprog'.  Those chunks of code are non-Free and non-distributable
AFAIK.  However, nVidia cards are quite prevalent, so it would be very
useful to be able to use those cards with fully-capable Free drivers.
So, reverse engineering and clean-room reimplementation of these chunks
of code would be a great accomplishment.

Alexandre Oliva 
You must be the change you wish to see in the world. -- Gandhi
Be Free! --   FSF Latin America board member
Free Software Evangelist      Red Hat Brazil Compiler Engineer

More information about the linux-libre mailing list