6.9 KiB
OpenIPC Wiki
Upgrading firmware
Once the initial installation of the OpenIPC software for your camera is complete it is possible to upgrade it either via the Majestic web interface or manually via a terminal window.
This article is about how to manually perform an update using a terminal window using the sysupgrade command.
Note: By default, sysupgrade will reboot the camera to complete the update. If you don't wish to do that then use the -x option (see sysupgrade --help for all options)
Upgrading from the GitHub latest release.
By default, running sysupgrade will attempt to download the latest software for your camera model from the github sources.
There are other options available such as pointing to your own online .tgz file or a local copy of the Linux kernel (uImage) and camera software (rootfs.squashfs)
For old firmware running sysupgrade
without parameters is enough. For newer firmware, run sysupgrade -k -r
to update both kernel and rootfs is required
ATTENTION! Upgrading firmware can lead to "bricking" your camera. Make sure you are prepared both morally and skill wise. Have your rescue SD card and/or UART adapter ready. Be prepared to de-solder and reprogram flash chip as the last resort. Do not upgrade production cameras unless you really have to!
Using sysupgrade
Typically running sysupgrade will give you the latest release for your camera, as described above, however if you wish to revert to a previous image, or load your own updates, then use any the following options.
Remember once you are ready to run sysupgrade you must use the syntax
sysupgrade --kernel=/tmp/uImage.${soc} --rootfs=/tmp/rootfs.squashfs.${soc} -z
where '${soc}' is your camera specific soc e.g. gk7205v300
otherwise the Github latest will be downloaded.
Using a TFTP server
On your host machine:
If you haven't already got a TFTP server running on your host machine then take a look at the Wiki article Set up a TFTP server.
If you don't already have the uImage and rootfs.squashfs images for your camera then go to https://github.com/OpenIPC/firmware/releases/tag/latest and download the latest firmware bundle for your SoC and extract the content of the bundle into the root directory of your TFTP server.
If you have built your own versions using a copy of the firmware repository then your uImage and rootsfs.squashfs images will be in your output/images folder. Copy these to the root of your tftp server.
On the camera:
You can either update the images from a Linux terminal session or from the U-Boot prompt if you have a UART serial connection and interrupted Linux loading.
From Linux
soc=$(fw_printenv -n soc)
serverip=$(fw_printenv -n serverip)
cd /tmp
busybox tftp -r rootfs.squashfs.${soc} -g ${serverip}
busybox tftp -r uImage.${soc} -g ${serverip}
sysupgrade --kernel=/tmp/uImage.${soc} --rootfs=/tmp/rootfs.squashfs.${soc} -z
From U-Boot
for 8MB image
tftp ${baseaddr} uImage.${soc}
sf probe 0; sf erase 0x50000 0x200000; sf write ${baseaddr} 0x50000 ${filesize}
tftp ${baseaddr} rootfs.squashfs.${soc}
sf probe 0; sf erase 0x250000 0x500000; sf write ${baseaddr} 0x250000 ${filesize}
for 16MB image
tftp ${baseaddr} uImage.${soc}
sf probe 0; sf erase 0x50000 0x200000; sf write ${baseaddr} 0x50000 ${filesize}
tftp ${baseaddr} rootfs.squashfs.${soc}
sf probe 0; sf erase 0x250000 0xA00000; sf write ${baseaddr} 0x250000 ${filesize}
Now restart the camera to load the new images
Using scp
On your host machine:
If you don't already have the uImage and rootfs.squashfs images for your camera then go to https://github.com/OpenIPC/firmware/releases/tag/latest and download the latest firmware bundle for your SoC and extract the contents
If you have built your own versions using a copy of the firmware repository then your uImage and rootsfs.squashfs images will be in your output/images folder.
Now copy these to the camera using scp
tar xvf <firmware.tgz>
scp uImage* rootfs* root@<yourcameraip>:/tmp/
On the camera:
Now create a terminal session with the camera e.g. ssh root@192.168.1.10 and run the sysupgrade command pointing at your new images in /tmp.
soc=$(fw_printenv -n soc)
sysupgrade --kernel=/tmp/uImage.${soc} --rootfs=/tmp/rootfs.squashfs.${soc} -z
Upgrading from an SD card
On your host machine
If you don't already have the uImage and rootfs.squashfs images for your camera then go to https://github.com/OpenIPC/firmware/releases/tag/latest and download the latest firmware bundle for your SoC and extract the contents
If you have built your own versions using a copy of the firmware repository then your uImage and rootsfs.squashfs images will be in your output/images folder.
Insert an SD card into your host machine and copy the uImage and squashfs files to the card e.g.
cp uImage* rootfs* /media/<username>/<card-id>/
On your camera
Insert the SD card into your camera.
Create a terminal session and run the following
soc=$(fw_printenv -n soc)
sysupgrade --kernel=/mnt/mmcblk0p1/uImage.${soc} --rootfs=/mnt/mmcblk0p1/rootfs.squashfs.${soc} --force_ver -z
SD Card: Alternatively, from U-Boot
for 8MB image
mw.b ${baseaddr} 0xff 0x200000
fatload mmc 0:1 ${baseaddr} uImage.${soc}
sf probe 0; sf erase 0x50000 0x200000; sf write ${baseaddr} 0x50000 ${filesize}
mw.b ${baseaddr} 0xff 0x500000
fatload mmc 0:1 ${baseaddr} rootfs.squashfs.${soc}
sf probe 0; sf erase 0x250000 0x500000; sf write ${baseaddr} 0x250000 ${filesize}
for 16MB image
mw.b ${baseaddr} 0xff 0x300000
fatload mmc 0:1 ${baseaddr} uImage.${soc}
sf probe 0; sf erase 0x50000 0x300000; sf write ${baseaddr} 0x50000 ${filesize}
mw.b ${baseaddr} 0xff 0x500000
fatload mmc 0:1 ${baseaddr} rootfs.squashfs.${soc}
sf probe 0; sf erase 0x350000 0xa00000; sf write ${baseaddr} 0x350000 ${filesize}
Flashing U-Boot via ymodem
Clean 320K of RAM and load bootloader file into it:
mw.b ${baseaddr} 0xff 0x50000
loady
(press "Ctrl-a" followed by ":", then type)
exec !! sz --ymodem u-boot.bin
After the file if uploaded, write it into ROM:
sf probe 0
sf erase 0x0 0x50000
sf write ${baseaddr} 0x0 ${filesize}
Troubleshooting
If you got this error:
losetup: /tmp/rootfs.squashfs.${soc}: No such file or directory
Rootfs: Unable to get hostname, execution was interrupted...
then try to update only kernel first:
sysupgrade -k
If it doesn't help, use --force
option:
sysupgrade -r --force
If you caught a glitch, retrieve the most recent version of the utility:
curl -k -L -o /usr/sbin/sysupgrade "https://raw.githubusercontent.com/OpenIPC/firmware/master/general/overlay/usr/sbin/sysupgrade"