【物联网】 Ubuntu中生成交叉编译器xtensa-lx106-elf
生活随笔
收集整理的這篇文章主要介紹了
【物联网】 Ubuntu中生成交叉编译器xtensa-lx106-elf
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
要在PC上開發(fā)ESP8266,無論是Linux還是Windows首先需要有一套交叉編譯環(huán)境,才能將編寫好的代碼編譯成可在ESP8266上固化和運行的bin文件。官方提供了已編譯完成的Linux下的交叉編譯器可供下載,也提供了移植好的crosstool-NG給有自己編譯需求的開發(fā)者自行編譯。今天我們就是要自己來編譯crosstool-NG來自己編譯出Esp8266在Linux下的交叉編譯工具鏈。
在編譯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
使用apt-get之前先確定下軟件下載源在國內(nèi)還是國外,推薦使用國內(nèi)的阿里云鏡像或163鏡像速度比較快,不然下載速度就杯具了!記得下載前先sudo apt-get update下。
在命令行輸入:git clone -b lx106 git://github.com/jcmvbkbc/crosstool-NG.git ,git clone -b表示只克隆lx106分支,該分支下總共有30425個文件,git表示網(wǎng)絡有些慢,需要一些時間。
經(jīng)過漫長的等待后Clone終于完成,進入crosstool-NG文件夾,我們可以看到:
1.在該目錄下執(zhí)行:./bootstrap && ./configure --prefix=`pwd` && make && make install
當然也可分開執(zhí)行4條依次執(zhí)行。
其中:
?./bootstrap通過autoconf生成.configure
?./configure --prefix=`pwd`將檢查依賴文件包,并通過--prefix配置安裝路徑為當前目錄。pwd指令前后的為反單引號(tab鍵上面那個按鍵)。在linux的bash中,其用法同$()相同,用``括起來的內(nèi)容為一個變量,`pwd`就是當前目錄。
如缺少安裝軟件包某軟件包,./configure將自動終止直至安裝完成。
我在安裝中出現(xiàn)了如下錯誤:
1)缺少libtool。
解決方法:sudo apt-get install libtool
發(fā)現(xiàn)已經(jīng)安裝了libtool,但是版本為2.4.6-0.1版。版本太高了?只能手動安裝了!!!
① 刪除已安裝版本sudo apt-get remove libtool
② 至ftp://ftp.gnu.org/gnu/libtool/下載libtool-1.5.26版,并解壓libtool-1.5.26目錄
③ 在libtool-1.5.26目錄下依次執(zhí)行
a)./configure
b)make
c)sudo make install
libtool完成安裝 2.在該目錄下執(zhí)行:./ct-ng xtensa-lx106-elf
在crosstool-NG目錄下執(zhí)行./ct-ng menuconfig進行配置
1.配置多線程編譯
“Paths and misc options”->“Number of parallel jobs”
默認為0,設置為4;
這個數(shù)字不易過大,常見修改方式:CPU內(nèi)核數(shù)*2;如當前PC的CPU為雙核,那這里就設置為4;
以上配置設置完成后,在后續(xù)執(zhí)行./ct-ng build時無需手工指定參數(shù)。即無需./ct-ng build.4(其實內(nèi)部還是通過make -j4去執(zhí)行)。
2.保存編譯中間步驟
“Paths and misc options”->“Debug crosstool-NG”->“Save intermediate steps”
crosstool-NG默認配置下每次編譯都是重新開始的,無論上一次編譯到哪一步,是否成功!
完成以上設置后,保存并退出。
1.下載源碼包:本次編譯需要的源碼包有:
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文件內(nèi)配置。源碼包下載至根目錄下.build/tarballs目錄,配置文件和目錄為隱藏目錄,在Ubuntu下需要按ctrl+h顯示才能看到。.config文件和.build/tarballs目錄在后面我們都要用到。
2.自動/手動下載源碼包
a)自動下載:
在crosstool-NG目錄下執(zhí)行./ct-ng build及開始編譯前的第一步工作,編譯依賴包下載,該步驟根據(jù)網(wǎng)絡情況和服務器情況不同,非常耗時。
在未知源碼包名稱及版本情況下,可一步一步根據(jù)build后日志上顯示的源碼包文件名、版本號、下載路徑去下載,然后放至.build/tarballs。下載完一個后,再執(zhí)行./ct-ng build來確定下一個包。
b)手動下載:我們通過查看根目錄下.config文件,得到源碼包名稱及版本號。下載完成后全部放至.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系統(tǒng)下下載以上軟件,建議不要使用迅雷等下載工具。將以上下載文件copy至.build/tarballs,然后在根目錄下執(zhí)行./ct-ng build。然后開始滿足的編譯過程,根據(jù)電腦配置不同時間不同,需要耐心等待。
可以看到,我們配置的保存編譯過程,可以在出錯后只從出錯未知開始重新編譯
如編譯過程中binutils_for_host出錯,我們可以直接執(zhí)行 ./ct-ng binutils_for_host+,之前編譯過的就不需要重復運行。
一次性成功,耗時27分鐘!是不是感覺so easy?
編譯完成的交叉編譯器在更目錄下builds下,文件名為xtensa-lx106-elf
到這里,我們的交叉編譯器生成工作已完成了95%,那剩下的5%呢?現(xiàn)在我們就把xtensa-lx106-elf到Ubuntu系統(tǒng)目錄下,編譯一下esp8266的工程試試!、
2.
在github上下載最新esp8266的rtos版本sdk至本地
git clone https://github.com/espressif/ESP8266_RTOS_SDK
ESP8266_RTOS_SDK在linux工程運行配置請參照本文博客《ESP8266交叉編譯環(huán)境搭建之linux篇》一文,這里不再重復敘述。
運行SDK內(nèi)部的sample,你就會發(fā)現(xiàn),編譯出錯了,這就是我們剩下的5%的工作。
1)提示缺少stdint.h文件
執(zhí)行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文件
執(zhí)行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/
再次編譯SDK,編譯成功!!!剩下的5%工作完成。
參考博客:http://blog.csdn.net/flyingcys/article/details/71357261
一、編譯環(huán)境配置
由于編譯crosstool-NG依賴編譯環(huán)境,本次編譯在Ubuntu_16.04.2_64bit下進行,gcc版本為5.4.0,make版本為4.1,可通過gcc -v/make -v查看。 文本后續(xù)提到的在編譯過程中出現(xiàn)的錯誤都是基于當前環(huán)境下的,如編譯環(huán)境不一致導致其他錯誤,可按照類似方法解決。在編譯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
使用apt-get之前先確定下軟件下載源在國內(nèi)還是國外,推薦使用國內(nèi)的阿里云鏡像或163鏡像速度比較快,不然下載速度就杯具了!記得下載前先sudo apt-get update下。
二、crosstool_NG下載
ESP8266內(nèi)置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個文件,git表示網(wǎng)絡有些慢,需要一些時間。
經(jīng)過漫長的等待后Clone終于完成,進入crosstool-NG文件夾,我們可以看到:
1.在該目錄下執(zhí)行:./bootstrap && ./configure --prefix=`pwd` && make && make install
當然也可分開執(zhí)行4條依次執(zhí)行。
其中:
?./bootstrap通過autoconf生成.configure
?./configure --prefix=`pwd`將檢查依賴文件包,并通過--prefix配置安裝路徑為當前目錄。pwd指令前后的為反單引號(tab鍵上面那個按鍵)。在linux的bash中,其用法同$()相同,用``括起來的內(nèi)容為一個變量,`pwd`就是當前目錄。
如缺少安裝軟件包某軟件包,./configure將自動終止直至安裝完成。
我在安裝中出現(xiàn)了如下錯誤:
1)缺少libtool。
解決方法:sudo apt-get install libtool
發(fā)現(xiàn)已經(jīng)安裝了libtool,但是版本為2.4.6-0.1版。版本太高了?只能手動安裝了!!!
① 刪除已安裝版本sudo apt-get remove libtool
② 至ftp://ftp.gnu.org/gnu/libtool/下載libtool-1.5.26版,并解壓libtool-1.5.26目錄
③ 在libtool-1.5.26目錄下依次執(zhí)行
a)./configure
b)make
c)sudo make install
libtool完成安裝 2.在該目錄下執(zhí)行:./ct-ng xtensa-lx106-elf
三、crosstool_NG配置
crosstool-NG默認配置也可以編譯生成Esp8266交叉工具鏈,但是編譯時間特別長,而且特別容易出錯。針對這2點進行一些配置。在crosstool-NG目錄下執(zhí)行./ct-ng menuconfig進行配置
1.配置多線程編譯
“Paths and misc options”->“Number of parallel jobs”
默認為0,設置為4;
這個數(shù)字不易過大,常見修改方式:CPU內(nèi)核數(shù)*2;如當前PC的CPU為雙核,那這里就設置為4;
以上配置設置完成后,在后續(xù)執(zhí)行./ct-ng build時無需手工指定參數(shù)。即無需./ct-ng build.4(其實內(nèi)部還是通過make -j4去執(zhí)行)。
2.保存編譯中間步驟
“Paths and misc options”->“Debug crosstool-NG”->“Save intermediate steps”
crosstool-NG默認配置下每次編譯都是重新開始的,無論上一次編譯到哪一步,是否成功!
完成以上設置后,保存并退出。
四、crosstool_NG編譯
完成以上設置后,在crosstool-NG目錄下執(zhí)行./ct-ng build開始編譯。編譯過程分多個步驟:1.下載源碼包:本次編譯需要的源碼包有:
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文件內(nèi)配置。源碼包下載至根目錄下.build/tarballs目錄,配置文件和目錄為隱藏目錄,在Ubuntu下需要按ctrl+h顯示才能看到。.config文件和.build/tarballs目錄在后面我們都要用到。
2.自動/手動下載源碼包
a)自動下載:
在crosstool-NG目錄下執(zhí)行./ct-ng build及開始編譯前的第一步工作,編譯依賴包下載,該步驟根據(jù)網(wǎng)絡情況和服務器情況不同,非常耗時。
在未知源碼包名稱及版本情況下,可一步一步根據(jù)build后日志上顯示的源碼包文件名、版本號、下載路徑去下載,然后放至.build/tarballs。下載完一個后,再執(zhí)行./ct-ng build來確定下一個包。
b)手動下載:我們通過查看根目錄下.config文件,得到源碼包名稱及版本號。下載完成后全部放至.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系統(tǒng)下下載以上軟件,建議不要使用迅雷等下載工具。將以上下載文件copy至.build/tarballs,然后在根目錄下執(zhí)行./ct-ng build。然后開始滿足的編譯過程,根據(jù)電腦配置不同時間不同,需要耐心等待。
可以看到,我們配置的保存編譯過程,可以在出錯后只從出錯未知開始重新編譯
如編譯過程中binutils_for_host出錯,我們可以直接執(zhí)行 ./ct-ng binutils_for_host+,之前編譯過的就不需要重復運行。
一次性成功,耗時27分鐘!是不是感覺so easy?
編譯完成的交叉編譯器在更目錄下builds下,文件名為xtensa-lx106-elf
到這里,我們的交叉編譯器生成工作已完成了95%,那剩下的5%呢?現(xiàn)在我們就把xtensa-lx106-elf到Ubuntu系統(tǒng)目錄下,編譯一下esp8266的工程試試!、
五、xtensa-lx106-elf測試
1.在build目錄下執(zhí)行sudo cp -f xtensa-lx106-elf /opt并正確配置環(huán)境變量,ubuntu下環(huán)境變量配置可參照《Linux環(huán)境變量設置》一文。2.
在github上下載最新esp8266的rtos版本sdk至本地
git clone https://github.com/espressif/ESP8266_RTOS_SDK
ESP8266_RTOS_SDK在linux工程運行配置請參照本文博客《ESP8266交叉編譯環(huán)境搭建之linux篇》一文,這里不再重復敘述。
運行SDK內(nèi)部的sample,你就會發(fā)現(xiàn),編譯出錯了,這就是我們剩下的5%的工作。
1)提示缺少stdint.h文件
執(zhí)行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文件
執(zhí)行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/
再次編譯SDK,編譯成功!!!剩下的5%工作完成。
參考博客:http://blog.csdn.net/flyingcys/article/details/71357261
總結
以上是生活随笔為你收集整理的【物联网】 Ubuntu中生成交叉编译器xtensa-lx106-elf的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【物联网】 ESP8266 Ubunt
- 下一篇: 【Oracle】Redhat6.5环境下