个性化制作nodemcu-firmware(esp8266/esp8285 固件制作)----包含lua程序bin的制作

在制作nodemcu-firmware时,除了选择必要模块和系统文件,往往需要将编写的lua程序和文档直接制作成硬件,方便批量烧录进芯片。本来,文档说明提到只要在nodemcu-firmware/local/fs目录里面包含了文件,在根目录运行make,会自动生成包含spiffs image的bin文件的。但实际上仅生成了0x000000.bin和0x010000.bin两个文件。于是需要手动制作spiffs image文件。下面就介绍如何使用spiffsimg程序生成固件。
本案例的系统环境:固件制作使用linux平台(在天翼云服务器上进行,Centos7),本地系统使用Windows10(flash软件和ESPlorer).

在生成spiffs image前,首先要生成nodemcu firmware:

我这边user_config.h的配置:

#define LUA_NUMBER_INTEGRAL
#define LUA_FLASH_STORE                   0x10000

然后,根据教程,回到nodemcu-firmware/,运行make指令就会生成两个bin文件。
然后将两个bin文件通过flash工具写入nodemcu相应的地址(文件名就是地址)。
这时用ESPlorer连接芯片,重启芯片,会正常启动,并提示:Could not find init.lua。
然后我们可以运行指令查看spiffs的开始地址:

do
  local s,p={},node.getpartitiontable()
  for _,k in ipairs{'lfs_addr','lfs_size','spiffs_addr','spiffs_size'} do
    s[#s+1] ='%s = 0x%06x' % {k, p[k]}
  end
  print ('{ %s }' % table.concat(s,', '))
end

得到以下结果:

{ lfs_addr = 0x07c000, lfs_size = 0x010000, spiffs_addr = 0x08c000, spiffs_size = 0x071000 }

这就知道spiffs开始地址为:0x08c000

然后进入spiffs image文件制作:

具体spiffsimg介绍见https://github.com/nodemcu/nodemcu-firmware/blob/master/docs/en/spiffs.md
先进入/nodemcu-firmware/tools/spiffsimg/目录
查看有没有一个spiffsimg的文件,如没有,就运行make指令,会编译生成一个spiffsimg文件。否则无法运行spiffsimg命令。
执行:

make

然后在目录中会生成一个spiffsimg文件,这样就可以运行spiffsimg指令来将需要的文件打包了。
指令:

./spiffsimg -f lua.img -S 1MB -U 573440 -r lua.script

其中:-S后面的参数1MB,表示芯片flash大小为1MB,-U表示前面固件和LSF使用数;实际生成的img文件大小为1*1024 - 573440/1024 - 48 = 424k。573440是根据上面固件刷入后,查看spiffs的开始地址为0x08c000,其十进制地址为573440。
在打包前先在spiffsimg目录里创建一个lua.script文件,文件名可以自定。
lua.script内容:

import /filedriver/nodemcu-firmware/local/fs/init.lua init.lua
import /filedriver/nodemcu-firmware/local/fs/init_config.lua init_config.lua
import /filedriver/nodemcu-firmware/local/fs/get_ip.lua get_ip.lua
import /filedriver/nodemcu-firmware/local/fs/checkVersion.lua checkVersion.lua
import /filedriver/nodemcu-firmware/local/fs/program.lua program.lua
import /filedriver/nodemcu-firmware/local/fs/enduser_setup.html enduser_setup.html
ls

其中:
import <文件的路径> <mcu中的文件名>:导入文件
ls:显示包含的文件信息
然后运行spiffsimg指令:

./spiffsimg -f lua.img -S 1MB -U 573440 -r lua.script

最后就会生成一个lua.img的文件,就可以烧录进mcu了,但需要搞清楚烧录的地址,就是spiffs的地址。这个地址可以用ESPlorer连接nodemcu,通过以下指令活得:

do
  local s,p={},node.getpartitiontable()
  for _,k in ipairs{'lfs_addr','lfs_size','spiffs_addr','spiffs_size'} do
    s[#s+1] ='%s = 0x%06x' % {k, p[k]}
  end
  print ('{ %s }' % table.concat(s,', '))
end

得到以下结果:

{ lfs_addr = 0x07c000, lfs_size = 0x010000, spiffs_addr = 0x08c000, spiffs_size = 0x071000 }

这就知道spiffs开始地址为:0x08c000
于是就可以用flash工具,在以上地址上写入上面生成的img文件了。
写入后,再用ESPlorer查看,重启芯片后直接就可以运行init.lua了。

最后为方便批量刷写固件,将三个文件合并为一个bin文件:

先将上面生成的0x000000.bin、0x010000.bin、lua.img放在同一个目录bin
然后进入bin目录,执行srec_cat指令合并文件:

cd bin
srec_cat -output "temp.bin" -binary 0x00000.bin -binary -fill 0xff 0x00000 0x10000 0x10000.bin -binary -offset 0x10000
srec_cat -output "nodemcu_32mb.bin" -binary temp.bin -binary -fill 0xff 0x00000 0x8c000 lua.img -binary -offset 0x8c000

最终生成"nodemcu_32mb.bin"文件,这样就可以直接flash一个文件了。

提示:

1、必须用git colne 来下载nodemcu-firware,选择master分支下载

git clone --recurse-submodules -b master https://github.com/nodemcu/nodemcu-firmware.git

2、以上生成的bin和img文件在esp8266和esp8285芯片上均正常,记得在flash时选择正确的flash大小和SPI MODE(esp8266:DIO;esp8285:DOUT)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

wenzhp1975

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值