83d290c56f
When U-Boot started using SPDX tags we were among the early adopters and there weren't a lot of other examples to borrow from. So we picked the area of the file that usually had a full license text and replaced it with an appropriate SPDX-License-Identifier: entry. Since then, the Linux Kernel has adopted SPDX tags and they place it as the very first line in a file (except where shebangs are used, then it's second line) and with slightly different comment styles than us. In part due to community overlap, in part due to better tag visibility and in part for other minor reasons, switch over to that style. This commit changes all instances where we have a single declared license in the tag as both the before and after are identical in tag contents. There's also a few places where I found we did not have a tag and have introduced one. Signed-off-by: Tom Rini <trini@konsulko.com>
121 lines
3.5 KiB
Plaintext
121 lines
3.5 KiB
Plaintext
# SPDX-License-Identifier: GPL-2.0+
|
|
#
|
|
# Copyright (C) 2015
|
|
#
|
|
# Lukasz Majewski <l.majewski@majess.pl>
|
|
|
|
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)
|