How To Re-Image SmartServer IoT From U-Boot Prompt (KB1438)

Sometimes the SmartServer will get stuck constantly rebooting or stuck in the boot process.


One way to fix these issues is to re-image the SmartServer from the U-boot prompt. Normally you would re-image the SmartServer after it boots up (say from the apollo prompt)


If this is a duo core SmartServer (The alpha character in the Serial number is revision version. "a" through "e" means this is a duo core and can only use up to Software version 3.1). If the alpha character is "f" - "z" then this is a quad core SmartServer and you can use the latest software version.


Part of this process is to abort the boot process. When you abort the boot process you will have a short period of time to send the commands to the SmartServer before it reboots again.


Requirements:

1. You can try using a Windows PC, but you may need to use a Linux PC or second SmartServer (used as a host SmartServer) to stop the SmartServer constantly rebooting.
    - A Windows PC USB driver may be too slow to abort the U-boot process.
        - See KB to see how to use a second SmartServer as a host SmartServer
2. A USB flash drive with the SmartServer image that you want to use
3. A console cable to connect from the PC or host SmartServer to the problem SmartServer console port.


Instruction:
1. Unplug all the U60s/U70s
2. Plug in the USB flash drive with the SmartServer image into the upper left-hand USB port
3. Using the SmartServer console press and hold any key to abort the boot process.
4. Copy and paste each of the 5 commands one by one, using a text-only editor, from the "uboot_reimage_cmds.txt" file to the SmartServer console

Copy all of these commands in to notepad and then copy the commands from notepad into the problem SmartServer console port to make sure no special character are included in the command string.

setenv imaging_args 'usb start; if usb dev 0; then setenv loadbootscript fatload usb 0:1 ${loadaddr} ${script}; setenv bootscript echo Running bootscript from usb ...; setenv loadfs fatload usb 0:1 ${initrd_addr} uInitrd-imaging; setenv loadimage fatload usb 0:1 ${loadaddr} ${image}; setenv loadfdt fatload usb 0:1 ${fdt_addr} ${fdt_file}; else echo WARN: No USB devices found; setenv bootcmd run normal_boot; saveenv; reset; fi;'
setenv imaging_boot 'echo Imaging boot enabled.; run imaging_args; run initrd_boot;'
setenv ethaddrs_space 32
saveenv
run imaging_boot

5. The SmartServer will then do a re-image.
6. If the SmartServer boots into Emergency Mode, then follow the Emergency mode instructions below.

Normally not needed, but if SmartServer boots into Emergency Mode, use the Emergency mode workaround below.


Emergency Mode Workaround:

# <enter apollo password to enter maintenance mode>
# fsck -y /dev/mmcblk2p1
# mount /media/sdcard
#^d // CTR-d reboots SS IoT -- should work after this reboot

 

7. If you see "intrd_boot_err", and then redo step 4 again.

setenv initrd_boot 'setenv bootargs console=${console},${baudrate} rdinit=/sbin/init; if run loadbootscript; then run bootscript; source; else if run loadfs; then if run loadimage; then if run loadfdt; then bootz ${loadaddr} ${initrd_addr} ${fdt_addr}; else echo WARN: Cannot find dtb file; reset; fi; else echo WARN: Cannot find image file; reset; fi; else echo WARN: Cannot find initrd file; reset; fi; fi;'
saveenv