| Automatic software update from a TFTP server |
| ============================================ |
| |
| Overview |
| -------- |
| |
| This feature allows to automatically store software updates present on a TFTP |
| server in NOR Flash. In more detail: a TFTP transfer of a file given in |
| environment variable 'updatefile' from server 'serverip' is attempted during |
| boot. The update file should be a FIT file, and can contain one or more |
| updates. Each update in the update file has an address in NOR Flash where it |
| should be placed, updates are also protected with a SHA-1 checksum. If the |
| TFTP transfer is successful, the hash of each update is verified, and if the |
| verification is positive, the update is stored in Flash. |
| |
| The auto-update feature is enabled by the CONFIG_UPDATE_TFTP macro: |
| |
| #define CONFIG_UPDATE_TFTP 1 |
| |
| |
| Note that when enabling auto-update, Flash support must be turned on. Also, |
| one must enable FIT and LIBFDT support: |
| |
| #define CONFIG_FIT 1 |
| #define CONFIG_OF_LIBFDT 1 |
| |
| The auto-update feature uses the following configuration knobs: |
| |
| - CONFIG_UPDATE_LOAD_ADDR |
| |
| Normally, TFTP transfer of the update file is done to the address specified |
| in environment variable 'loadaddr'. If this variable is not present, the |
| transfer is made to the address given in CONFIG_UPDATE_LOAD_ADDR (0x100000 |
| by default). |
| |
| - CONFIG_UPDATE_TFTP_CNT_MAX |
| CONFIG_UPDATE_TFTP_MSEC_MAX |
| |
| These knobs control the timeouts during initial connection to the TFTP |
| server. Since a transfer is attempted during each boot, it is undesirable to |
| have a long delay when a TFTP server is not present. |
| CONFIG_UPDATE_TFTP_MSEC_MAX specifies the number of seconds to wait for the |
| server to respond to initial connection, and CONFIG_UPDATE_TFTP_CNT_MAX |
| gives the number of such connection retries. CONFIG_UPDATE_TFTP_CNT_MAX must |
| be non-negative and is 0 by default, CONFIG_UPDATE_TFTP_MSEC_MAX must be |
| positive and is 1 by default. |
| |
| Since the update file is in FIT format, it is created from an *.its file using |
| the mkimage tool. dtc tool with support for binary includes, e.g. in version |
| 1.2.0 or later, must also be available on the system where the update file is |
| to be prepared. Refer to the doc/uImage.FIT/ directory for more details on FIT |
| images. |
| |
| |
| Example .its files |
| ------------------ |
| |
| - doc/uImage.FIT/update_uboot.its |
| |
| A simple example that can be used to create an update file for automatically |
| replacing U-Boot image on a system. |
| |
| Assuming that an U-Boot image u-boot.bin is present in the current working |
| directory, and that the address given in the 'load' property in the |
| 'update_uboot.its' file is where the U-Boot is stored in Flash, the |
| following command will create the actual update file 'update_uboot.itb': |
| |
| mkimage -f update_uboot.its update_uboot.itb |
| |
| Place 'update_uboot.itb' on a TFTP server, for example as |
| '/tftpboot/update_uboot.itb', and set the 'updatefile' variable |
| appropriately, for example in the U-Boot prompt: |
| |
| setenv updatefile /tftpboot/update_uboot.itb |
| saveenv |
| |
| Now, when the system boots up and the update TFTP server specified in the |
| 'serverip' environment variable is accessible, the new U-Boot image will be |
| automatically stored in Flash. |
| |
| NOTE: do make sure that the 'u-boot.bin' image used to create the update |
| file is a good, working image. Also make sure that the address in Flash |
| where the update will be placed is correct. Making mistake here and |
| attempting the auto-update can render the system unusable. |
| |
| - doc/uImage.FIT/update3.its |
| |
| An example containing three updates. It can be used to update Linux kernel, |
| ramdisk and FDT blob stored in Flash. The procedure for preparing the update |
| file is similar to the example above. |