搜索
bottom↓
回复: 16

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

[复制链接]

出0入8汤圆

发表于 2022-5-17 16:10:22 来自手机 | 显示全部楼层 |阅读模式
ESP32有mpython的固件bin文件,自己写了main.py文件想烧录的时候一起烧录进ESP32里。
网上找了一圈都是先烧录mpython固件,然后串口上传main. py;这样量产太麻烦了,难道就没有好的方法了吗?

阿莫论坛20周年了!感谢大家的支持与爱护!!

如果想吃一顿饺子,就得从冰箱里取出肉,剁馅儿,倒面粉、揉面、醒面,擀成皮儿,下锅……
一整个繁琐流程,就是为了出锅时那一嘴滚烫流油的热饺子。

如果这个过程,禁不住饿,零食下肚了,饺子出锅时也就不香了……《非诚勿扰3》

出0入89汤圆

发表于 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

出0入224汤圆

发表于 2022-5-17 17:42:33 | 显示全部楼层
楼主,有个问题,特别是eps32,这个产品上用的话,怎么加密?特别还用的python,直接就能得到你的源码

出0入89汤圆

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

你没用mpy吗?

出0入224汤圆

发表于 2022-5-17 17:49:11 | 显示全部楼层
youkebing 发表于 2022-5-17 17:43
你没用mpy吗?
(引用自4楼)

mpy 据说可以反编译?

出0入89汤圆

发表于 2022-5-17 17:53:42 | 显示全部楼层
yyts 发表于 2022-5-17 17:49
mpy 据说可以反编译?
(引用自5楼)

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

出0入8汤圆

 楼主| 发表于 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楼)

谢谢了



出0入8汤圆

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

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

出15入178汤圆

发表于 2022-5-17 23:53:09 | 显示全部楼层
ESP官方基于的FAT,你将可以将源文件打包成文件系统镜像

出0入224汤圆

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

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

出0入89汤圆

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

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

出0入8汤圆

 楼主| 发表于 2022-5-19 10:22:51 | 显示全部楼层
第一步:

  1. >>> from esp32 import Partition
  2. >>> r=Partition.find(Partition.TYPE_DATA)
  3. >>> print(r)
  4. [<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>]
  5. >>>
复制代码


<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地址

第四步:上电运行

  1. ets Jun  8 2016 00:22:57

  2. rst:0x1 (POWERON_RESET),boot:0x13 (SPI_FAST_FLASH_BOOT)
  3. ets Jun  8 2016 00:22:57

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

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


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

出0入89汤圆

发表于 2022-5-19 11:03:47 | 显示全部楼层
本帖最后由 youkebing 于 2022-5-19 11:08 编辑
lindabell 发表于 2022-5-19 10:22
第一步:


(引用自12楼)

用fatfs 做镜像试试

出0入89汤圆

发表于 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的镜像,烧上去应该就好了

出0入8汤圆

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

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

出0入8汤圆

 楼主| 发表于 2022-5-19 16:11:03 | 显示全部楼层
终于可以了完整过程如下:

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

  1. 获取ESP32 mpython文件系统的信息,在ESP32的命令行输入以下代码
  2. >>> from esp32 import Partition
  3. >>> r=Partition.find(Partition.TYPE_DATA)
  4. >>> print(r)
  5. [<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>]
  6. >>>

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


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

  1. import os
  2. """
  3. 获取ESP32 mpython文件系统的信息,在ESP32的命令行输入以下代码
  4. >>> from esp32 import Partition
  5. >>> r=Partition.find(Partition.TYPE_DATA)
  6. >>> print(r)
  7. [<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>]
  8. >>>

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

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


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


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

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

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x

出0入89汤圆

发表于 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  做成镜像,在烧录进去,这样理论上更安全。
我看的不全,方便的话大家讨论一下啊
回帖提示: 反政府言论将被立即封锁ID 在按“提交”前,请自问一下:我这样表达会给举报吗,会给自己惹麻烦吗? 另外:尽量不要使用Mark、顶等没有意义的回复。不得大量使用大字体和彩色字。【本论坛不允许直接上传手机拍摄图片,浪费大家下载带宽和论坛服务器空间,请压缩后(图片小于1兆)才上传。压缩方法可以在微信里面发给自己(不要勾选“原图),然后下载,就能得到压缩后的图片】。另外,手机版只能上传图片,要上传附件需要切换到电脑版(不需要使用电脑,手机上切换到电脑版就行,页面底部)。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

手机版|Archiver|amobbs.com 阿莫电子技术论坛 ( 粤ICP备2022115958号, 版权所有:东莞阿莫电子贸易商行 创办于2004年 (公安交互式论坛备案:44190002001997 ) )

GMT+8, 2024-3-28 19:21

© Since 2004 www.amobbs.com, 原www.ourdev.cn, 原www.ouravr.com

快速回复 返回顶部 返回列表