【问题标题】:What is the correct address for loading spiffsimg file加载 spiffsimg 文件的正确地址是什么
【发布时间】:2017-01-25 21:04:01
【问题描述】:

我使用 spiffsimg 创建了一个包含多个 lua 文件的单个文件:

# ./spiffsimg -f lua.img -c 262144 -r lua.script
f   4227 init.lua
f    413 cfg.lua
f   2233 setupWifi.lua
f   7498 configServer.lua
f    558 cfgForm.htm
f   4255 setupConfig.lua
f  14192 main.lua
#

然后我使用 esptool.py 将 NodeMCU 固件和包含 lua 文件的文件刷写到 esp8266(NodeMCU 开发套件):

c:\esptool-master>c:\Python27\python esptool.py -p COM7 write_flash -fs 32m -fm dio 0x00000 nodemcu-dev-9-modules-2016-07-18-12-06-36-integer.bin 0x78000 lua.img
esptool.py v1.0.2-dev
Connecting...
Running Cesanta flasher stub...
Flash params set to 0x0240
Writing 446464 @ 0x0... 446464 (100 %)
Wrote 446464 bytes at 0x0 in 38.9 seconds (91.9 kbit/s)...
Writing 262144 @ 0x78000... 262144 (100 %)
Wrote 262144 bytes at 0x78000 in 22.8 seconds (91.9 kbit/s)...
Leaving...

然后我运行 ESPLorer 来检查状态并得到:

PORT OPEN 115200

Communication with MCU..Got answer! AutoDetect firmware...

Can't autodetect firmware, because proper answer not received.


NodeMCU custom build by frightanic.com
    branch: dev
    commit: b21b3e08aad633ccfd5fd29066400a06bb699ae2
    SSL: true
    modules: file,gpio,http,net,node,rtctime,tmr,uart,wifi
 build  built on: 2016-07-18 12:05
 powered by Lua 5.1.4 on SDK 1.5.4(baaeaebb)
lua: cannot open init.lua
> 
----------------------------
No files found.
----------------------------
> 
Total : 3455015 bytes
Used  : 0 bytes
Remain: 3455015 bytes

NodeMCU 固件正确刷入,但找不到 lua 文件。

我试过刷到其他位置(0x84000、0x7c000),但我只是根据github上的阅读线程猜测这些位置。

我使用 NodeMCU file.fscfg() 例程来获取闪存地址和大小。如果我只刷新 NodeMCU 固件,我会得到以下信息:

print (file.fscfg())
524288  3653632

534288 是 0x80000,所以我尝试只将 spiffsimg 文件 (lua.img) 刷新到 0x8000,然后运行相同的打印语句并得到:

print (file.fscfg())
786432  3391488

闪存地址增加了 lua.img 中的确切字节数 - 我不明白,为什么闪存地址会改变? file.fscfg返回的第一个数字是不是flash的起始地址,而是flash的结束地址?

刷入由 spiffsimg 创建的包含 lua 文件的图像文件的正确地址是什么?

【问题讨论】:

    标签: lua esp8266 firmware nodemcu flash-memory


    【解决方案1】:

    here 找到的 spiffsimg 版本将为刷写包含 lua 文件的映像文件提供正确的地址。

    不要使用 this 版本的 spiffsimg,因为它已经过时了。

    要安装 spiffsimg 实用程序,您需要下载并安装整个 nodemcu-firmware 软件包(进入 linux 环境,使用 make 安装 - 注意:make 在我的 debian linux 机器上生成错误,但我能够去到 ../tools/spiffsimg 子目录并在该目录中找到的 Makefile 上运行 make 以创建实用程序)。

    here 找到的 spiffsimg 指令非常清楚,但有一个例外:您使用 -f 参数指定的文件名需要包含字符 %x。 %x 将被替换为图像文件应该刷入的地址。

    例如命令

    spiffsimage -f %x-luaFiles.img -S 4MB -U 465783 -r lua.script

    将在本地目录中创建一个文件,其名称如下:80000-luaFiles.img。这意味着您应该将该图像文件安装在 ESP8266 上的地址 0x80000。

    【讨论】:

    • 我们有时会重新设置 spiffs 的基线,您必须使用与 NodeMCU 固件的 spiffs 版本相匹配的 spiffsimg 版本。最安全的方法是按照海报的建议,并使用软件发行版中包含的版本,用于您已闪存到 ESP 上的 NodeMCU 版本
    【解决方案2】:

    我自己从未这样做过,但我有理由相信可以从 the docs 中提取正确答案。

    -f 指定磁盘映像的文件名。 '%x' 将被替换 通过文件系统的计算偏移量。

    再往下一点

    磁盘镜像文件放在bin目录下,命名为 0x<offset>-<size>.bin 其中偏移量是它所在的位置 应该是flash的,size就是flash部分的大小。

    但是,这两个语句之间存在轻微的不匹配。我们可能在文档中有一个错误。如果“'%x' 将被替换......”那么我预计最终名称将不再包含 0x

    此外,您可以在构建固件时定义一个固定的 SPIFFS 位置。

    #define SPIFFS_FIXED_LOCATION 0x100000

    这指定 SPIFFS 文件系统从闪存开始的 1Mb 开始。除非 否则会运行到flash结束(不包括 SDK 预留的 16k 空间)。

    【讨论】:

    • -f 指定 spiffsimg 创建的文件名,并在本地目录中创建它(无论您从哪里运行 spiffsimg)。 spiffsimg-master 目录(通过解压缩 spiffsimg-master.zip 文件创建)中没有 bin 目录。我手动创建了一个本地 bin 目录并再次运行 spiffsimg,但 bin 目录中没有创建任何文件。我只得到-f参数指定的文件。
    • 我认为those docs 已经过时了。我尝试使用 -S 和 -U 参数而不是指定图像大小(使用 -c 参数)并且 spiffsimg 返回“无效选项”错误消息。
    • 我一直在使用这个版本的spiffsimg。我应该使用其他版本吗?
    • 很抱歉给乔纳森带来了麻烦。由您的问题触发,我第一次尝试了spiffsimg。有些东西似乎坏了(至少对我而言),我将在 GitHub 上为此提出问题。我一直在使用我们保留在firmware tools directory 中的一个版本。
    • 有没有办法从 github 上的 nodemcu-firmware/tools 目录下载构建 spiffsimg 所需的所有源代码?我找不到“spiffsimg”pkg。我需要浏览源代码并找到并下载所需的文件吗? (我是一个 github noobie,所以我想我错过了一些关于下载/构建像 spiffsimg 这样的包的东西)
    猜你喜欢
    • 1970-01-01
    • 2017-06-21
    • 1970-01-01
    • 2010-10-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-31
    • 1970-01-01
    • 2012-02-19
    相关资源
    最近更新 更多