zoukankan      html  css  js  c++  java
  • ESP8266交叉编译器xtensa-lx106-elf 在Linux下编译与生成


    原作者:杭州_燕十三 
    来源:CSDN 
    原文:https://blog.csdn.net/flyingcys/article/details/71357261 
    版权声明:本文为博主原创文章,转载请附上博文链接!

    把自己遇见的情况修改原文,进行补充。准备使用的是服务器系统,性能较高,所以手动配置编译工具链,充分发挥服务器性能。

      要在PC上开发ESP8266,无论是Linux还是Windows首先需要有一套交叉编译环境,才能将编写好的代码编译成可在ESP8266上固化和运行的bin文件。官方提供了已编译完成的Linux下的交叉编译器可供下载,也提供了移植好的crosstool-NG给有自己编译需求的开发者自行编译。今天我们就是要自己来编译crosstool-NG来自己编译出Esp8266在Linux下的交叉编译工具链。
    一、编译环境配置

    由于编译crosstool-NG依赖编译环境,本次编译在Ubuntu_16.04.2_64bit下进行,gcc版本为5.4.0,make版本为4.1,可通过gcc -v/make -v查看。
    文本后续提到的在编译过程中出现的错误都是基于当前环境下的,如编译环境不一致导致其他错误,可按照类似方法解决。
    在编译crosstool-NG之前,我们先安装编译需要的软件包,通过以下命令一次性安装完成:
    sudo apt-get install git autoconf build-essential gperf bison flex texinfo libtool libncurses5-dev wget gawk libc6-dev-amd64 python-serial libexpat-dev
    二、crosstool_NG下载

    ESP8266内置Tensilical L106 32bit微处理器,我们使用的是大侠jcmvbkbc制作的Xtensa系列crosstool-NG,可在https://github.com/jcmvbkbc/crosstool-NG查看crosstool-NG源文件。
    在命令行输入:git clone -b lx106 git://github.com/jcmvbkbc/crosstool-NG.git ,git clone -b表示只克隆lx106分支,该分支下总共有30425个文件。

    1.在该目录下执行:

      (1) ./bootstrap

      (2) ./configure  

      (3) make

      (4) make install
    其中:
    ./bootstrap通过autoconf生成.configure
    ./configure 将检查依赖文件包。
    如缺少安装软件包某软件包,./configure将自动终止直至安装完成。
    我在安装中出现了如下错误:
    1)缺少libtool。

      因为工具链需要的是libtool-1.5.26版,使用apt-get得到的是最新版本,不适用。所以需要手动安装。

    ① 删除已安装(假设已安装)版本sudo apt-get remove libtool
    ② 至ftp://ftp.gnu.org/gnu/libtool/下载libtool-1.5.26版,并解压libtool-1.5.26目录
    ③ 在libtool-1.5.26目录下依次执行
    a)./configure
    b)make
    c)sudo make install
    libtool完成安装

    2.完成上述操作后,在crosstool_NG目录下执行:./ct-ng xtensa-lx106-elf

    三、crosstool_NG配置

    crosstool-NG默认配置也可以编译生成Esp8266交叉工具链,但是编译时间特别长,而且特别容易出错。针对这2点进行一些配置。
    在crosstool-NG目录下执行./ct-ng menuconfig进行配置

    1.配置多线程编译
    “Paths and misc options”->“Number of parallel jobs”

    默认为0,设置为4;
    这个数字不易过大,常见修改方式:CPU内核数*2;如当前PC的CPU为双核,那这里就设置为4。本项目使用的服务器具有48核,考虑到一般

    只使用一半的核心,所以这里我配置为40.
    以上配置设置完成后,在后续执行./ct-ng build时无需手工指定参数。即无需./ct-ng build.4(其实内部还是通过make -j4去执行)。

    2.保存编译中间步骤
    “Paths and misc options”->“Debug crosstool-NG”->“Save intermediate steps”

     

    crosstool-NG默认配置下每次编译都是重新开始的,无论上一次编译到哪一步,是否成功!
    完成以上设置后,保存并退出。
    四、crosstool_NG编译

    完成以上设置后,在crosstool-NG目录下执行./ct-ng build开始编译,编译之前要先下载对应的源码包并复制到对应的隐藏文件夹
    本次编译需要的源码包有:
    gcc-4.8.2
    cloog-0.18.4
    binutils-2.24
    gdb-7.5.1
    gmp-5.1.3.tar
    isl-0.12
    mpc-1.0.2
    mpfr-3.1.2.tar
    需要下载的源码包名称及版本在根目录下.config文件内配置。源码包下载至根目录下.build/tarballs目录,配置文件和目录为隐藏目录,在Ubuntu下需要按ctrl+h显示才能看到。.config文件和.build/tarballs目录在后面我们都要用到。

    下载完成后全部放至.build/tarballs。以下为下载地址:
    gcc-4.8.2:ftp://ftp.gnu.org/gnu/gcc/gcc-4.8.2/
    cloog-0.18.4:http://www.cloog.org/
    binutils-2.24:ftp://ftp.gnu.org/gnu/binutils/
    gdb-7.5.1:ftp://ftp.gnu.org/gnu/gdb/
    gmp-5.1.3.tar:ftp://ftp.gnu.org/gnu/gmp/
    isl-0.12:http://isl.gforge.inria.fr/
    mpc-1.0.2:ftp://ftp.gnu.org/gnu/mpc/
    mpfr-3.1.2.tar:ftp://ftp.gnu.org/gnu/mpfr/
    如果在windows系统下下载以上软件,建议不要使用迅雷等下载工具。将以上下载文件copy至.build/tarballs,然后在根目录下执行./ct-ng build。

    五、xtensa-lx106-elf测试

    1.在build目录下执行sudo cp -f xtensa-lx106-elf /opt并正确配置环境变量,ubuntu下环境变量配置可参照《Linux环境变量设置》一文。
    2.
    在github上下载最新esp8266的rtos版本sdk至本地
    git clone https://github.com/espressif/ESP8266_RTOS_SDK
    ESP8266_RTOS_SDK在linux工程运行配置请参照本文博客《ESP8266交叉编译环境搭建之linux篇》一文,这里不再重复叙述。
    运行SDK内部的sample,你就会发现,编译出错了,这就是我们剩下的5%的工作。
    1)提示缺少stdint.h文件

    执行wget -O include.tgz https://github.com/esp8266/esp8266-wiki/raw/master/include.tgz
    下载并解压至交叉编译器对应文件夹
    sudo tar zxvf include.tgz -C /opt/xtensa-lx106-elf/lib/gcc/xtensa-lx106-elf/4.8.2/
    2)提示缺少libhal.a文件

    执行wget -O libhal.a https://github.com/esp8266/esp8266-wiki/raw/master/libs/libhal.a
    下载libhal.a文件,并复制至交叉编译器对应文件夹
    sudo cp -rf libhal.a /opt/xtensa-lx106-elf/lib/gcc/xtensa-lx106-elf/4.8.2/

    3)提示缺少libc.a文件

    执行wget -O libc.a https://github.com/esp8266/esp8266-wiki/raw/master/libs/libc.a
    下载libc.a文件,并复制至交叉编译器对应文件夹
    sudo cp -rf libhal.a /opt/xtensa-lx106-elf/lib/gcc/xtensa-lx106-elf/4.8.2/

  • 相关阅读:
    Centos下使用Docker部署MySql
    用C#编写游戏脚本
    VS2013使用自带的数据库 Microsoft SQL Server 2012 Express LocalDB
    WIN11下访问Gitee(WIN11下GITEE 拉取PULL和推送PUSH失败的解决办法)
    前端MVC Vue2学习总结(二)——Vue的实例、生命周期与Vue脚手架(vue-cli)
    前端MVC Vue2学习总结(一)——MVC与vue2概要、模板、数据绑定与综合示例
    JavaScript学习总结(五)——jQuery插件开发与发布
    JavaScript学习总结(四)——this、原型链、javascript面向对象
    JavaScript学习总结(三)——闭包、IIFE、apply、函数与对象
    JavaScript学习总结(二)——延迟对象、跨域、模板引擎、弹出层、AJAX示例
  • 原文地址:https://www.cnblogs.com/mingyunrangwozoudaoxianzai/p/9843793.html
Copyright © 2011-2022 走看看