初级会员 
  
	- 积分
 - 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的提示信息 
 
 
 
 
 
 |   
 
 
 
 |