mirror of
				https://github.com/smaeul/u-boot.git
				synced 2025-11-04 14:00:19 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			123 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			123 lines
		
	
	
		
			3.5 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
#
 | 
						|
#  Copyright (C) 2015
 | 
						|
#
 | 
						|
#  Lukasz Majewski <l.majewski@majess.pl>
 | 
						|
#
 | 
						|
#
 | 
						|
# SPDX-License-Identifier:	GPL-2.0+
 | 
						|
 | 
						|
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)
 |