新手入门
- 积分
- 11
- 金钱
- 11
- 注册时间
- 2023-6-9
- 在线时间
- 1 小时
|
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 卡导致出现实验现象不一致的问题!!!比如说我。
|
|