1. 程式人生 > >配置ESP8266 NONOS SDK時由於工具鏈版本差異引發的故障

配置ESP8266 NONOS SDK時由於工具鏈版本差異引發的故障

cep add 通過 str 交叉 div 2.0 庫文件 版本信息

  前不久部署ESP8266_NONOS_SDK時遇到了一個奇怪的問題,描述如下:

  examples例程可以通過編譯,但燒寫到ESP8266模塊後,程序無法正常運行,編譯和燒寫的相關配置均無誤。在boot模式下編譯,串口輸出jump to run user1後,觸發Fatal Exception (29)。串口輸出日誌如下:

 ets Jan  8 2013,rst cause:2, boot mode:(3,7)
load 0x40100000, len 2408, room 16 
tail 8
chksum 0xe5
load 0x3ffe8000, len 776, room 0 
tail 8
chksum 
0x84 load 0x3ffe8310, len 632, room 0 tail 8 chksum 0xd8 csum 0xd8 2nd boot version : 1.6 SPI Speed : 40MHz SPI Mode : QIO SPI Flash Size & Map: 4Mbit(1024KB+1024KB) no GPIO select! jump to run user1 @ 1000 Fatal Exception (29) epc1=0x4000df64, epc2=0x00000000, epc3=0x00000000, excvaddr=0x00000000, depc=0x00000000 Fatal Exception (
29) epc1=0x4000df64, epc2=0x00000000, epc3=0x00000000, excvaddr=0x00000000, depc=0x00000000 Fatal Exception (29) epc1=0x4000df64, epc2=0x00000000, epc3=0x00000000, excvaddr=0x00000000, depc=0x00000000

  在這裏開一文記錄解決該問題的思路,以供遇到相似問題的朋友參考,避免入坑。

  鑒於例程本身的可靠性可以保證,只剩下SDK或者工具鏈的問題。考慮到espressif並沒有完全開源其技術細節,在SDK中仍留有閉源的archive靜態鏈接庫文件(參見lib目錄),而這些靜態庫可能鏈接同時依賴於工具鏈中的庫(例如libc、libhal等),而若當前使用的工具鏈版本

SDK官方使用的工具鏈版本不同時,可能會出現兼容性問題。

  通過仔細閱讀NONOS_SDK的文檔,發現官方原始使用的工具鏈gcc版本信息如下(SDK v3.0):

xtensa-lx106-elf-gcc (crosstool-NG 1.20.0) 4.8.2

  而當前我所使用的交叉編譯工具鏈中gcc版本信息為:

xtensa-lx106-elf-gcc.exe (crosstool-NG crosstool-ng-1.22.0-92-g8facf4c0) 5.2.0

  於是嘗試將當前交叉編譯工具鏈回退版本到4.8.2,重新編譯後,故障消除。

備註: NONOS_SDK v3.0可以在espressif release頁面上找到:https://github.com/espressif/ESP8266_NONOS_SDK/releases。

配置ESP8266 NONOS SDK時由於工具鏈版本差異引發的故障