]>
Commit | Line | Data |
---|---|---|
83d290c5 | 1 | # SPDX-License-Identifier: GPL-2.0+ |
5bf4475f LM |
2 | # |
3 | # Copyright (C) 2015 | |
4 | # | |
5 | # Lukasz Majewski <l.majewski@majess.pl> | |
5bf4475f | 6 | |
5a608727 LM |
7 | Device Firmware Upgrade (DFU) - extension to use TFTP |
8 | ===================================================== | |
9 | ||
10 | Why? | |
11 | ---- | |
12 | ||
13 | * Update TFTP (CONFIG_UPDATE_TFTP) only supports writing | |
14 | code to NAND memory via TFTP. | |
15 | * DFU supports writing data to the variety of mediums (NAND, | |
16 | eMMC, SD, partitions, RAM, etc) via USB. | |
17 | ||
18 | Combination of both solves their shortcomings! | |
19 | ||
20 | ||
21 | Overview | |
22 | -------- | |
23 | ||
24 | This document briefly describes how to use DFU for | |
25 | upgrading firmware (e.g. kernel, u-boot, rootfs, etc.) | |
26 | via TFTP protocol. | |
27 | ||
28 | By using Ethernet (TFTP protocol to be precise) it is | |
29 | possible to overcome the major problem of USB based DFU - | |
30 | the relatively low transfer speed for large files. | |
31 | This was caused by DFU standard, which imposed utilization | |
32 | of only EP0 for transfer. By using Ethernet we can circumvent | |
33 | this shortcoming. | |
34 | ||
35 | Beagle Bone Black rev. C (BBB) powered by TI's am335x CPU has | |
36 | been used as a demo board. | |
37 | ||
38 | To utilize this feature, one needs to first enable support | |
39 | for USB based DFU (CONFIG_DFU_*) and DFU TFTP update | |
40 | (CONFIG_DFU_TFTP) described in ./doc/README.update. | |
41 | ||
42 | The "dfu" command has been extended to support transfer via TFTP - one | |
43 | needs to type for example "dfu tftp 0 mmc 0" | |
44 | ||
45 | This feature does not depend on "fitupd" command enabled. | |
46 | ||
47 | As of this writing (SHA1:8d77576371381ade83de475bb639949b44941e8c v2015.10-rc2) | |
48 | the update.c code is not enabled (CONFIG_UPDATE_TFTP) by any board in the | |
49 | contemporary u-boot tree. | |
50 | ||
51 | ||
52 | Environment variables | |
53 | --------------------- | |
54 | ||
55 | The "dfu tftp" command can be used in the "preboot" environment variable | |
56 | (when it is enabled by defining CONFIG_PREBOOT). | |
57 | This is the preferable way of using this command in the early boot stage | |
58 | as opposed to legacy update_tftp() function invocation. | |
59 | ||
60 | ||
61 | Beagle Bone Black (BBB) setup | |
62 | ----------------------------- | |
63 | ||
64 | 1. Setup tftp env variables: | |
65 | * select desired eth device - 'ethact' variable ["ethact=cpsw"] | |
66 | (use "bdinfo" to check current setting) | |
67 | * setup "serverip" and "ipaddr" variables | |
68 | * set "loadaddr" as a fixed buffer where incoming data is placed | |
69 | ["loadaddr=0x81000000"] | |
70 | ||
71 | ######### | |
72 | # BONUS # | |
73 | ######### | |
74 | It is possible to use USB interface to emulate ETH connection by setting | |
75 | "ethact=usb_ether". In this way one can have very fast DFU transfer via USB. | |
76 | ||
77 | For 33MiB test image the transfer rate was 1MiB/s for ETH over USB and 200KiB/s | |
78 | for pure DFU USB transfer. | |
79 | ||
80 | 2. Setup update_tftp variables: | |
81 | * set "updatefile" - the file name to be downloaded via TFTP (stored on | |
82 | the HOST at e.g. /srv/tftp) | |
83 | ||
84 | 3. If required, to update firmware on boot, put the "dfu tftp 0 mmc 0" in the | |
85 | "preboot" env variable. Otherwise use this command from u-boot prompt. | |
86 | ||
87 | 4. Inspect "dfu" specific variables: | |
88 | * "dfu_alt_info" - information about available DFU entities | |
89 | * "dfu_bufsiz" - variable to set buffer size [in bytes] - when it is not | |
90 | possible to set large enough default buffer (8 MiB @ BBB) | |
91 | ||
92 | ||
93 | ||
94 | FIT image format for download | |
95 | ----------------------------- | |
96 | ||
97 | To create FIT image for download one should follow the update tftp README file | |
98 | (./doc/README.update) with one notable difference: | |
99 | ||
100 | The original snippet of ./doc/uImage.FIT/update_uboot.its | |
101 | ||
102 | images { | |
103 | update@1 { | |
104 | description = "U-Boot binary"; | |
105 | ||
106 | should look like | |
107 | ||
108 | images { | |
109 | u-boot.bin@1 { | |
110 | description = "U-Boot binary"; | |
111 | ||
112 | where "u-boot.bin" is the DFU entity name to be stored. | |
113 | ||
114 | ||
115 | ||
116 | To do | |
117 | ----- | |
118 | ||
119 | * Extend dfu-util command to support TFTP based transfers | |
120 | * Upload support (via TFTP) |