El blog de Julián :-)!

Información para compartir :-)!

Compilar el SDK para el ESP8266

leave a comment »

El ESP8266 es un microcontrolador fabricado por la compañia china Espressif, con capacidad de WiFi que se ha hecho muy popular integrando «Shields» para arduino y como microntrolador principal en algunas placas como la Wemos D1.
Un SDK es un «Software Development Kit», es decir, un conjunto de herramientas de software que nos permite desarrollar programas para el dispositivo de que se trate.
En el caso particular de la placa Wemos D1, puede usarse como SDK la IDE de Arduino mas una serie de librerias y programas escritos para el ESP8266. Sin embargo, acá intentateremos compilar el SDK específico para el ESP8266 en su versión de software libre que se puede obtener del vínculo

Hay que seguir las instrucciones que aparecen alli. En nuestro caso, como se compilará sobre debian 10, nos aseguramos que estén las dependencias

$ sudo apt-get install make unrar-free autoconf automake libtool gcc g++ gperf \
flex bison texinfo gawk ncurses-dev libexpat-dev python-dev python python-serial \
sed git unzip bash help2man wget bzip2

$ sudo apt-get install libtool-bin

Después hacemos una copia local del repositorio

$ git clone –recursive https://github.com/pfalcon/esp-open-sdk.git

Y luego, compilamos con la opción que nos guste

$ make STANDALONE=y

ó

$ make STANDALONE=n

La primera opción mezcla el software propietario y libre, mientras que la segunda mantiene separada las aguas.

Acá elegimos la segunda y damos ENTER.

Sin embargo, obtenemos un error como

checking for bash >= 3.1… no
configure: error: could not find bash >= 3.1
make[1]: *** [../Makefile:143: _ct-ng] Error 1
make[1]: Leaving directory ‘/home/badbob/esp8266/esp-open-sdk-git/src/esp-open-sdk/crosstool-NG’
make: *** [Makefile:139: crosstool-NG/ct-ng] Error 2
==> ERROR: A failure occurred in build().
Aborting…

En mi caso bash es versión mayor a la 5, así que algo hay de malo en el script.

Cuando buscamos el aviso de error, lo encontramos en el archivo configure.ac bajo el directorio

~/esp-open-sdk/crosstool-NG$

En ese archivo a partir de la línea 190 encontramos las siguientes líneas de código

AC_CACHE_CHECK([for bash >= 3.1], [ac_cv_path__BASH],
[AC_PATH_PROGS_FEATURE_CHECK([_BASH], [bash],
[[_BASH_ver=$($ac_path__BASH –version 2>&1 \
|$EGREP ‘^GNU bash, version (3\.[1-9]|4)’)
test -n «$_BASH_ver» && ac_cv_path__BASH=$ac_path__BASH ac_path__BASH_found=:]],
[AC_MSG_RESULT([no])
AC_MSG_ERROR([could not find bash >= 3.1])])])

El error está en la expresión que comprueba la versión de bash, tanto porque no contempla el 5 como la posibilidad de que en lugar de ‘version’ aparezca ‘versión’ con acento, como ocurre en las versiones en español. Lo único que hay que hacer es modificar la línea dónde aparece $EGREP como sigue

|$EGREP ‘^GNU bash, versi[oó]n (3\.[1-9]|4|5)’)

Luego se graba el archivo y ahora sí se puede compilar sin problemas, aunque el proceso dura varias horas (por lo menos en mi vieja máquina).
Espero que sirva y quedo a la espera de los comentarios.

Referencias:

Una punta para resolver el error al detectar la versión de bash se puede mirar el link https://bbs.archlinux.org/viewtopic.php?id=244333

Para ver sobre bash y las expresiones regulares se puede ver este link https://sospedia.net/el-shell-bash-de-gnulinux-4-expresiones-regulares/

Written by jrpk

agosto 25, 2020 a 12:44 am

Publicado en Uncategorized

Tagged with , , , , , ,

Deja un comentario