mirror of
https://github.com/esp8266/Arduino.git
synced 2025-04-19 23:22:16 +03:00
Add documentation for compressed OTA, fix bug (#6924)
* Add documentation for compressed OTA, fix bug Fixes #6923 Documents the user steps needed to do a compressed upload, and notes the 2-step process needed for deploying compressed uploads to the field for the first time. Fixes a bug in serial output formatting discovered by @AdrianEddy. Adds additional contributors for uzlib, per @pfalcon. * Update README for esptool.py, too
This commit is contained in:
parent
622baa1659
commit
9985a32914
@ -106,7 +106,7 @@ Arduino IDE is developed and maintained by the Arduino team. The IDE is licensed
|
|||||||
|
|
||||||
ESP8266 core includes an xtensa gcc toolchain, which is also under GPL.
|
ESP8266 core includes an xtensa gcc toolchain, which is also under GPL.
|
||||||
|
|
||||||
Esptool written by Christian Klippel is licensed under GPLv2, currently maintained by Ivan Grokhotkov: https://github.com/igrr/esptool-ck.
|
Esptool.py was initially created by Fredrik Ahlberg (@themadinventor, @kongo), and is currently maintained by Angus Gratton (@projectgus) under GPL 2.0 license.
|
||||||
|
|
||||||
Espressif SDK included in this build is under Espressif MIT License.
|
Espressif SDK included in this build is under Espressif MIT License.
|
||||||
|
|
||||||
@ -124,7 +124,7 @@ ESP8266 core files are licensed under LGPL.
|
|||||||
|
|
||||||
[LittleFS](https://github.com/ARMmbed/littlefs) library written by ARM Limited and released under the [BSD 3-clause license](https://github.com/ARMmbed/littlefs/blob/master/LICENSE.md).
|
[LittleFS](https://github.com/ARMmbed/littlefs) library written by ARM Limited and released under the [BSD 3-clause license](https://github.com/ARMmbed/littlefs/blob/master/LICENSE.md).
|
||||||
|
|
||||||
[uzlib](https://github.com/pfalcon/uzlib) library written and (c) 2014-2018 Paul Sokolovsky, licensed under the ZLib license (https://www.zlib.net/zlib_license.html).
|
[uzlib](https://github.com/pfalcon/uzlib) library written and (c) 2014-2018 Paul Sokolovsky, licensed under the ZLib license (https://www.zlib.net/zlib_license.html). uzlib is based on: tinf library by Joergen Ibsen (Deflate decompression); Deflate Static Huffman tree routines by Simon Tatham; LZ77 compressor by Paul Sokolovsky; with library integrated and maintained by Paul Sokolovsky.
|
||||||
|
|
||||||
### Other useful links ###
|
### Other useful links ###
|
||||||
|
|
||||||
|
@ -27,14 +27,14 @@ int print_version(const uint32_t flash_addr)
|
|||||||
if (SPIRead(flash_addr + APP_START_OFFSET + sizeof(image_header_t) + sizeof(section_header_t), &ver, sizeof(ver))) {
|
if (SPIRead(flash_addr + APP_START_OFFSET + sizeof(image_header_t) + sizeof(section_header_t), &ver, sizeof(ver))) {
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
char fmt[16];
|
char fmt[7];
|
||||||
fmt[0] = 'v';
|
fmt[0] = 'v';
|
||||||
fmt[1] = '%';
|
fmt[1] = '%';
|
||||||
fmt[2] = '0';
|
fmt[2] = '0';
|
||||||
fmt[3] = '8';
|
fmt[3] = '8';
|
||||||
fmt[4] = 'x';
|
fmt[4] = 'x';
|
||||||
fmt[5] = '\n';
|
fmt[5] = '\n';
|
||||||
fmt[6] = '0';
|
fmt[6] = 0;
|
||||||
ets_printf((const char*) fmt, ver);
|
ets_printf((const char*) fmt, ver);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
Binary file not shown.
@ -123,7 +123,7 @@ Compile the sketch normally and, once a `.bin` file is available, sign it using
|
|||||||
|
|
||||||
.. code:: bash
|
.. code:: bash
|
||||||
|
|
||||||
<ESP8266ArduioPath>/tools/signing.py --mode sign --privatekey <path-to-private.key> --bin <path-to-unsigned-bin> --out <path-to-signed-binary>
|
<ESP8266ArduinoPath>/tools/signing.py --mode sign --privatekey <path-to-private.key> --bin <path-to-unsigned-bin> --out <path-to-signed-binary>
|
||||||
|
|
||||||
Old And New Signature Formats
|
Old And New Signature Formats
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
@ -134,7 +134,34 @@ To create a legacy signature, call the signing script with --legacy:
|
|||||||
|
|
||||||
.. code:: bash
|
.. code:: bash
|
||||||
|
|
||||||
<ESP8266ArduioPath>/tools/signing.py --mode sign --privatekey <path-to-private.key> --bin <path-to-unsigned-bin> --out <path-to-signed-binary> --legacy <path-to-legacy-file>
|
<ESP8266ArduinoPath>/tools/signing.py --mode sign --privatekey <path-to-private.key> --bin <path-to-unsigned-bin> --out <path-to-signed-binary> --legacy <path-to-legacy-file>
|
||||||
|
|
||||||
|
|
||||||
|
Compression
|
||||||
|
-----------
|
||||||
|
|
||||||
|
The eboot bootloader incorporates a GZIP decompressor, built for very low code requirements. For applications, this optional decompression is completely transparent. For uploading compressed filesystems, the application must be built with `ATOMIC_FS_UPDATE` defined because, otherwise, eboot will not be involved in writing the filesystem.
|
||||||
|
|
||||||
|
No changes to the application are required. The `Updater` class and `eboot` bootloader (which performs actual application overwriting on update) automatically search for the `gzip` header in the uploaded binary, and if found, handle it.
|
||||||
|
|
||||||
|
Compress an application `.bin` file or filesystem package using any `gzip` available, at any desired compression level (`gzip -9` is recommended because it provides the maximum compression and uncompresses as fast as any other compressino level). For example:
|
||||||
|
|
||||||
|
.. code:: bash
|
||||||
|
|
||||||
|
gzip -9 sketch.bin # Maximum compression, output sketch.bin.gz
|
||||||
|
<Upload the resultant sketch.bin.gz>
|
||||||
|
|
||||||
|
If signing is desired, sign the gzip compressed file *after* compression.
|
||||||
|
|
||||||
|
.. code:: bash
|
||||||
|
|
||||||
|
gzip -9 sketch.bin
|
||||||
|
<ESP8266ArduinoPath>/tools/signing.py --mode sign --privatekey <path-to-private.key> --bin sketch.bin.gz --out sketch.bin.gz.signed
|
||||||
|
|
||||||
|
Updating apps in the field to support compression
|
||||||
|
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||||
|
|
||||||
|
If you have applications deployed in the field and wish to update them to support compressed OTA uploads, you will need to first recompile the application, then _upload the uncompressed `.bin` file once_. Attempting to upload a `gzip` compressed binary to a legacy app will result in the Updater rejecting the upload as it does not understand the `gzip` format. After this initial upload, which will include the new bootloader and `Updater` class with compression support, compressed updates can then be used.
|
||||||
|
|
||||||
|
|
||||||
Safety
|
Safety
|
||||||
|
Loading…
x
Reference in New Issue
Block a user