6-(基礎入門篇)學會編譯lua固件,固件的合成


 http://www.cnblogs.com/yangfengwu/p/9336274.html

基礎教程源碼鏈接請在淘寶介紹中下載,由於鏈接很容易失效,如果失效請聯系賣家,謝謝

https://item.taobao.com/item.htm?spm=a1z10.1-c-s.w4004-18540610442.6.36a74814ZSaRsu&id=569295486025

 

注意哈,這一節只是介紹自己如何編譯固件,對於初學者而言不必深究哈

 

虛擬機和ubuntu的安裝 

https://www.cnblogs.com/Alier/p/6337151.html

https://blog.csdn.net/colin_lisicong/article/details/70193539

https://blog.csdn.net/zqxdsy/article/details/79758194

總有一款適合你,沒有百度一下解決不了的問題,如果有那就是百度兩下。。。

 

 

 

 

鏈接:https://pan.baidu.com/s/1I9xAIMQ4RdVDmClbVI7DvQ 密碼:0zjg

 

里面鏈接有視頻教程和配置環境過程,我只是簡單的演示一下編譯過程,還有就是如何把自己的lua執行文件打包進bin,然后就是下載

 

我一般資料都放在opt目錄(如果大家也是這樣放的,就可以直接運行后面的指令編譯)

 

 

 想要打開SmartConfig

 

 選擇一些模塊的功能

 

 

把自己的lua執行文件打包進bin,把自己的lua文件放在

 

           

 

 

 

 然后就是編譯

 

cd ..


cd ..


cd opt/nodemcu-firmware-master

 

 

 

 

 

 

 

 

 

 tar -Jxvf tools/esp-open-sdk.tar.xz

 

 

 

 

 

然后設置一下環境變量

export PATH=$PATH:$PWD/esp-open-sdk/xtensa-lx106-elf/bin

 

 

獲得現在的日期

export BUILD_DATE=$(date +%Y%m%d)

 

 

 

然后開始編譯

make EXTRA_CCFLAGS="-DBUILD_DATE='\"'$BUILD_DATE'\"'" all

 

編譯完成之后,進入bin目錄

 

 

編譯完之后bin里面是這樣子

 

 

0x00000和0x10000實質上就是上一節,只不過咱是自己動手編譯的,還打開了SmartConfig功能

 

 

 

 0x80000-8mb和0x80000-32mb是咱寫的程序然后打包成了bin

 

一個是8mb一個是32mb,咱用的芯片有的是8mb的有的是32mb的

ESP01就是8mb的     esp12就是32mb的   根據自己的芯片選擇刷哪一個

 

 

 咱現在看怎么合成

先把0x00000 和0x10000合成一個 1.bin的文件,這個文件可以作為開發使用,以后咱就用這個學習開發

 

 

srec_cat -output "1.bin" -binary 0x00000.bin -binary -fill 0xff 0x00000 0x10000 0x10000.bin -binary -offset 0x10000

說一下srec_cat 是文件合成指令

-output "1.bin" -binary  給它說最后輸出一個名字是1.bin的二進制文件(-binary)
0x00000.bin -binary  找到第一個文件名字是0x00000.bin的二進制文件(-binary)
-fill 0xff 0x00000 0x10000 先把0x00000到0x10000全部填充0xff(其實內部會先生成一個用於存儲的文件)
0x10000.bin -binary -offset 0x10000  找到第二個文件名字是0x10000.bin的二進制文件(-binary),設置合成的時候,把自己的地址偏移到0x10000開始,
其實吧0x00000到0x10000 是65536個字節,就是從65536開始寫入,后面再說為什么是0x10000,其實是和flash有關

 

 

注意:這里1.bin就可以使用了,后面的合成實質是把運行文件也打包進bin文件

如果不想運行我寫的可以直接刷1.bin地址是0

 

現在再把1.bin和0x80000-8mb或者0x80000-32mb 合成一個bin 
先和
1.bin和0x80000-8mb   生成一個 nodemcu_8mb
srec_cat -output "nodemcu_8mb.bin" -binary 1.bin -binary -fill 0xff  0x00000 0x80000 0x80000-8mb.bin -binary -offset 0x80000
 
        
我發現必須要先填充,否則固件就是不行
整體上說就是先內部生成一個文件(內部文件),0x00000 到 0x80000填充上0xff
然后把1.bin 拷貝到內部文件(從0地址開始拷貝)
然后 把
0x80000-8mb.bin 從0x80000開始拷貝(感覺這里應該叫粘結)
然后生成nodemcu_8mb這個文件

 

現在生成32mb的
srec_cat -output "nodemcu_32mb.bin" -binary 1.bin -binary -fill 0xff         0x00000 0x80000 0x80000-32mb.bin -binary -offset 0x80000
 
        

 

好了現在清除一下,方便下次編譯
返回上一級目錄
cd ..

 

make clean

 

 

 

整體的
cd ..

cd ..

//進入nodemcu-firmware-master
cd opt/nodemcu-firmware-master

//解壓esp-open-sdk.tar.xz
tar -Jxvf tools/esp-open-sdk.tar.xz

//配置環境變量
export PATH=$PATH:$PWD/esp-open-sdk/xtensa-lx106-elf/bin

//獲取日期
export BUILD_DATE=$(date +%Y%m%d)

//編譯
make EXTRA_CCFLAGS="-DBUILD_DATE='\"'$BUILD_DATE'\"'" all

//進入bin目錄
cd bin/

//把0x00000和0x10000合成1.bin
srec_cat -output "1.bin" -binary 0x00000.bin -binary -fill 0xff 0x00000 0x10000 0x10000.bin -binary -offset 0x10000

//把0x80000-8mb.bin和1.bin合成nodemcu_8mb.bin(有時候是0x70000注意自己的)
srec_cat -output "nodemcu_8mb.bin" -binary 1.bin -binary -fill 0xff         0x00000 0x80000 0x80000-8mb.bin -binary -offset 0x80000

//把0x80000-32mb.bin和1.bin合成nodemcu_32mb.bin
srec_cat -output "nodemcu_32mb.bin" -binary 1.bin -binary -fill 0xff         0x00000 0x80000 0x80000-32mb.bin -binary -offset 0x80000

//返回上一級
cd ..

//清理編譯
make clean
 
        

 

https://www.cnblogs.com/yangfengwu/p/9349579.html


免責聲明!

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



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