ESP8266 LUA腳本語言開發: 准備工作-動手編譯LUA固件


 

 

 

 

前言

  這節咱自己編譯LUA固件

 

准備一台linux的機子

 

我把固件放到了git上,方便電腦用http下載

我先用這個連接linux 

大家隨意哈,只要是一台linux的機子就可以,不管是圖形頁面還是命令行形式使用,只要自己可以操作就可以

我用的是ubuntu16.4

執行 apt-get update

如果自己的ubuntu什么都沒有安裝,,先執行個命令

apt-get update    

     

更新一下軟件庫列表,其實是發行ubuntu的人們為咱把幾乎所有可能用到的軟件都放到了一個地方.咱執行這個命令,就可以把所有軟件的https下載鏈接存起來,咱想安裝某個軟件的時候(假設調用的是Ubuntu自帶的安裝軟件指令), 這樣的話系統先檢查你輸入的是下載哪個軟件的指令,然后找到相應的鏈接,然后下載下來安裝

有些指令我就不嘮叨了,請自行百度,看看各自的指令到底是什么意思,很多東西其實都是一層紙(也有可能是鋼板),只要你肯下功夫戳破.....

 

 

 

 

 

安裝其它一些軟件

執行  apt-get install make gedit git tar unzip srecord python python-serial gcc g++            

分開看(tar    unzip   ......自行百度都是干什么的)  

 

gedit : 相當於記事本

tar : 解壓tar類型的壓縮包

unzip:解壓zip類型的壓縮包

srecord:裁剪拼接文件用

自行百度去.....領進門,修行靠個人..

 

 

 

 

 

進入opt文件夾

 

 

 

 

執行  git clone https://gitee.com/yang456/NodemcuCompile.git    

這是我上傳到git的,方便編譯固件

 

 

 

 

然后執行

cd NodemcuCompile

ls

 

 

 nodemcu-firmware-2.0.0-master  這個是lua的源碼

 xtensa-lx106-elf  這個是編譯8266所需要的環境

 

解壓出來這兩個文件 

 

解壓源碼

tar -xvf nodemcu-firmware-2.0.0-master.tar.bz2      

 

 

接着解壓

tar -xvf  xtensa-lx106-elf-ccf1cfd2.tar.bz2

 

ls

 

 修改下xtensa-lx106-elf  文件的權限,讓文件可讀可寫,防止后續編譯中出現沒有權限問題

文件是綠色就不用修改...大家自己百度文件顏色和對應的權限

輸入

chmod -R 777 ./xtensa-lx106-elf                

 

 

 

設置環境環境     windows 都是鼠標點點點,鍵盤敲敲敲     linux就是鍵盤敲敲敲

 vim /etc/environment

 

 

在文檔的后面加上

 :/opt/NodemcuCompile/xtensa-lx106-elf/bin

https://www.runoob.com/linux/linux-vim.html     vim命令看這個

這是我一開始的

 

 先按鍵盤 i

移動到上面的位置,輸入 :/opt/NodemcuCompile/xtensa-lx106-elf/bin

 

 

    

 

執行  source /etc/environment     立即生效環境變量

 

 echo $PATH     查看當前環境變量

 

咱測試一下

執行  xtensa-lx106-elf-gcc -v

 

 

 

 為了防止編譯出錯,咱也設置 nodemcu-firmware-2.0.0-master  里面所有的權限

執行  chmod -R 777 ./nodemcu-firmware-2.0.0-master

進入  nodemcu-firmware-2.0.0-master

執行  cd  nodemcu-firmware-2.0.0-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

 

好了

現在清理一下工程

make clean

 

進入bin文件

cd bin

ls

 

 

 里面有兩個bin

一個從0x00000地址開始刷  一個從 0x10000  地址開始刷,刷進去這兩個就是咱lua 開發的固件

 

  但是刷兩個比較麻煩,,咱就把這兩個合成一個

//把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開始

 

 

 

 

 現在這個1.bin就是咱的Lua開發的固件了

 現在這個1.bin就是咱的Lua開發的固件了

現在這個1.bin就是咱的Lua開發的固件了

 

 

 

修改或者添加功能

 

接着說

為了好敘述我還是用圖形頁面的linux說明....這個沒有圖形頁面,敘述起來比較麻煩

 

 

 

 

 

 修改完最后點擊保存

 

然后向上面那樣編譯就可以

不過后期的編譯只需要

//進入cd nodemcu-firmware-master

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

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

//清理編譯
make clean

 然后到bin文件里面找到編譯好的固件,下載到wifi里面就可以(可以先合成一個再下載,比較方便)

//把0x00000和0x10000合成1.bin

cd  bin


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

 

現在的固件就支持了SmartConfig配網

 

把LUA程序打包進bin固件

 

咱現在看另一個事情,

 

 

 

 一個一個的刷文件是不是感覺很不爽

刷完固件刷程序,還要一個一個的下載......麻煩

現在咱把咱寫的lua程序打包進bin文件里面

我就寫個簡單的文件測試測試給大家看,多

 

 然后把咱的程序文件放到

 

 

 然后編譯

//進入cd nodemcu-firmware-master

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

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

//清理編譯
make clean

 

 

 然后咱看看bin文件里面

 

 

 現在下載的話可以

 

 程序默認一啟動就運行了咱寫的程序

 

 

 不過這樣多麻煩,,我還是喜歡刷一個固件

 

//進入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

 

 

 

 

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

 

 

 好了,,最后下載這一個就可以了

 

 

 

 

注意,由於程序文件大小不一樣,所以這個地址也可能不一樣

 

 

 

 我留下幾個

 

//把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

 

//把0x70000-8mb.bin和1.bin合成nodemcu_8mb.bin
srec_cat -output "nodemcu_8mb.bin" -binary 1.bin -binary -fill 0xff 0x00000 0x70000 0x70000-8mb.bin -binary -offset 0x70000

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

 

//把0xb0000-8mb.bin和1.bin合成nodemcu_8mb.bin
srec_cat -output "nodemcu_8mb.bin" -binary 1.bin -binary -fill 0xff 0x00000 0xb0000 0xb0000-8mb.bin -binary -offset 0xb0000

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

 

 

注意:

如果把自己的程序打包進bin下載的那么清除程序的時候

 

 清除不了程序

你需要

 

 

 


免責聲明!

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



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