初级会员
- 积分
- 112
- 金钱
- 112
- 注册时间
- 2018-6-10
- 在线时间
- 22 小时
|
本帖最后由 野指针异常 于 2019-11-24 13:27 编辑
今天看了原子哥的imxdownload.c的源码,我怎么看都觉得怪怪的,不知道是我理解有错
先贴上一部分源码:
if((argc != 3) && (argc != 4)){
printf("Error Usage! Reference Below:\r\n");
printf("sudo ./%s <-512m or -256m> <source_bin> <sd_device>\r\n", argv[0]);
return -1;
}
/* 查找参数,获取DDR容量 */
for(i = 0; i < argc; i++)
{
char *param = argv;
if(param[0] != '-')
continue;
if(strcmp(param, "-256m") == 0) /* 256MB */
ddrsize = 1;
else if(strcmp(param, "-512m") == 0) /* 512MB */
ddrsize = 0;
}
if(argc == 3) /* 三个参数,也就是不输入DDR容量的话默认为512MB */
ddrsize = 0;
根据打印信息的提示sudo ./%s <-512m or -256m> <source_bin> <sd_device>,可以通过命令的argv[1]选项来选择512M或者256M的DDR来选择不同的头文件信息
例如: sudo ./imxdownload -512m ./led.bin /dev/sdb
但是,从代码的逻辑上看,这样的命令输入,肯定是会报错的
/// 打开bin文件
fp = fopen(argv[1], "rb"); /* 以二进制只读方式打开bin文件 */
if(fp == NULL){
printf("Can't Open file %s\r\n", argv[1]);
return -1;
}
// 构建烧写的shell命令
cmdbuf = malloc(SHELLCMD_LEN);
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);
源码后面的 打开二进制文件和创建shell命令时使用到的设备路径,都写死了是以argv[1]和argv[2]作为参数
如果根据printf提示信息输入命令 sudo ./imxdownload -512m ./led.bin /dev/sdb,
那么此时,打开二进制文件和创建shell命令时使用到的设备路径,分别是argv[2]和argv[3]
报错信息如下:
I.MX6ULL bin download software
Edit by:zuozhongkai
Date:2019/6/10
Version:V1.1
log:V1.0 initial version,just support 512MB DDR3
V1.1 and support 256MB DDR3
Can't Open file -512m
根据上面代码的逻辑分析,如果想正常使用,那么只能是把DDR选项放到最后面,如下:
sudo ./imxdownload ./led.bin /dev/sdb -512m
这样才能顺利通过
或者修改一下源码,也可以修改一下printf的提示信息
|
|