mirror of
				https://github.com/smaeul/u-boot.git
				synced 2025-10-25 18:18:19 +01:00 
			
		
		
		
	Documentation file for DFU extension. With this functionality it is now possible to transfer FIT images with firmware updates via TFTP and use DFU backend for storing them. Signed-off-by: Lukasz Majewski <l.majewski@majess.pl> Reviewed-by: Simon Glass <sjg@chromium.org> Acked-by: Joe Hershberger <joe.hershberger@ni.com>
		
			
				
	
	
		
			115 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			115 lines
		
	
	
		
			3.4 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| Device Firmware Upgrade (DFU) - extension to use TFTP
 | |
| =====================================================
 | |
| 
 | |
| Why?
 | |
| ----
 | |
| 
 | |
| * Update TFTP (CONFIG_UPDATE_TFTP) only supports writing
 | |
| code to NAND memory via TFTP.
 | |
| * DFU supports writing data to the variety of mediums (NAND,
 | |
| eMMC, SD, partitions, RAM, etc) via USB.
 | |
| 
 | |
| Combination of both solves their shortcomings!
 | |
| 
 | |
| 
 | |
| Overview
 | |
| --------
 | |
| 
 | |
| This document briefly describes how to use DFU for
 | |
| upgrading firmware (e.g. kernel, u-boot, rootfs, etc.)
 | |
| via TFTP protocol.
 | |
| 
 | |
| By using Ethernet (TFTP protocol to be precise) it is
 | |
| possible to overcome the major problem of USB based DFU -
 | |
| the relatively low transfer speed for large files.
 | |
| This was caused by DFU standard, which imposed utilization
 | |
| of only EP0 for transfer. By using Ethernet we can circumvent
 | |
| this shortcoming.
 | |
| 
 | |
| Beagle Bone Black rev. C (BBB) powered by TI's am335x CPU has
 | |
| been used as a demo board.
 | |
| 
 | |
| To utilize this feature, one needs to first enable support
 | |
| for USB based DFU (CONFIG_DFU_*) and DFU TFTP update
 | |
| (CONFIG_DFU_TFTP) described in ./doc/README.update.
 | |
| 
 | |
| The "dfu" command has been extended to support transfer via TFTP - one
 | |
| needs to type for example "dfu tftp 0 mmc 0"
 | |
| 
 | |
| This feature does not depend on "fitupd" command enabled.
 | |
| 
 | |
| As of this writing (SHA1:8d77576371381ade83de475bb639949b44941e8c v2015.10-rc2)
 | |
| the update.c code is not enabled (CONFIG_UPDATE_TFTP) by any board in the
 | |
| contemporary u-boot tree.
 | |
| 
 | |
| 
 | |
| Environment variables
 | |
| ---------------------
 | |
| 
 | |
| The "dfu tftp" command can be used in the "preboot" environment variable
 | |
| (when it is enabled by defining CONFIG_PREBOOT).
 | |
| This is the preferable way of using this command in the early boot stage
 | |
| as opposed to legacy update_tftp() function invocation.
 | |
| 
 | |
| 
 | |
| Beagle Bone Black (BBB) setup
 | |
| -----------------------------
 | |
| 
 | |
| 1. Setup tftp env variables:
 | |
|    *  select desired eth device - 'ethact' variable ["ethact=cpsw"]
 | |
|       (use "bdinfo" to check current setting)
 | |
|    *  setup "serverip" and "ipaddr" variables
 | |
|    *  set "loadaddr" as a fixed buffer where incoming data is placed
 | |
|       ["loadaddr=0x81000000"]
 | |
| 
 | |
| #########
 | |
| # BONUS #
 | |
| #########
 | |
| It is possible to use USB interface to emulate ETH connection by setting
 | |
| "ethact=usb_ether". In this way one can have very fast DFU transfer via USB.
 | |
| 
 | |
| For 33MiB test image the transfer rate was 1MiB/s for ETH over USB and 200KiB/s
 | |
| for pure DFU USB transfer.
 | |
| 
 | |
| 2. Setup update_tftp variables:
 | |
|    *  set "updatefile" - the file name to be downloaded via TFTP (stored on
 | |
|       the HOST at e.g. /srv/tftp)
 | |
| 
 | |
| 3. If required, to update firmware on boot, put the "dfu tftp 0 mmc 0" in the
 | |
|     "preboot" env variable. Otherwise use this command from u-boot prompt.
 | |
| 
 | |
| 4. Inspect "dfu" specific variables:
 | |
|    * "dfu_alt_info" - information about available DFU entities
 | |
|    * "dfu_bufsiz"   - variable to set buffer size [in bytes] - when it is not
 | |
| 		    possible to set large enough default buffer (8 MiB @ BBB)
 | |
| 
 | |
| 
 | |
| 
 | |
| FIT image format for download
 | |
| -----------------------------
 | |
| 
 | |
| To create FIT image for download one should follow the update tftp README file
 | |
| (./doc/README.update) with one notable difference:
 | |
| 
 | |
| The original snippet of ./doc/uImage.FIT/update_uboot.its
 | |
| 
 | |
| 	images {
 | |
| 		update@1 {
 | |
| 			description = "U-Boot binary";
 | |
| 
 | |
| should look like
 | |
| 
 | |
| 	images {
 | |
| 		u-boot.bin@1 {
 | |
| 			description = "U-Boot binary";
 | |
| 
 | |
| where "u-boot.bin" is the DFU entity name to be stored.
 | |
| 
 | |
| 
 | |
| 
 | |
| To do
 | |
| -----
 | |
| 
 | |
| * Extend dfu-util command to support TFTP based transfers
 | |
| * Upload support (via TFTP)
 |