This directory contains source code and tools to rework the Mbedtls error strings for
micropython to use less space. In short, instead of storing and printing something like
"SSL - Our own certificate(s) is/are too large to send in an SSL message" it prints
the name of the error #define, which would be "MBEDTLS_ERR_SSL_CERTIFICATE_TOO_LARGE" in
this case, and only stores SSL_CERTIFICATE_TOO_LARGE in flash. The exact Mbedtls error
defines are used because they're easy to search for to find more detailed information.
Mbedtls defines a specific format for error value #defines and
includes a Perl script to gather all MBEDTLS_ERR defines from includes files together with
english error text. From that the Perl script generates mbedtls_strerror(). The files in this
directory modify this process to produce a more space efficient error lookup table with
shorter error strings.
The files are as follows:
generate_errors.diff- diff for original mbedtls perl scripterror.fmt- modified code template for MicroPythonmp_mbedtls_errors.c- source file withmbedtls_strerrorthis is built using the include files in../mbedtlsdo-mp.sh- shell script to producemp_mbedtls_errors.ctester.c- simple C main to testmp_mbedtls_errors.clocally on a dev boxdo-test.sh- shell script to producemp_mbedtls_errors.cand compile thetesterappdo-esp32.sh- shell script to produceesp32_mbedtls_errors.c-- see below
In order not to store multiple copies of mbedtls_errors.c
(https://github.com/micropython/micropython/pull/5819#discussion_r445528006)
it is assumed that all ports use the same version of mbedtls with the same error #defines.
This is true as of MP v1.13, and ESP-IDF versions 3.3.2 and 4.0.1. If anything changes in the
future the do-esp32.sh script can be used to generate an esp32-specific version.
- To build MicroPython all that is needed is to include the
mp_mbedtls_errors.cinto the build (the Makefiles do this automatically). Note that Perl is not needed for routine MicroPython builds. - When a new version of Mbedtls is pulled-in the
do-mp.shscript should be run to re-generatemp_mbedtls_errors.c. - The
testerapp should be run if changes to the string handling inerror.fmtare made: it tests that there is not an off-by-one error in the string copying/appending, etc. - To include
mbedtls_strerrorerror strings defineMBEDTLS_ERROR_Cin the build.