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/

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM