OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 17|回复: 0

imxdownload工具烧录SD卡失败的修复

[复制链接]

1

主题

1

帖子

0

精华

新手入门

积分
11
金钱
11
注册时间
2023-6-9
在线时间
1 小时
发表于 4 天前 | 显示全部楼层 |阅读模式
I.MX6ULL 开发板配套的逻辑开发工具 imxdownload 会出现烧录 SD 卡失败的情况,实测下来一般问题出现在当电脑没有插入SD卡,而又不小心执行的烧录工具就会在 /dev/sd* 生成一个指定在 imxdownload 中的 sd* 文件,例如:/dev/sdd。后面在插入 SD 卡的时候由于前面的设备节点已经被占用从而会导致烧录失败。

查看 imxdownload 工具源码后发现:

```c
        // 存在则执行烧写命令
        sprintf(cmdbuf, "sudo dd iflag=dsync oflag=dsync if=load.imx of=%s bs=512 seek=2",argv[2]);
        printf("Download load.imx to %s  ......\r\n", argv[2]);
        /* 执行上面的shell命令 */
        system(cmdbuf);
        free(cmdbuf);

```
执行这条 `sudo dd iflag=dsync oflag=dsync if=load.imx of=%s bs=512 seek=2",argv[2]` 导致生成了一个 /dev/sd* 文件。

因此解决办法有:
1. 直接删除掉对应在 /dev 下面生成的文件,例如 /dev/sdd,然后再插入 SD 卡即可正常烧录,不需要重新启动 ubuntu;
2. 修改 imxdownload 工具,增加安全检查,如果不存在该对应是 SD 卡,则执行失败,避免创建插 /dev/sd* 文件;
```c
    // 检查目标设备文件是否存在
    if (stat(argv[2], &fstat) == 0)
    {
        // 存在则执行烧写命令
        sprintf(cmdbuf, "sudo dd iflag=dsync oflag=dsync if=load.imx of=%s bs=512 seek=2",argv[2]);
        printf("Download load.imx to %s  ......\r\n", argv[2]);
        /* 执行上面的shell命令 */
        system(cmdbuf);
        free(cmdbuf);
    } else {
        printf("Error: Target device %s does not exist!\n", argv[2]);
        free(cmdbuf);
        return -1;
    }



```
这里我上传了修改过的工具,此外增加了bin文件尾缀的检查,防止有同学粗心大意,将 elf 和烧入到 SD 卡导致出现实验现象不一致的问题!!!比如说我。

imxdownload.zip

9.14 KB, 下载次数: 0

修改后的imxdownload工具

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

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

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-21 10:45

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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