lindabell 发表于 2022-5-17 16:10:22

ESP32 mpython固件和py文件怎么合并烧录?

ESP32有mpython的固件bin文件,自己写了main.py文件想烧录的时候一起烧录进ESP32里。
网上找了一圈都是先烧录mpython固件,然后串口上传main. py;这样量产太麻烦了,难道就没有好的方法了吗?

youkebing 发表于 2022-5-17 17:39:02

本帖最后由 youkebing 于 2022-5-17 17:42 编辑

找到一个说明,你试试
https://blog.csdn.net/rbin_yao/article/details/105225145
https://blog.csdn.net/weixin_44821644/article/details/109480902

yyts 发表于 2022-5-17 17:42:33

楼主,有个问题,特别是eps32,这个产品上用的话,怎么加密?特别还用的python,直接就能得到你的源码

youkebing 发表于 2022-5-17 17:43:12

yyts 发表于 2022-5-17 17:42
楼主,有个问题,特别是eps32,这个产品上用的话,怎么加密?特别还用的python,直接就能得到你的源码 ...
(引用自3楼)

你没用mpy吗?

yyts 发表于 2022-5-17 17:49:11

youkebing 发表于 2022-5-17 17:43
你没用mpy吗?
(引用自4楼)

mpy 据说可以反编译?

youkebing 发表于 2022-5-17 17:53:42

yyts 发表于 2022-5-17 17:49
mpy 据说可以反编译?
(引用自5楼)

这个不太清楚,比直接py放里面要好一些,完全防止破解其实很难的,我一般上面放一个授权文件,授权文件和编号绑定,通过这个编号和平台通讯,其他人没有平台,也间接的防破解了

lindabell 发表于 2022-5-17 20:15:49

youkebing 发表于 2022-5-17 17:39
找到一个说明,你试试
https://blog.csdn.net/rbin_yao/article/details/105225145
https://blog.csdn.ne ...
(引用自2楼)

谢谢了



lindabell 发表于 2022-5-17 20:16:40

yyts 发表于 2022-5-17 17:42
楼主,有个问题,特别是eps32,这个产品上用的话,怎么加密?特别还用的python,直接就能得到你的源码 ...
(引用自3楼)

我就没有考虑加密的问题,东西很简单,而且非常细分行业

2nd 发表于 2022-5-17 23:53:09

ESP官方基于的FAT,你将可以将源文件打包成文件系统镜像

yyts 发表于 2022-5-18 09:48:50

youkebing 发表于 2022-5-17 17:53
这个不太清楚,比直接py放里面要好一些,完全防止破解其实很难的,我一般上面放一个授权文件,授权文件和 ...
(引用自6楼)

嗯,我之前是自己编译micropython固件,加入点自己的代码来验证,就是每次更新官方的固件后,还要自己改一次,比较麻烦。

youkebing 发表于 2022-5-18 16:41:02

yyts 发表于 2022-5-18 09:48
嗯,我之前是自己编译micropython固件,加入点自己的代码来验证,就是每次更新官方的固件后,还要自己改 ...
(引用自10楼)

这样其实也蛮好,我一般是开发的时候拉一下micropython的代码,在上面改后,基本就不更新了。只有新产品才会拉代码来编译

lindabell 发表于 2022-5-19 10:22:51

第一步:

>>> from esp32 import Partition
>>> r=Partition.find(Partition.TYPE_DATA)
>>> print(r)
[<Partition type=1, subtype=2, address=36864, size=24576, label=nvs, encrypted=0>, <Partition type=1, subtype=1, address=61440, size=4096, label=phy_init, encrypted=0>, <Partition type=1, subtype=129, address=2097152, size=2097152, label=vfs, encrypted=0>]
>>>

<Partition type=1, subtype=129, address=2097152, size=2097152, label=vfs, encrypted=0>
这是说明文件系统胡地址和大小

第二步:
PS C:\Users\Administrator\Desktop\ESP32> .\spiffsgen.py 0x200000 spiffs_dir spiffs.bin
得到spiffs.bin

第三步:
spiffs.bin烧录到0x200000地址

第四步:上电运行

ets Jun8 2016 00:22:57

rst:0x1 (POWERON_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
ets Jun8 2016 00:22:57

rst:0x10 (RTCWDT_RTC_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
configsip: 0, SPIWP:0xee
clk_drv:0x00,q_drv:0x00,d_drv:0x00,cs0_drv:0x00,hd_drv:0x00,wp_drv:0x00
mode:DIO, clock div:2
load:0x3fff0030,len:4540
ho 0 tail 12 room 4
load:0x40078000,len:12344
ho 0 tail 12 room 4
load:0x40080400,len:4124
entry 0x40080680
The filesystem appears to be corrupted. If you had important data there, you
may want to make a flash snapshot to try to recover it. Otherwise, perform
factory reprogramming of MicroPython firmware (completely erase flash, followed
by firmware programming).

The filesystem appears to be corrupted. If you had important data there, you
may want to make a flash snapshot to try to recover it. Otherwise, perform
factory reprogramming of MicroPython firmware (completely erase flash, followed
by firmware programming).

提示文件系统亦错误,不知道哪里不对?

youkebing 发表于 2022-5-19 11:03:47

本帖最后由 youkebing 于 2022-5-19 11:08 编辑

lindabell 发表于 2022-5-19 10:22
第一步:


(引用自12楼)
用fatfs 做镜像试试

youkebing 发表于 2022-5-19 12:36:19

本帖最后由 youkebing 于 2022-5-19 12:37 编辑

lindabell 发表于 2022-5-19 10:22
第一步:


(引用自12楼)

我找了一下,
你那个subtype是129 就是0x81
在文件esp_partition.h中,你能看到
大约是78行的样子
    ESP_PARTITION_SUBTYPE_DATA_ESPHTTPD = 0x80,                               //!< ESPHTTPD partition
    ESP_PARTITION_SUBTYPE_DATA_FAT = 0x81,                                    //!< FAT partition
    ESP_PARTITION_SUBTYPE_DATA_SPIFFS = 0x82,                                 //!< SPIFFS partition

这样看,应该是fat分区,做个fat的镜像,烧上去应该就好了

lindabell 发表于 2022-5-19 14:36:32

youkebing 发表于 2022-5-19 12:36
我找了一下,
你那个subtype是129 就是0x81
在文件esp_partition.h中,你能看到
(引用自14楼)

谢谢了,正在尝试做fat镜像

lindabell 发表于 2022-5-19 16:11:03

终于可以了完整过程如下:

第一步:找到ESP32 mpython固件的文件系统信息

获取ESP32 mpython文件系统的信息,在ESP32的命令行输入以下代码
>>> from esp32 import Partition
>>> r=Partition.find(Partition.TYPE_DATA)
>>> print(r)
[<Partition type=1, subtype=2, address=36864, size=24576, label=nvs, encrypted=0>, <Partition type=1, subtype=1, address=61440, size=4096, label=phy_init, encrypted=0>, <Partition type=1, subtype=129, address=2097152, size=2097152, label=vfs, encrypted=0>]
>>>

其中<Partition type=1, subtype=129, address=2097152, size=2097152, label=vfs, encrypted=0>就是文件系统的信息
subtype=129 代表的是fat文件系统
address=2097152 代表fat文件系统存储的开始地址
size=2097152 代表fat文件系统的大小
label=vfs 代表该分区是文件系统

第二步:修改package_mpy_into_fat.py中相关参数

import os
"""
获取ESP32 mpython文件系统的信息,在ESP32的命令行输入以下代码
>>> from esp32 import Partition
>>> r=Partition.find(Partition.TYPE_DATA)
>>> print(r)
[<Partition type=1, subtype=2, address=36864, size=24576, label=nvs, encrypted=0>, <Partition type=1, subtype=1, address=61440, size=4096, label=phy_init, encrypted=0>, <Partition type=1, subtype=129, address=2097152, size=2097152, label=vfs, encrypted=0>]
>>>

其中<Partition type=1, subtype=129, address=2097152, size=2097152, label=vfs, encrypted=0>就是文件系统的信息
subtype=129 代表的是fat文件系统
address=2097152 代表fat文件系统存储的开始地址
size=2097152 代表fat文件系统的大小
label=vfs 代表该分区是文件系统

"""
package_dir = "mpy"             #打包胡文件夹
fat_start_addr = "0x200000"   #文件系统烧录地址
fat_size = "0x200000"         #文件系统的大小


if __name__ == "__main__":
    # cmd like :.\mkfatfs.exe -c mpy -s 0x200000 fat_img(addr_0x200000_size_0x200000).bin
    cmd_str=".\mkfatfs.exe -c " + package_dir + " " + "-s " + fat_size + " " + "fat_img("+"addr_"+fat_start_addr+"_size_"+fat_size+")"+".bin"
    os.popen(cmd_str)

第三步:运行package_mpy_into_fat.py生成fat镜像文件

第四步:使用下载工具先擦除后,再烧录mpython固件和fat文件系统

youkebing 发表于 2023-7-11 13:11:55

lindabell 发表于 2022-5-19 16:11
终于可以了完整过程如下:

第一步:找到ESP32 mpython固件的文件系统信息
(引用自16楼)

我刚好最近也在做相同的事情,
默认micropython 用littleFS mount,如果不成功,就尝试用fat,我们刚烧写的时候,文件系统的所在分区全部是ff,这个时候,用littleFS mount 会成功(当然如果用fat mount也会成功)
一般串口方法写文件进去,会用littleFS保存系统,如果用fat的镜像烧写,当然回事fat,普通操作都没有问题,但是littleFS的文件系统支持断电保护,fat就要差很多了
从做产品上来说lttleFS 更好,所以我建议最好改一下
我是用mklittlefs做成镜像,在烧录进去,这样理论上更安全。
我看的不全,方便的话大家讨论一下啊
页: [1]
查看完整版本: ESP32 mpython固件和py文件怎么合并烧录?