前言

  这节咱自己编译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下载的那么清除程序的时候

清除不了程序

你需要

ESP8266 LUA脚本语言开发: 准备工作-动手编译LUA固件的更多相关文章

  1. ESP8266 LUA脚本语言开发: 准备工作-LUA开发是怎么来的

    前言 当前8266有各种开发 1.在官方已经封装好的C库上开发(SDK开发) 2.官方在SDK的基础上封装的AT指令程序(AT指令开发) 3.在SDK的基础上嵌入脚本语言(Lua,Python等开发方 ...

  2. ESP8266 LUA脚本语言开发: 准备工作-官网获取LUA固件

    前言 这节咱去官网上获取lua开发的固件. 官网下载 下面是我以前写的,咱不使用官网下载的固件,咱使用自己编译的固件.. 填写好自己的的邮箱地址,然后选择好自己需要的功能,一会编译好的固件就会发到您的 ...

  3. ESP8266 LUA脚本语言开发: 准备工作-LUA开发说明

    前言 开发Lua需要使用这个软件 注:该软件需要按照JDK  即 JAVA虚拟机,如果没有安装过JDK,请先看JDK安装教程安装JDK USB线连接开发板接入电脑 选择自己的串口号 波特率115200 ...

  4. ESP8266 LUA脚本语言开发: 准备工作-为方便学习(统一使用本人编译的固件)

    前言 注:为了咱后期统一起来,所以统一使用我编译的LUA固件 一,固件打开了SmartConfig / AirKiss 配网功能 二,打开了SSL 三,其它模块化程序 刷空固件 一,为了保证固件是干净 ...

  5. ESP8266 LUA脚本语言开发: 准备工作-硬件说明

    原理图 实物图 硬件说明 开发板板载说明: 1.主控芯片: ESP8266_12F 1.温湿度传感器DHT11   与连接ESP8266        GPIO4引脚 2.一路继电器         ...

  6. ESP8266 LUA脚本语言开发: 准备工作-LUA文件加载与变量调用

    前言 这节说一下多个文件调用 多个文件之间变量调用 准备两个文件 init.lua other.lua 开始 模块默认一开始调用的是init.lua 咱让init.lua调用 other.lua 很简 ...

  7. 使用Lua脚本语言开发出高扩展性的系统,AgileEAS.NET SOA中间件Lua脚本引擎介绍

    一.前言 AgileEAS.NET SOA 中间件平台是一款基于基于敏捷并行开发思想和Microsoft .Net构件(组件)开发技术而构建的一个快速开发应用平台.用于帮助中小型软件企业建立一条适合市 ...

  8. ESP8266 LUA脚本语言开发: 外设篇-串口

    https://nodemcu.readthedocs.io/en/master/modules/uart/ 串口发送数据 发送一个16进制到串口 uart.write(0, 0xaa) 注: 之所以 ...

  9. ESP8266 LUA脚本语言开发: 测试下诱人的程序

    前言 这一节测试一下诱人的程序 实现的功能,APP通过SmartConfig给Wi-Fi模块配网并绑定设备,然后通过MQTT远程控制开发板的继电器, APP显示ESP8266采集的温湿度数据. 简而言 ...

随机推荐

  1. Axure入门

    一.Axure介绍 1.1 原型和Axure是什么? 原型是什么? 简单的说就是产品设计成形之前的一个简单框架,对网站来讲,就是将页面模块.元素进行粗放式的排版和布局,深入一些,还会加入一些交互性的元 ...

  2. HTML连载27-层叠性&优先级&!important用法

    一.层叠性 1.定义:CSS处理冲突的一种能力 2.注意点:层叠性只有在多个选择器中“同一标签”,然后又设置了“相同的属性”,才会发生层叠性 3.CSS缩写:Cascading StyleSheet ...

  3. Ext.net SelectionModel RowSelection

    <SelectionModel> <ext:RowSelectionModel ID="RowSelectionModel1308" runat="se ...

  4. javascript的对象与字符串相互转换

    因为对象不利于网络传输,因此要转换成字符串,转换成字符串之后又要考虑怎么将这个字符串转换回对象,以便取得对象中的属性. 常用的做法是将对象转换为JSON字符串,这里的转换方法也是用的JSON官方提供的 ...

  5. pom文件语法无误却报红叉(Unknown error)的可能原因

    本文链接:https://blog.csdn.net/Little_Stars/article/details/94553090可能原因及解决办法: >> 缓存问题,只要 “Maven - ...

  6. C# 调用打印机打印文件

    C# 调用打印机打印文件,通常情况下,例如Word.Excel.PDF等可以使用一些对应的组件进行打印,另一个通用的方式是直接启用一个打印的进程进行打印.示例代码如下: using System.Di ...

  7. go 中string[0]到底是rune还是byte?

    好像没区别,对吧? 来看个全面的对比: package main import ( "fmt" "reflect") func main(){ asci:=&q ...

  8. 类初始化应用(class初始化值用函数改变与增添)

    class Dataset(object): def __init__(self): self.image_info = [] # 初始化一个列表 def add_image(self, source ...

  9. i春秋——“百度杯”CTF比赛 九月场——Test(海洋cms / seacms 任意代码执行漏洞)

    打开发现是海洋cms,那就搜索相关漏洞 找到一篇介绍海洋cms的命令执行漏洞的文章:https://www.jianshu.com/p/ebf156afda49 直接利用其中给出的poc /searc ...

  10. 藏红花StigmaCroci西红花StigmaCroci番红花

    伊朗藏红花(StigmaCroci)是一种耐旱植物,适于生长在冬季最低气温不低于零下20度,夏季最高气温不高于零上35度且气候干燥的地区. 因其水土和气候条件的限制,除了伊朗能大量种植外,希腊.印度. ...