Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
37 changes: 24 additions & 13 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,10 +8,12 @@ Firmware Mod Kit
Using The Kit
Links

Introduction
### Introduction

The Firmware Mod Kit allows for easy deconstruction and reconstruction of firmware images for various embedded devices. While it primarily targets Linux based routers, it should be compatible with most firmware that makes use of common firmware formats and file systems such as TRX/uImage and SquashFS/CramFS.
Prerequisites


### Prerequisites

In order to use the Firmware Mod Kit, you must have a subversion client, standard Linux development tools (gcc, make, etc), the python-magic module, and the zlib and lzma development packages. If you are running an linux distro that use apt-get, e.g. Ubuntu or Debian, use:

Expand All @@ -27,8 +29,11 @@ yum install git zlib1g-dev xz-devel python-magic
For other distros, you should install the equivalent packages using your distro's package manager.

The Firmware Mod Kit is only supported on the Linux platform. With a few small modifications, it should work on other POSIX platforms.
Using the Kit
Kit Executables


### Using the Kit

#### Kit Executables

The Firmware Mod Kit is a collection of utilities and shell scripts. The utilities can be used directly, or the shell scripts can be used to automate and combine common firmware operations (e.g. extract and rebuild). The core scripts to facilitate firmware operations are listed below.

Expand All @@ -41,10 +46,11 @@ Secondary scripts:
ddwrt-gui-extract.sh Extracts Web GUI files from extracted DD-WRT firmware.
ddwrt-gui-rebuild.sh Restores modified Web GUI files to extracted DD-WRT firmware.

The Firmware Working Directory
#### The Firmware Working Directory

The Firmware Mod Kit uses a 'hard coded' working directory of 'fmk'. The extraction script extracts to this folder, and the rebuild script rebuilds from this folder. Allowance of alternate working directories is supported for some operations, but not all. We'll be expanding that in the future. For now, if you have multiple working directories, we suggest you rename the ones you're not currently operating on.
Extracting Firmware

#### Extracting Firmware

Automated firmware extraction typically works with most firmware images that employ uImage/TRX firmware headers and use SquashFS or CramFS file systems. Currently, extract-firmware.sh is the preferred method of extraction as it supports more firmware types than the older old-extract.sh script. However, old-extract.sh is still included and works with many firmware formats.

Expand All @@ -53,7 +59,9 @@ Usage for both extract-firmware.sh and extract_firmware.sh is straight forward:
$ ./extract-firmware.sh firmware.bin

By default, output from extract-firmware.sh will be located in the 'fmk' directory, while old-extract.sh will place extracted data into the specified working directory.
Re-Building Firmware


#### Re-Building Firmware

Which build script to use is dependant on which extraction script was used. If you extracted a firmware image with extract-firmware.sh, then you must use build-firmware.sh to re-build it. Likewise, if old-extract.sh was used, then old-build.sh must be invoked when re-building an image:

Expand All @@ -64,7 +72,9 @@ The new firmware generated by build-firmware.sh will be located at 'fmk/new-firm
The optional -nopad switch will instruct build-firmware.sh to NOT pad the firmware up to its original size.

The optional -min switch will use the maximum squashfs block size of 1MB. This will decrease the firmware image size at the cost of additional CPU and RAM resources utilized on the target device. Do not use this switch unless you must. This is a very large block size for embedded systems. The original firmware squashfs block size is preserved on rebuild, and the original block size should be the one used unless you are sure you know what you're doing. Too large a block size may appear to work fine, but runtime performance of the firmware may suffer in all or some loads.
Modifying DD-WRT Web Pages


#### Modifying DD-WRT Web Pages

One very unique feature of the Firmware Mod Kit is its ability to extract and rebuild files from the DD-WRT Web GUI. This is automated by the ddwrt-gui-extract.sh and ddwrt-gui-restore.sh scripts.

Expand All @@ -78,7 +88,7 @@ When you are finished editing, you can rebuild the Web files by running:

$ ./ddwrt-gui-rebuild.sh

Reverting to a vendor firmware
#### Reverting to a vendor firmware

Sometimes you'll enthusiastically flash a third-party firmware like Gargoyle or DD-WRT only to discover it lacks features you need, doesn't perform as well as the vendor firmware, or has functional problems. In this situation, you might find yourself wanting to go back to the vendor firmware, but have no way to do so!

Expand All @@ -92,7 +102,8 @@ Here's how the Firmware Mod Kit can help you revert to a vendor firmware. The pr
If all succeeded, you're now using the vendor firmware again.

Once you are back to the vendor firmware, then it accepts vendor firmware images again.
Examples

### Examples

This example demonstrates how to extract a firmware image, replace its existing telnet daemon with a custom built one, and then build a new firmware image:

Expand All @@ -108,11 +119,11 @@ Below is an example of the commands to run in order to extract a DD-WRT firmware
$ ./ddwrt-gui-rebuild.sh
$ ./build-firmware.sh

Tools / Utilities
### Tools / Utilities

The Firmware Mod Kit consists of a collection of tools useful when working with embedded firmware images. These include those listed below, though there are MANY MORE that are not listed here.

Tool Description
#### Tool Description
AsusTRX An extended version of ASUSTRX that can build both 'normal' TRX files and, optionally, those with an ASUS addver style header appended. It can also, uniquely, force segment offsets in the TRX (with -b switch) for compatibility with Marvell ASUS devices like the WL-530g. This tool replaces both 'normal' trx tool and addver. Current versions included are: 0.90 beta.
AddPattern Utility to pre-pend Linksys style HDR0 header to a TRX.
AddVer ASUS utility to append a header to a TRX image that contains version information. ASUSTRX includes this capability. Current version: unversioned.
Expand All @@ -133,6 +144,6 @@ UnTRX Splits TRX style firmwares into their component parts. Also supports pre-
WebDecomp Extracts and restores Web GUI files from DD-WRT firmware images, allowing modifications to the Web pages.
WRTVxImgTool Utility to generate VxWorks compatible firmware images for the WRT54G(S) v5 series.

Other Links
### Other Links

Forum