diff --git a/README.md b/README.md index da691966d..2b198c63b 100644 --- a/README.md +++ b/README.md @@ -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. -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. @@ -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). -[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 ### diff --git a/bootloaders/eboot/eboot.c b/bootloaders/eboot/eboot.c index b9d655778..c7cf285c0 100644 --- a/bootloaders/eboot/eboot.c +++ b/bootloaders/eboot/eboot.c @@ -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))) { return 1; } - char fmt[16]; + char fmt[7]; fmt[0] = 'v'; fmt[1] = '%'; fmt[2] = '0'; fmt[3] = '8'; fmt[4] = 'x'; fmt[5] = '\n'; - fmt[6] = '0'; + fmt[6] = 0; ets_printf((const char*) fmt, ver); return 0; } diff --git a/bootloaders/eboot/eboot.elf b/bootloaders/eboot/eboot.elf index 442ad15f5..7ef036b4d 100755 Binary files a/bootloaders/eboot/eboot.elf and b/bootloaders/eboot/eboot.elf differ diff --git a/doc/ota_updates/readme.rst b/doc/ota_updates/readme.rst index 4d717df59..aac3e5e5a 100644 --- a/doc/ota_updates/readme.rst +++ b/doc/ota_updates/readme.rst @@ -123,7 +123,7 @@ Compile the sketch normally and, once a `.bin` file is available, sign it using .. code:: bash - /tools/signing.py --mode sign --privatekey --bin --out + /tools/signing.py --mode sign --privatekey --bin --out Old And New Signature Formats ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ @@ -134,7 +134,34 @@ To create a legacy signature, call the signing script with --legacy: .. code:: bash - /tools/signing.py --mode sign --privatekey --bin --out --legacy + /tools/signing.py --mode sign --privatekey --bin --out --legacy + + +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 + + +If signing is desired, sign the gzip compressed file *after* compression. + +.. code:: bash + + gzip -9 sketch.bin + /tools/signing.py --mode sign --privatekey --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