SlugImage is a Perl script for manipulating NSLU2 firmware images.
The proposed feature set is:
Usage: slugimage <options>
[-d|--debug] Turn on debugging output [-q|--quiet] Turn off status messages [-u|--unpack] Unpack a firmware image [-p|--pack] Pack a firmware image [-l|--little] Convert Kernel and Ramdisk to little-endian [-F|--fatflash] Generate an image for 16MB flash [-i|--input] <file> Input firmware image filename [-o|--output] <file> Output firmware image filename [-b|--redboot] <file> Input/Output RedBoot filename [-s|--sysconf] <file> Input/Output SysConf filename [-L|--loader] <file> Second stage boot loader filename [-k|--kernel] <file> Input/Ouptut Kernel filename [-r|--ramdisk] <file> Input/Output Ramdisk filename(s) if using jffs2 Ramdisk (i.e., Debian Installer), or [-r|--ramdisk] Flashdisk:<file> Input/Output Flashdisk filename(s) if not using jffs2 (i.e., SlugOS BE/LE) [-f|--fisdir] <file> Input/Output FIS directory filename [-m|--microcode] <file> Input/Output Microcode filename [-t|--trailer] <file> Input/Output Trailer filename [-e|--ethaddr] <AABBCCDDEEFF> Set the Ethernet address
old version information left below: command line:
--pack (-p), --unpack (-u), --input (-i) = <8mb-image.bin>, --output (-o) = <8mb-image.bin>, --redboot (-b) = <redboot.bin>, --sysconf (-s) = <sysconf.bin>, --kernel (-k) = <vmlinuz>, --ramdisk (-r) =<ramdisk.gz> (don't write partition table in this case) or --ramdisk (-r) =Ramdisk:<ramdisk.squashfs>,Rootdisk:<root.jffs2>,Userdisk:<user.jffs2>,... (write the partition table with the names given), --trailer (-t) = <trailer.bin>, --macaddr (-m) = 00:00:00:00:00:00
You can download SlugImage from the unslung CVS.
Here is an example that I used for extracting all the separate parts out of an 8MB binary image, using Debian 4.0 Installer from the D-I howto page. Note that I did this all from within cygwin. I wanted to use cygwin because my work laptop had a parallel port, TFTP server, TeraTerm (supported), etc. (needed for NSLU2 hacking). Note here that I used the -i option (for input file). Also note that Debian images have a Ramdisk not Flashdisk (as in slugosbe/slugosle).
$ ./slugimage.pl -u -i di-nslu2.bin Read 2 blocks into <RedBoot> Read 0x00006 bytes into <EthAddr> Read 1 blocks into <SysConf> Read 0x1FFE0 bytes into <Loader> Read 11 blocks into <Kernel> Read 32 blocks into <Ramdisk> Read 1 blocks into <FIS directory> Read 0x00010 bytes into <Trailer> Wrote 0x00040000 bytes from <RedBoot> into "RedBoot" Wrote 0x00020000 bytes from <SysConf> into "SysConf" Wrote 0x0001FFE0 bytes from <Loader> into "apex.bin" Wrote 0x00140004 bytes from <Kernel> into "vmlinuz" Wrote 0x00400000 bytes from <Ramdisk> into "ramdisk.gz" Wrote 0x00000010 bytes from <Trailer> into "Trailer"
Note that the files shown above have (with "Wrote..") been extracted into the directory where di-nslu2.bin was located.
If you want to replace something (i.e., let's say Apex 2nd stage boot loader with newer version), then use the -o option (output) parameter.
Now, I just have to replace the apex.bin with the one made for Apex 1.5.13 (called "apex-debian-nslu2-arm-1.5.13.bin").
$ slugimage.pl -p -o di-nslu2-newapex.bin -b RedBoot -s SysConf
-L apex-debian-nslu2-arm-1.5.13.bin -k vmlinuz -r ramdisk.gz
-t Trailer
NOTES