[U-Boot] [PATCH 1/8] doc: dfu: tftp: README entry for TFTP extension of DFU
Joe Hershberger
joe.hershberger at gmail.com
Wed Jul 15 20:14:01 CEST 2015
Hi Lukasz,
On Sun, Jul 12, 2015 at 10:30 AM, Lukasz Majewski <l.majewski at majess.pl> wrote:
> 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 at majess.pl>
> ---
> doc/README.dfutftp | 153 +++++++++++++++++++++++++++++++++++++++++++++++++++++
> 1 file changed, 153 insertions(+)
> create mode 100644 doc/README.dfutftp
>
> diff --git a/doc/README.dfutftp b/doc/README.dfutftp
> new file mode 100644
> index 0000000..4636321
> --- /dev/null
> +++ b/doc/README.dfutftp
> @@ -0,0 +1,153 @@
> +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 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 BF for
BF?
> +upgrading firmware (e.g. kernel, u-boot, rootfs, etc.)
> +via TFTP protocol.
> +
> +By using Ethernet (TFTP protocol to be precise) it was
> +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 (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 TFTP update
> +(CONFIG_UPDATE_TFTP) described in ./doc/README.update.
Does it really make sense to reuse this UPDATE_TFTP config? Why not DFU_TFTP?
> +New "dfutftp" command has been introduced to comply with present
> +USB related commands' syntax.
> +
> +This code works without "fitupd" command enabled.
> +
> +As of this writing (SHA1:241746e618fa725491e9ff689710c5f73ffd9139) the
> +update.c code is not enabled (CONFIG_UPDATE_TFTP) by any board in the
> +contemporary u-boot tree.
So maybe we should remove it.
> +
> +Environment variables
> +---------------------
> +
> +To preserve legacy behavior of TFTP update (./common/update.c)
> +code following new environment variables had been introduced:
Another example of why you should use a new config instead of the existing one.
> +* "update_tftp_exec_at_boot" ["true"|"false"]
> +
> + New usage of update_tftp allows setting the
> + "update_tftp_exec_at_boot" env variable to allow it running
> + at boot time.
> + In this way update_tftp will not be executed at startup and reduce
> + boot time.
> +
> + To preserve backward compatibility for legacy boards this variable
> + should be set to "true".
> +
> + BBB note:
> + When update tftp is not working after boot one need to
> + increase values of following two configs:
> + CONFIG_UPDATE_TFTP_MSEC_MAX and CONFIG_UPDATE_TFTP_CNT_MAX.
> + Values of namely 1000 and 5 solve the issue for BBB.
> +
> +* "update_tftp_dfu" ["true"|"false"]
> +
> + By "update_tftp_dfu" env variable we inform update_tftp that
> + it should use dfu for writing data - in this way support for
> + legacy usage is preserved.
Same here... presumably a user only wants support for one or the other
compiled in. Please use a different config.
> +* "update_tftp_dfu_interface" ["mmc"]
> +* "update_tftp_dfu_devstring" ["1"]
> +
> + Both variables - namely "update_tftp_dfu_{interface|devstring}" are
> + only taken into account when "update_tftp_dfu" is defined.
> + They store information about interface (e.g. "mmc") and device number
> + string (e.g. "1").
It is preferable to make these parameters to a command and not magic
env variables.
> + In the "dfutftp" command they are explicitly overridden.
> + It is done deliberately, since in this command we may use arbitrary values.
> +
> + Default values, when available during boot, are used by update_tftp
> + (when dfu support is enabled) to properly setup medium device
> + (e.g. mmc 1).
> +
> +
> +
> +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.
Is thor not faster than DFU?
It seems like DFU should support a bulk endpoint if performance is an
issue, right? That would be more efficient than emulating Ethernet.
> +For 33MiB test image the transfer rate is 1MiB/s
> +
> +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. Setup dfutftp specific variables (as explained in "Environment Variables")
> + * "update_tftp_exec_at_boot=true"
> + * "update_tftp_dfu=true"
> +
> +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 at 1 {
> + description = "U-Boot binary";
> +
> +should look like
> +
> + images {
> + u-boot.bin at 1 {
> + description = "U-Boot binary";
> +
> +where "u-boot.bin" is the DFU entity name to be stored.
> +
> +
> +
> +To do
> +-----
> +
> +* Extend dfu-util command (or write new one - e.g. dfueth-util) to support
> + TFTP based transfers
> +
> +* Upload support (via TFTP)
> \ No newline at end of file
> --
> 2.1.4
>
> _______________________________________________
> U-Boot mailing list
> U-Boot at lists.denx.de
> http://lists.denx.de/mailman/listinfo/u-boot
More information about the U-Boot
mailing list