1d25049a7a | ||
---|---|---|
.. | ||
README.md | ||
do-esp32.sh | ||
do-mp.sh | ||
do-test.sh | ||
error.fmt | ||
generate_errors.diff | ||
mp_mbedtls_errors.c | ||
tester.c |
README.md
MBEDTLS Error Strings for MicroPython
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_strerror
this is built using the include files in../mbedtls
do-mp.sh
- shell script to producemp_mbedtls_errors.c
tester.c
- simple C main to testmp_mbedtls_errors.c
locally on a dev boxdo-test.sh
- shell script to producemp_mbedtls_errors.c
and compile thetester
appdo-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.
How-to
- To build MicroPython all that is needed is to include the
mp_mbedtls_errors.c
into 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.sh
script should be run to re-generatemp_mbedtls_errors.c
. - The
tester
app should be run if changes to the string handling inerror.fmt
are made: it tests that there is not an off-by-one error in the string copying/appending, etc. - To include
mbedtls_strerror
error strings defineMBEDTLS_ERROR_C
in the build.