数码之家

 找回密码
 立即注册
搜索
查看: 943|回复: 12

[Arduino] 在Arduino UNO的程序里面加入备份功能

[复制链接]
发表于 2024-5-18 01:35:33 | 显示全部楼层 |阅读模式
有的时候,可能需要从Arduino开发板上面把二进制程序备份出来,使用编程器可以做到,但是比较麻烦。在编程的时候加入这些代码,就可以在启动的时候自动把里面的程序输出到串口,方便以后备份程序(不是用来读取以前的程序内容的,如果之前下载的程序里面没有这个,那么仍然要用编程器读取):

  1. #include <avr/pgmspace.h>
  2. void setup() {
  3.   Serial.begin(115200);
  4.   for(unsigned int i=0;i<32768;i++){
  5.     Serial.write(pgm_read_byte(i));
  6.   }
  7. }

  8. void loop() {

  9. }
复制代码
这是一个简单的备份程序,没有其他内容,使用pgmspace.h里面的pgm_read_byte()把程序区的内容读取出来,Arduino UNO使用ATmega328P,程序区是32768字节。需要备份里面程序的时候,只需要打开串口助手,把串口接收的数据保存到文件。
备份内容和编译出来的bin文件比较(这里开始有不一样的内容,前面都是一样的):

备份出来内容:


编译出来的bin文件:


Arduino IDE显示编译后大小是1462字节,转换成十六进制是5B6,编译出的bin文件从偏移量5B6以后都是FF(空白的),而备份出的内容在5B6以后还有其他内容,应该是以前的程序内容,没有被覆盖掉。


目前还没测试,将备份出来的二进制文件重新下载到单片机,是否能正常工作
如果不想每次启动都往串口输出程序内容,也可以把这个代码放到其他位置运行,比如按一个按钮后开始备份

本帖子中包含更多资源

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

x

打赏

参与人数 3家元 +140 收起 理由
vip2128 + 20 以資鼓勵
家睦 + 90
不长叶子的树 + 30

查看全部打赏

发表于 2024-5-18 08:54:16 | 显示全部楼层
有点儿意思,运行的时候竟然能把自己的存储给读出来,这个如果bootload有后门的话,可以很轻松搞出来了,研究一下植入个后门
回复 支持 反对

使用道具 举报

 楼主| 发表于 2024-5-18 10:15:47 | 显示全部楼层
又对比了一下内容,发现bootloader的内容是无法读取的:备份的内容最后512字节全是FF,而bin文件最后512字节是bootloader内容

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

发表于 2024-5-18 13:12:43 | 显示全部楼层
思路清奇,不错
回复 支持 反对

使用道具 举报

发表于 2024-5-18 20:18:43 | 显示全部楼层
思路清奇,可在loop里加个监听串口,有关键字如backup回车输入 就执行backup函数
回复 支持 反对

使用道具 举报

发表于 2024-5-18 22:09:36 | 显示全部楼层
usbasp直接读
回复 支持 反对

使用道具 举报

发表于 2024-5-19 08:14:11 | 显示全部楼层
“我是多大的” 应该找到在哪
回复 支持 反对

使用道具 举报

发表于 2024-5-21 11:12:32 | 显示全部楼层
啊?这个我是真没想到
回复 支持 反对

使用道具 举报

发表于 2024-5-21 22:42:18 | 显示全部楼层
能插入这段代码的 ino 程序,你也可以 Ctrl+Alt+S;

想要读出的三方固件,不一定有源码,插代码更没思路。

所以我选择直接自制 Bootloader
回复 支持 反对

使用道具 举报

发表于 2024-5-24 22:59:18 | 显示全部楼层

不知道Arduino下载程序后,是否会自动设置熔丝位,或者可以手动设置熔丝位,让只会Arduino的用USBASP有点难为他们了
回复 支持 反对

使用道具 举报

发表于 2024-5-24 23:47:55 | 显示全部楼层
t3486784401 发表于 2024-5-21 22:42
能插入这段代码的 ino 程序,你也可以 Ctrl+Alt+S;

想要读出的三方固件,不一定有源码,插代码更没思路。 ...

导出 有bin elf map uf2,批量烧录bin ,uf2直接拉进树莓派盘符烧录
回复 支持 反对

使用道具 举报

发表于 2024-5-25 06:47:10 | 显示全部楼层
自己把自己的底裤扒了
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

APP|手机版|小黑屋|关于我们|联系我们|法律条款|技术知识分享平台

闽公网安备35020502000485号

闽ICP备2021002735号-2

GMT+8, 2024-7-27 10:10 , Processed in 0.124801 second(s), 12 queries , Redis On.

Powered by Discuz!

© 2006-2023 smzj.net

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