OpenWrt Sysupgrade

Once again, please have a look at Flash Layout. A sysupgrade will replace the Linux Kernel and the SquashFS contents and it will erase the entire JFFS2 partition. You can save a couple or all of your your configuration files, but be aware that on rare occasions old configuration files don't work with new program versions. You cannot save installed binaries, you will have to install them again after sysupgrade. That way, everything will match, e.g. the flashed Linux Kernel and installed Kernel modules.

It is important to download the firmware image file to /tmp-directory, a tmpfs drive is mounted to it. That way the data will be downloaded into memory and not onto the flash storage because most likely there is not enough flash storage available! → user.beginner.fhs. That means you should free up enough memory beforehand.

Terminal Upgrade Process

  1. you should check how much RAM you have currently available
    free
    . In case you do not have enough left, consult Free up RAM.
  2. populate your /etc/sysupgrade.conf
  3. obtain suitable OpenWrt firmware image (trunk or stable):
    cd /tmp
    wget http://downloads.openwrt.org/snapshots/trunk/PLATFORM/xxx-sysupgrade.bin
    wget http://downloads.openwrt.org/snapshots/trunk/PLATFORM/md5sums
  4. check the integrity of the image file:
    md5sum -c md5sums
    
    When it says something like md5sum: WARNING: 195 of 196 computed checksums did NOT match it means the only one you downloaded did match ;-)
  5. use the following commands to upgrade:
    sysupgrade -v /tmp/openwrt-ar71xx-generic-wzr-hp-ag300h-squashfs-sysupgrade.bin
  • The verbose-option should give some output similar to this:
    root@openwrt:/tmp$ sysupgrade -v openwrt-ar71xx-generic-tl-wr1043nd-v1-squashfs-sysupgrade.bin
    Saving config files...
    root/zeit
    root/statistics
    root/quelen
    root/auswurfeln
    etc/sysupgrade.conf
    etc/sysctl.conf
    etc/shells
    etc/rc.local
    etc/TC_hfsc.sh
    etc/profile
    etc/passwd
    etc/inittab
    etc/init.d/trafficc
    etc/hotplug.d/iface/30-trafficc
    etc/hosts
    etc/group
    etc/firewall.user
    etc/dropbear/dropbear_rsa_host_key
    etc/dropbear/dropbear_dss_host_key
    etc/crontabs/root
    etc/config/wireless
    etc/config/timeserver
    etc/config/system
    etc/config/network
    etc/config/firewall
    etc/config/dropbear
    etc/config/dhcp
    etc/collectd.conf
    Switching to ramdisk...
    Performing system upgrade...
    Unlocking firmware ...
    
    Writing from <stdin> to firmware ...
    Appending jffs2 data from /tmp/sysupgrade.tgz to firmware...TRX header not found
    Error fixing up TRX header
    
    Writing from <stdin> to firmware ...
    Upgrade completed
    Rebooting system...
    
  • After the automatic reboot, the system should come up with the same network IP addresses, same dropbear password, etc. It is however possible that it does not. In that case, try a cold reset (= interrupt the electrical current to the device, wait a couple of seconds and then connect it again.)
  • After the cold reboot, you should gain access and here you could check things out:
    dmesg
    uname -a
    iptables -V
    ...
  • Reinstall:
    opkg update
    opkg install tc iptables-mod-ipopt wol
For unknown reasons such a cold reset has often reported to be necessary after a sysupgrade. This is very very bad in case you performed this remotely!

LuCI Web Upgrade Process

  1. Download a suitable OpenWrt firmware image file
  2. Login to the WebInterface of the router (default: http://192.168.1.1)
  3. Select SystemSystemCustom Files
  4. Select SystemFlash Firmware
  5. Upload the OpenWrt image file you downloaded to your PC at step 1 to your router via LuCI
  6. LuCI will calculate the MD5 checksum of the file, if it's correct, you are green to go
  7. wait until the router comes back online

Alternatives to OpenWrt Sysupgrade

mtd

  1. In case sysupgrade is not supported for your embedded device, you cannot use it. Use mtd instead:
    mtd -r write /tmp/openwrt-ar71xx-generic-wzr-hp-ag300h-squashfs-sysupgrade.bin firmware

netcat

Netcat could be employed if you cannot free enough RAM. See netcat. Netcat needs to be installed first.

This method is NOT recommended!
  1. On the router run:
    nc -l -p 1234 | mtd write - firmware
    
  2. On your Linux PC run:
    nc -q0 192.168.1.1 1234 < openwrt-ar71xx-tl-wr1043nd-v1-squashfs-sysupgrade.bin
    

Free up RAM

First check memory usage with the free or top or cat /proc/meminfo commands; proceed if you have as much free RAM as the image is in size plus an some additional MiB of free memory.

root@openwrt:/$ free total used free shared buffers Mem: 29540 18124 11416 0 1248 -/+ buffers: 16876 12664 Swap: 0 0 0

In this example there are precisely 11.416 KiB of RAM unused. All the rest 32.768 - 11.416 = 21.352KiB are used somehow and a portion of it can and will be made available by the kernel, if it be needed, the problem is, we do not know how much exactly that is. Make sure enough is available. Free space in /tmp also counts towards free memory. Therefore with:

root@openwrt:/$ free Mem: 13388 12636 752 0 1292 Swap: 0 0 0 Total: 13388 12636 752
root@openwrt:/$ df Filesystem 1K-blocks Used Available Use% Mounted on /dev/root 2304 2304 0 100% /rom tmpfs 6696 60 6636 1% /tmp tmpfs 512 0 512 0% /dev /dev/mtdblock3 576 288 288 50% /overlay mini_fo:/overlay 2304 2304 0 100% /

One has actually 752+6636 free memory available.

  • quickest and safest way to free up, some RAM is to delete the opkg packages file:
    rm -r /tmp/opkg-lists/
  • drop caches:
    echo 3 > /proc/sys/vm/drop_caches
  • prevent wireless drivers to be loaded at next boot and then reboot:
    rm /etc/modules.d$/*80211*
    rm /etc/modules.d$/*ath9k*
    reboot
    

The wireless drivers, usually take up quite some amount of RAM and are not required (unless you are connected via wireless of course ;-)), so an easy way to free up some RAM is to delete the symlinks in etc/modules.d so these are not loaded into memory at the next reboot:

Notes

Back to top

doc/howto/generic.sysupgrade.txt · Last modified: 2012/05/07 17:25 by sup