【物联网】 Ubuntu中生成交叉编译器xtensa-lx106-elf

前端之家收集整理的这篇文章主要介绍了【物联网】 Ubuntu中生成交叉编译器xtensa-lx106-elf前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
@H_403_3@要在PC上开发ESP8266,无论是Linux还是Windows首先需要有一套交叉编译环境,才能将编写好的代码编译成可在ESP8266上固化和运行的bin文件。官方提供了已编译完成的Linux下的交叉编译器可供下载,也提供了移植好的crosstool-NG给有自己编译需求的开发者自行编译。今天我们就是要自己来编译crosstool-NG来自己编译出Esp8266在Linux下的交叉编译工具链。@H_403_3@

@L_404_0@一、编译环境配置@H_403_3@

@H_403_3@由于编译crosstool-NG依赖编译环境,本次编译在Ubuntu_16.04.2_64bit下进行,gcc版本为5.4.0,make版本为4.1,可通过gcc -v/make -v查看。@H_403_3@
@H_403_3@文本后续提到的在编译过程中出现的错误都是基于当前环境下的,如编译环境不一致导致其他错误,可按照类似方法解决
@H_403_3@在编译crosstool-NG之前,我们先安装编译需要的软件包,通过以下命令一次性安装完成:
@H_403_3@sudo apt-get install git autoconf build-essential gperf bison flex texinfo libtool libncurses5-dev wget gawk libc6-dev-amd64 python-serial libexpat-dev
@H_403_3@使用apt-get之前先确定下软件下载源在国内还是国外,推荐使用国内的阿里云镜像或163镜像速度比较快,不然下载速度就杯具了!记得下载前先sudo apt-get update下。@H_403_3@

@H_403_3@

二、crosstool_NG下载@H_403_3@

@H_403_3@ESP8266内置Tensilical L106 32bit微处理器,我们使用的是大侠jcmvbkbc制作的Xtensa系列crosstool-NG,可在@H_403_3@ @H_403_3@https://github.com/jcmvbkbc/crosstool-NG@H_403_3@查看crosstool-NG源文件。@H_403_3@@H_403_3@
@H_403_3@在命令行输入:git clone -b lx106 git://github.com/jcmvbkbc/crosstool-NG.git ,git clone -b表示只克隆lx106分支,该分支下总共有30425个文件,git表示网络有些慢,需要一些时间。@H_403_3@
@H_403_3@经过漫长的等待后Clone终于完成,进入crosstool-NG文件夹,我们可以看到:@H_403_3@
@H_403_3@@H_403_3@
@H_403_3@1.在该目录下执行:./bootstrap && ./configure --prefix=`pwd` && make && make install@H_403_3@
@H_403_3@当然也可分开执行4条依次执行。@H_403_3@
@H_403_3@其中:@H_403_3@
@H_403_3@./bootstrap通过autoconf生成.configure@H_403_3@
@H_403_3@./configure --prefix=`pwd`将检查依赖文件包,并通过--prefix配置安装路径为当前目录。pwd指令前后的为反单引号(tab键上面那个按键)。在linux的bash中,其用法同$()相同,用``括起来的内容为一个变量,`pwd`就是当前目录。@H_403_3@
@H_403_3@如缺少安装软件包某软件包,./configure将自动终止直至安装完成。@H_403_3@
@H_403_3@我在安装中出现了如下错误:@H_403_3@
@H_403_3@1)缺少libtool。@H_403_3@
@H_403_3@解决方法:sudo apt-get install libtool@H_403_3@@H_403_3@
@H_403_3@ @H_403_3@@H_403_3@

发现已经安装了libtool,但是版本为2.4.6-0.1版。版本太高了?只能手动安装了!!!@H_403_3@
@H_403_3@

① 删除已安装版本sudo apt-get remove libtool@H_403_3@
② 至ftp://ftp.gnu.org/gnu/libtool/下载libtool-1.5.26版,并解压libtool-1.5.26目录@H_403_3@
③ 在libtool-1.5.26目录下依次执行@H_403_3@
a)./configure@H_403_3@
b)make@H_403_3@
c)sudo make install@H_403_3@
libtool完成安装@H_403_3@@H_403_3@
2.在该目录下执行:./ct-ng xtensa-lx106-elf@H_403_3@@H_403_3@

@H_403_3@

三、crosstool_NG配置@H_403_3@

@H_403_3@crosstool-NG默认配置也可以编译生成Esp8266交叉工具链,但是编译时间特别长,而且特别容易出错。针对这2点进行一些配置。@H_403_3@
在crosstool-NG目录下执行./ct-ng menuconfig进行配置@H_403_3@
1.配置多线程编译@H_403_3@
“Paths and misc options”->“Number of parallel jobs”@H_403_3@@H_403_3@
默认为0,设置为4;@H_403_3@
这个数字不易过大,常见修改方式:cpu内核数*2;如当前PC的cpu为双核,那这里就设置为4;@H_403_3@
以上配置设置完成后,在后续执行./ct-ng build时无需手工指定参数。即无需./ct-ng build.4(其实内部还是通过make -j4去执行)。@H_403_3@
2.保存编译中间步骤@H_403_3@
“Paths and misc options”->“Debug crosstool-NG”->“Save intermediate steps”@H_403_3@@H_403_3@
@H_403_3@

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

四、crosstool_NG编译

完成以上设置后,在crosstool-NG目录下执行./ct-ng build开始编译。编译过程分多个步骤:@H_403_3@
1.下载源码包:本次编译需要的源码包有:@H_403_3@
gcc-4.8.2@H_403_3@
cloog-0.18.4@H_403_3@
binutils-2.24@H_403_3@
gdb-7.5.1@H_403_3@
gmp-5.1.3.tar@H_403_3@
isl-0.12@H_403_3@
mpc-1.0.2@H_403_3@
mpfr-3.1.2.tar@H_403_3@
需要下载的源码包名称及版本在根目录下.config文件内配置。源码包下载至根目录下.build/tarballs目录,配置文件和目录为隐藏目录,在Ubuntu下需要按ctrl+h显示才能看到。.config文件和.build/tarballs目录在后面我们都要用到。@H_403_3@@H_403_3@
2.自动/手动下载源码包@H_403_3@
a)自动下载:@H_403_3@
在crosstool-NG目录下执行./ct-ng build及开始编译前的第一步工作,编译依赖包下载,该步骤根据网络情况和服务器情况不同,非常耗时。@H_403_3@
在未知源码包名称及版本情况下,可一步一步根据build后日志上显示的源码包文件名、版本号、下载路径去下载,然后放至.build/tarballs。下载完一个后,再执行./ct-ng build来确定下一个包。@H_403_3@
b)手动下载:我们通过查看根目录下.config文件,得到源码包名称及版本号。下载完成后全部放至.build/tarballs。以下为下载地址:@H_403_3@
gcc-4.8.2:ftp://ftp.gnu.org/gnu/gcc/gcc-4.8.2/@H_403_3@
cloog-0.18.4:http://www.cloog.org/@H_403_3@
binutils-2.24:ftp://ftp.gnu.org/gnu/binutils/@H_403_3@
gdb-7.5.1:ftp://ftp.gnu.org/gnu/gdb/@H_403_3@
gmp-5.1.3.tar:ftp://ftp.gnu.org/gnu/gmp/@H_403_3@
isl-0.12:http://isl.gforge.inria.fr/@H_403_3@
mpc-1.0.2:ftp://ftp.gnu.org/gnu/mpc/@H_403_3@
mpfr-3.1.2.tar:ftp://ftp.gnu.org/gnu/mpfr/@H_403_3@
如果在windows系统下下载以上软件,建议不要使用迅雷等下载工具。将以上下载文件copy至.build/tarballs,然后在根目录下执行./ct-ng build。然后开始满足的编译过程,根据电脑配置不同时间不同,需要耐心等待。@H_403_3@@H_403_3@
@H_403_3@

可以看到,我们配置的保存编译过程,可以在出错后只从出错未知开始重新编译@H_403_3@

@H_403_3@
如编译过程中binutils_for_host出错,我们可以直接执行 ./ct-ng binutils_for_host+,之前编译过的就不需要重复运行。@H_403_3@@H_403_3@
@H_403_3@
一次性成功,耗时27分钟!是不是感觉so easy?@H_403_3@
编译完成的交叉编译器在更目录下builds下,文件名为xtensa-lx106-elf@H_403_3@@H_403_3@

到这里,我们的交叉编译器生成工作已完成了95%,那剩下的5%呢?现在我们就把xtensa-lx106-elf到Ubuntu系统目录下,编译一下esp8266的工程试试!、@H_403_3@

@H_403_3@@H_403_3@

五、xtensa-lx106-elf测试@H_403_3@

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

再次编译SDK,编译成功!!!剩下的5%工作完成。@H_403_3@@H_403_3@

@H_403_3@@H_403_3@
参考博客:http://blog.csdn.net/flyingcys/article/details/71357261@H_403_3@@H_403_3@

猜你在找的Ubuntu相关文章