NSLU2

From Wiki
Jump to: navigation, search

slugimage - manipulate NSLU2 firmware images
flash-kernel - write kernel and ramdisk images
mkinitramfs - make initramfs images
apex-env - manipulate bootloader command line
upslug2 - update slug flash image (run from host system)

----

cat /proc/mtd 			-- list flash partitions
cat /dev/mtdblock* > image 	-- Make backup of flash image
slugimage -u -i image 		-- unpack flash image into separate files

apex-env setenv cmdline "console=ttyS0,115200 rtc-x1205.probe=0,0x6f noirqdebug root=/dev/nfs nfsroot=172.16.0.1:/tftpboot/slug1/disk ip=bootp"

slugimage -p -b RedBoot -s SysConf -L apex.bin -k vmlinuz -r ramdisk.gz -t Trailer -o repack.bin


Code: Fix for slugimage
--- slugimage   2010-06-27 16:51:01.000000000 -0400
+++ /usr/bin/slugimage  2010-06-27 16:36:32.000000000 -0400
@@ -71,10 +71,10 @@
 
 # Take $data, and pad it out to $total_len bytes, appending 0xff's.
 sub padBytes {
-    my($data,$total_len) = @_;
+    my($data,$total_len,$pad_char) = @_;
 
     # 0xFF is used to pad, as it's the erase value of the flash.
-    my($pad_char) = pack("C",0xff);
+    $pad_char = pack("C",0xff) unless (defined ($pad_char));
     my($pad_len) = $total_len - length($data);
 
     # A request for negative padding is indicative of a logic error ...
@@ -803,7 +803,7 @@
            # Splice the data into the image at the appropriate place, padding as required.
            substr($image_buf, $_->{'offset'}, $_->{'size'},
                   $_->{'header'} ?
-                  padBytes(pack("N4",length($_->{'data'})).$_->{'data'}, $_->{'size'}) :
+                  padBytes(pack("N4",length($_->{'data'})).$_->{'data'}, $_->{'size'}, pack ("C", ($_->{'name'} eq 'Ramdisk') ? 0x00 : 0xff)) :
                   padBytes($_->{'data'}, $_->{'size'}));
            
            # Keep the user appraised ...


  • Get image from http://www.slug-firmware.net/d-dls.php
  • Unzip image on host machine
  • Disconnect any attached USB devices from NSLU2
  • Make sure NSLU2 is powered off
  • Pressing 'reset' button inside small hole on back, press power button.
  • Continue pressing 'reset' until the top LED turns red; immediately release reset button
  • Upgrade using upslug2 --image di-nslu2.bin
  • When upslug2 completes, attach 2GB+ disk or memory stick
  • After NSLU2 finishes booting (3 pathetic beeps), ssh to installer@<slug_ip_address>
  • Answer questions installer will ask
  • After installer completes and NSLU2 reboots, ssh as root to NSLU2
  • apt-get update
  • apt-get upgrade
  • apt-get install gcc libncurses5-dev linux-image-2.6.26-2-ixp4xx initramfs-tools
  • cd /root
  • cat /dev/mtdblock* > flash_backup.bin
  • Move 'flash_backup.bin' to host machine
  • cd /root/linux-2.6-2.6.26
  • make menuconfig
  • Goto Networking->Networking options->IP: kernel level autoconfiguration and press 'Y'
  • Goto File systems->Network File Systems->NFS file system support and press 'Y'
  • Goto File systems->Network File Systems->Root file system on NFS and press 'Y'
  • Enable IP: DHCP support and IP:BOOTP support
  • Exit menuconfig, saving new configuration
  • make
  • make modules_install
  • cd
  • mkdir temp
  • cd temp
  • mkinitramfs -k -o initramfs-2.6.26.gz 2.6.26
  • mkdir initramfs
  • cd initramfs
  • zcat ../initramfs-2.6.26.gz | cpio -i
  • mkdir -p lib/firmware
  • cp -a /lib/firmware/* lib/firmware
  • find . | cpio --quiet -o -H newc | gzip -9 > ../initramfs-2.6.26.gz
  • cd ..
  • rm -rf initramfs
  • dd if=initramfs-2.6.26.gz of=initramfs-2.6.26-pad.gz ibs=6291440 conv=sync
  • devio '<< initramfs-2.6.26-pad.gz; xp $ 4' >initramfs-2.6.26-new.gz
  • rm -rf initramfs initramfs-2.6.26-pad.gz
  • cp ~/linux/arch/arm/boot/zImage .
  • devio '<< zImage; xp $ 4' > zImage-swap
  • apex-env setenv cmdline "console=ttyS0,115200 rtc-x1205.probe=0,0x6f noirqdebug root=/dev/nfs nfsroot=172.16.0.1:/tftpboot/slug1/disk ip=bootp"
  • cat /dev/mtdblock* > flash.bin
  • apex-env setenv cmdline "console=ttyS0,115200 rtc-x1205.probe=0,0x6f noirqdebug"
  • slugimage -u -i flash.bin
  • slugimage -l -L apex.bin -r initramfs-2.6.26.gz -k zImage -p -o di-nslu2-new.bin
  • Move the di-nslu2-new.bin file to the host machine