這些天想研究一下esp8266,於是從官網下載sdk想試試。這個開發環境搭建了半天也按網上的教程把sdk里的文件都整理好后編譯。可編譯提示錯誤,提示如下
19:29:03 **** Incremental Build of configuration Default for project ESP8266_NONOS_SDK **** make all make[1]: Entering directory '/cygdrive/i/BaiduYunDownload/esp8266/esp8266 sdk/ESP8266_NONOS_SDK/app' make[2]: Entering directory '/cygdrive/i/BaiduYunDownload/esp8266/esp8266 sdk/ESP8266_NONOS_SDK/app/user' make[2]: Leaving directory '/cygdrive/i/BaiduYunDownload/esp8266/esp8266 sdk/ESP8266_NONOS_SDK/app/user' xt-xcc -L../lib -nostdlib -T../ld/eagle.app.v6.ld -Wl,--no-check-sections -u call_user_start -Wl,-static -Wl,--start-group -lc -lgcc -lhal -lphy -lpp -lnet80211 -llwip -lwpa -lcrypto -lmain -ljson -lupgrade -lssl -lwps -lsmartconfig -lairkiss user/.output/eagle/debug/lib/libuser.a -lat -Wl,--end-group -o .output/eagle/debug/image/eagle.app.v6.out /opt/xtensa-lx106-elf/bin/../lib/gcc/xtensa-lx106-elf/4.8.2/../../../../xtensa-lx106-elf/bin/ld: .output/eagle/debug/image/eagle.app.v6.out section `.irom0.text' will not fit in region `irom0_0_seg' collect2: error: ld returned 1 exit status ../Makefile:363: recipe for target '.output/eagle/debug/image/eagle.app.v6.out' failed make[1]: *** [.output/eagle/debug/image/eagle.app.v6.out] Error 1 make[1]: Leaving directory '/cygdrive/i/BaiduYunDownload/esp8266/esp8266 sdk/ESP8266_NONOS_SDK/app' Makefile:308: recipe for target '.subdirs' failed make: *** [.subdirs] Error 2 "make all" terminated with exit code 2. Build might be incomplete.
網上找了半天看到有人說把sdk根目錄的Makefile文件 第23行BOOT?=none 改成new, APP?=0 改成1 ,SPI_SIZE_MAP?=0改成6 如下圖
改完之后居然真的編譯通過。可是發現又不對勁了。這個boot改變了就意味的功能都不一樣了。於是又去網上搜了半天總是看明白了有boot的是支持雲端升級的沒有boot是不支持雲端升級的。然后我對比后發現boot所需空間很小就4可k左右,而沒有boot功能的bin文件有40k左右。那如果不要boot,就不能改Makefile文件還是BOOT?=none ,APP?=0。可是這樣編譯又提示錯誤。
又因為這個問題研究了半天終於讓我找到問題的原因了。編譯所產生的燒錄文件eagle.irom0text.bin大小352kb,而ld文件eagle.app.v6.ld中的irom0_0seg ,len =0x3c000,這才240k。如下圖
於是我換算了一下352k十六進制 0x58000如下圖,
再預留大一些把ld文件的ld文件eagle.app.v6.ld中的irom0_0seg 改成len=0x59000編譯成功如下圖。
編譯前最后先make clean一下。這個問題花了不少時間因為之前對這個也不了解。如果有遇到相同問題的也希望能幫到初學者少走些彎路。