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>master
parent
cc4f1558a7
commit
5a6087277c
@ -0,0 +1,114 @@ |
||||
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) |
Loading…
Reference in new issue