前言
這節咱自己編譯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下載的那么清除程序的時候
清除不了程序
你需要