前文要测试网络调试助手,手头正好有个ESP32一直没有试过。这次正好拿来试玩一下。
官网:ESP32官网
这款最小系统开发板搭载了乐鑫最新的系统级芯片 ESP32, 支持 Wi-Fi 和蓝牙功能,具有丰富的外设,能够让开发者尽情发挥想象力进行二次开发!
参看:Ubuntu系统下ESP32开发环境的搭建
sudo apt-get install git make gcc libncurses5-dev flex bison gperf python-serial
sudo mkdir /esp32
sudo chown user:user /esp32
crossTools、demos、sources分别保存交叉编译工具链、样例和SDK源码:
cd /esp32
mkdir crossTools demos sources
注意,需要查看你的linux是32位还是64位的。
在linux终端输入 getconf LONG_BIT 命令
如果是32位机器,则结果为32
[root@localhost ~]# getconf LONG_BIT
32
如果是64位机器,则结果为64
[root@localhost ~]# getconf LONG_BIT
64
Linux(x32):wget https://dl.espressif.com/dl/xtensa-esp32-elf-linux32-1.22.0-59.tar.gz
Linux(x64):wget https://dl.espressif.com/dl/xtensa-esp32-elf-linux64-1.22.0-59.tar.gz
tar -xzvf xtensa-esp32-elf-linux64-1.22.0-61-gab8375a-5.2.0.tar.gz
sudo vim /etc/profile
export PATH=$PATH:/esp32/crossTools/xtensa-esp32-elf/bin
source /etc/profile
xtensa-esp32-elf-gcc -v
如果看到有版本信息显示,说明已经安装成功
针对的目标机器格式为xtensa-esp32-elf,支持编译的源文件有C和C++,支持的线程模式是单线程single,整套的交叉编译工具链是使用crosstool-NG工具制作,如果不怕折腾,用户也可以自己制作一个新的
$ xtensa-esp32-elf-gcc -v
Using built-in specs.
COLLECT_GCC=xtensa-esp32-elf-gcc
COLLECT_LTO_WRAPPER=/esp32/crossTools/xtensa-esp32-elf/bin/../libexec/gcc/xtensa-esp32-elf/4.8.5/lto-wrapper
Target: xtensa-esp32-elf
Configured with: /home/vagrant/crosstool-NG/.build/src/gcc-4.8.5/configure --build=i686-build_pc-linux-gnu --host=i686-build_pc-linux-gnu --target=xtensa-esp32-elf --prefix=/home/vagrant/crosstool-NG/builds/xtensa-esp32-elf --with-local-prefix=/home/vagrant/crosstool-NG/builds/xtensa-esp32-elf/xtensa-esp32-elf/sysroot --with-sysroot=/home/vagrant/crosstool-NG/builds/xtensa-esp32-elf/xtensa-esp32-elf/sysroot --with-newlib --enable-threads=no --disable-shared --with-pkgversion='crosstool-NG crosstool-ng-1.22.0-59-g8d95cad' --disable-__cxa_atexit --enable-cxx-flags='-fno-exceptions -fno-rtti' --with-gmp=/home/vagrant/crosstool-NG/.build/xtensa-esp32-elf/buildtools --with-mpfr=/home/vagrant/crosstool-NG/.build/xtensa-esp32-elf/buildtools --with-mpc=/home/vagrant/crosstool-NG/.build/xtensa-esp32-elf/buildtools --with-isl=/home/vagrant/crosstool-NG/.build/xtensa-esp32-elf/buildtools --with-cloog=/home/vagrant/crosstool-NG/.build/xtensa-esp32-elf/buildtools --with-libelf=/home/vagrant/crosstool-NG/.build/xtensa-esp32-elf/buildtools --enable-lto --enable-target-optspace --without-long-double-128 --disable-libgomp --disable-libmudflap --disable-libssp --disable-libquadmath --disable-libquadmath-support --disable-nls --disable-multilib --enable-languages=c,c++
Thread model: single
gcc version 4.8.5 (crosstool-NG crosstool-ng-1.22.0-59-g8d95cad)
可以直接通过gitclone的方式获取ESP-IDF:
git clone –recursive https://github.com/espressif/esp-idf.git
ESP-IDF的目录结构如下:
components:ESP-IDF的核心组件
examples:ESP-IDF提供的实例程序
make:ESP-IDF工程管理目录
tools:ESP-IDF提供的工具集
docs:ESP-IDF相关文档
将esp-idf拷贝到 /esp32/sources
cp /esp32/sources/esp-idf/examples/get-started/hello_world/ /esp32/demos/ -rf
打开Makefile,发现里面需要一个IDF_PATH的变量
在/etc/profile中添加这样一个环境变量:
export IDF_PATH=/esp32/sources/esp-idf
source /etc/profile
退出make menuconfig的配置界面,保存刚才的配置,将会在工程根目录下新生成一个build文件夹和sdkconfig文件
因为gcc版本应该为gcc-5.2.0,而我的为gcc-4.8.5。所以编译出现警告。
WARNING: Compiler version is not supported: 4.8.5
Expected to see version(s): 5.2.0
参看:编译安装GCC 5.2.0
相关软件下载:
gmp 6.0、mpfr 3.1.3、mpc 1.0.3、gcc-5.2.0
tar xvf gmp-6.0.0a.tar.bz2
cd gmp-6.0.0
./configure
make -j4
make check
make install
mpfr依赖于gmp。
tar xvf mpfr-3.1.3.tar.bz2
cd mpfr-3.1.3
./configure –with-gmp-include=/usr/local/include \
–with-gmp-lib=/usr/local/lib
make -j4
make install
mpc依赖于gmp和mpfr。
tar xvf mpc-1.0.3.tar.gz
cd mpc-1.0.3
./configure –with-mpfr-include=/usr/local/include \
–with-mpfr-lib=/usr/local/lib \
–with-gmp-include=/usr/local/include \
–with-gmp-lib=/usr/local/lib
make -j4
make check
make install
tar xvf gcc-5.2.0.tar.bz2
cd gcc-5.2.0
先unset若干个系统变量,以免出现某些宏找不到的情况。
unset CPLUS_INCLUDE_PATH LIBRARY_PATH
配置环境变量:
vi /etc/profile
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib
source /etc/profile
配置GCC
./configure \
–with-gmp-include=/usr/local/include \
–with-gmp-lib=/usr/local/lib \
–with-mpfr-include=/usr/local/include \
–with-mpfr-lib=/usr/local/lib \
–with-mpc-include=/usr/local/include \
–with-mpc-lib=/usr/local/lib \
–enable-languages=c,c++ \
–enable-threads=posix \
–disable-multilib
详细的配置项说明可参考安装文档,这里只编译c和c++的编译器。
然后make -j8,启用多线程编译。(时间有点长)
安装
如果编译顺利通过,make install即可。
gcc和g++默认被安装到/usr/local/bin目录下,libgcc和libstdc++默认被安装到/usr/local/lib64(x64)。
记得更下下动态库缓存。
ldconfig
# gcc -v
使用内建 specs。
COLLECT_GCC=gcc
COLLECT_LTO_WRAPPER=/usr/local/libexec/gcc/i686-pc-linux-gnu/5.2.0/lto-wrapper
目标:i686-pc-linux-gnu
配置为:./configure --with-gmp-include=/usr/local/include --with-gmp-lib=/usr/local/lib --with-mpfr-include=/usr/local/include --with-mpfr-lib=/usr/local/lib --with-mpc-include=/usr/local/include --with-mpc-lib=/usr/local/lib --enable-languages=c,c++ --enable-threads=posix --disable-multilib
线程模型:posix
gcc 版本 5.2.0 (GCC)