OpenEdv-开源电子网

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

一种对裸机烧写器改进的方法_imxdownload

[复制链接]

1

主题

5

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2019-8-30
在线时间
14 小时
发表于 2019-11-22 11:52:55 | 显示全部楼层 |阅读模式
不知道其他人是否会如此,我在学习裸机程序烧录时经常会出现这样一种情况:老是忘记把sd卡怼上虚拟机就执行了./imxdownload xxx.bin /dev/sdx

执行的结果当然是烧录不成功,且当把sd卡重新怼上虚拟机是会发现sd卡无法被系统识别,执行命令:sudo fdisk -l

这里是识别到的情况,最下面会出现/dev/sdb1,大小是8G等字样。如果系统识别失败,最后两行自然是不会出现的。

我这里默认识别到卡是/dev/sdb,继续说没插卡就执行imxdownload,如果没插卡就执行的话会发现执行时会打印是成功的,当然实际上是失败的。失败后插卡无法正确识别出来,需要重启系统,这很让我头疼,因为我很容易犯错误

最后一次忘记插卡执行时我准备钻牛角了(ps:最后一次:指的是我最后成功钻出来了,不成功也就没有这个帖子了)
这里先说说钻牛角过程:
1,当我没插卡执行imxdownload xxx.bin /dev/sdx时,程序会在/dev下生成一个sdx的文件,各位可以试一下,这个过程可以在imxdownload.c里看到(目录:5、开发工具\2、Ubuntu下裸机烧写软件\imxdownload.c)

如图,初步怀疑问题时在dd命令执行过程,当/dev目录下没有sdx文件又执行了imxdownload 并赋值/dev/sdx时,dd命令执行会出现问题导致在/dev下生成/dev/sdx
2.上一步已经大概可能也许找到了问题(我不确定,大概就是这个问题吧),按照这个思路解决很简单,只要在执行dd前先判断/dev/sdx是否存在就行,不存在就直接打印错误退出程序
改代码:把上一张图的改成如下就行,其实就是执行前先调用access()判断/dev/sdx是否存在,不存在就不执行dd命令同时打印报错,当然别忘了把头文件"unistd.h"加上去
  1. #include "unistd.h"
复制代码
  1.         if((access(argv[2]), F_OK) == 0){
  2.                 /* 构建烧写的shell命令 */
  3.                 cmdbuf = malloc(SHELLCMD_LEN);
  4.                 sprintf(cmdbuf, "sudo dd iflag=dsync oflag=dsync if=load.imx of=%s bs=512 seek=2",argv[2]);       
  5.                 printf("Download load.imx to %s  ......\r\n", argv[2]);
  6.                
  7.                 /* 执行上面的shell命令 */
  8.                 system(cmdbuf);
  9.                 free(cmdbuf);
  10.         }else{
  11.                 printf("%s is not found\r\n", argv[2]);
  12.         }
复制代码

改完后把文件拉进linux里用gcc编译一下:gcc imxdownload.c -o imxodwnload
然后就生成香喷喷的新的程序了
3.执行效果

最后可以看到如果没有/dev/sdc,程序执行就直接打印退出
嗯,真香。。。。。

附上改后的imxdownload.c和编译后的执行文件

imxdowload.zip (7.95 KB, 下载次数: 151)
正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

26

主题

1538

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6379
金钱
6379
注册时间
2015-8-25
在线时间
1004 小时
发表于 2019-11-22 12:45:26 | 显示全部楼层
challenger 发表于 2019-11-22 12:27
不错,没找到sd card,就直接打印提示。就是sd  card经常插拔太麻烦,如果不用sd card,用其它方式直接烧录 ...

想直接运行裸机实验?
简单:
再uboot中用loadb、loadx、loady这几个指令通过终端下载bin文件到87800000地址处,然后直接用go 87800000命令即可直接运行裸机程序
He who fights with monsters should look to it that he himself does not become a monster, when you gaze long into the abyss, the abyss also gazes into you.
过于执着就会陷入其中,迷失自己,困住自己。
回复 支持 1 反对 0

使用道具 举报

1

主题

5

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2019-8-30
在线时间
14 小时
 楼主| 发表于 2019-11-22 12:03:53 | 显示全部楼层
不知道为啥图上不了,也不知道怎么二次编辑,大概理解看吧
回复 支持 反对

使用道具 举报

95

主题

549

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
3293
金钱
3293
注册时间
2016-1-7
在线时间
541 小时
发表于 2019-11-22 12:27:11 | 显示全部楼层
不错,没找到sd card,就直接打印提示。就是sd  card经常插拔太麻烦,如果不用sd card,用其它方式直接烧录到里面,那该多好。
回复 支持 反对

使用道具 举报

6

主题

1127

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1656
金钱
1656
注册时间
2019-8-15
在线时间
102 小时
发表于 2019-11-22 12:32:03 | 显示全部楼层
帮顶        
成功没有捷径
回复 支持 反对

使用道具 举报

0

主题

3

帖子

0

精华

初级会员

Rank: 2

积分
76
金钱
76
注册时间
2019-11-16
在线时间
12 小时
发表于 2019-11-25 05:57:23 | 显示全部楼层
想直接运行QT程序应该咋办呢?
回复 支持 反对

使用道具 举报

26

主题

1538

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6379
金钱
6379
注册时间
2015-8-25
在线时间
1004 小时
发表于 2019-11-25 12:56:02 | 显示全部楼层
chaohmlinux 发表于 2019-11-25 05:57
想直接运行QT程序应该咋办呢?

教程有讲将某个应用程序做成开机启动,这个应该可以运行你的QT程序
另外我有试过在原子的apha开发板上进入linux镜像找到板载的QT程序,比如找到QClock(那个很炫酷的车旁边一个表的程序),直接在终端运行它也可以。不过这个不适合解决你的问题
He who fights with monsters should look to it that he himself does not become a monster, when you gaze long into the abyss, the abyss also gazes into you.
过于执着就会陷入其中,迷失自己,困住自己。
回复 支持 反对

使用道具 举报

0

主题

3

帖子

0

精华

初级会员

Rank: 2

积分
76
金钱
76
注册时间
2019-11-16
在线时间
12 小时
发表于 2019-11-25 15:00:00 | 显示全部楼层
szczyb1314 发表于 2019-11-25 12:56
教程有讲将某个应用程序做成开机启动,这个应该可以运行你的QT程序
另外我有试过在原子的apha开发板上进 ...

对QT感兴趣就先研究这个了,
我看到/etc/rc.local下面的
  1. /opt/qt5.5.1/apps/QDesktop >/dev/null 2>&1 &
复制代码

在bash里头这么输其他的界面也能运行,不过左半边会被桌面刷新掉。。
自己的QT应该也可以这么运行,就是现在就uboot里头可以nfs,tftp,进linux里就不知道咋整了,ssh好像也没开,拷到tf卡里应该可以,就是感觉有点麻烦,不知道文件咋传过去了
希望左神加油早日做出教程吧,哈哈
回复 支持 反对

使用道具 举报

36

主题

245

帖子

0

精华

高级会员

Rank: 4

积分
771
金钱
771
注册时间
2016-9-10
在线时间
305 小时
发表于 2019-11-25 16:14:14 | 显示全部楼层
szczyb1314 发表于 2019-11-22 12:45
想直接运行裸机实验?
简单:
再uboot中用loadb、loadx、loady这几个指令通过终端下载bin文件到8780000 ...

文档有这种启动方式的详细介绍吗,每次都从SD卡启动操作比较麻烦
回复 支持 反对

使用道具 举报

26

主题

1538

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6379
金钱
6379
注册时间
2015-8-25
在线时间
1004 小时
发表于 2019-11-25 17:18:10 | 显示全部楼层
1491430114 发表于 2019-11-25 16:14
文档有这种启动方式的详细介绍吗,每次都从SD卡启动操作比较麻烦

原子的文档中暂时没有,不过原子的开发板出厂程序的uboot中是支持loadb、loadx、loady命令的,具体用法可以help loadb去查看,最方便就是直接百度,网上一大堆用法
He who fights with monsters should look to it that he himself does not become a monster, when you gaze long into the abyss, the abyss also gazes into you.
过于执着就会陷入其中,迷失自己,困住自己。
回复 支持 反对

使用道具 举报

36

主题

245

帖子

0

精华

高级会员

Rank: 4

积分
771
金钱
771
注册时间
2016-9-10
在线时间
305 小时
发表于 2019-11-26 11:52:28 | 显示全部楼层
szczyb1314 发表于 2019-11-25 17:18
原子的文档中暂时没有,不过原子的开发板出厂程序的uboot中是支持loadb、loadx、loady命令的,具体用法可 ...

学会了,用SecureCRT操作的,真挺简单,不知道原子的教程为啥一开始不教,比从内存卡启动方便多了
回复 支持 反对

使用道具 举报

26

主题

1538

帖子

0

精华

论坛元老

Rank: 8Rank: 8

积分
6379
金钱
6379
注册时间
2015-8-25
在线时间
1004 小时
发表于 2019-11-26 13:06:38 | 显示全部楼层
1491430114 发表于 2019-11-26 11:52
学会了,用SecureCRT操作的,真挺简单,不知道原子的教程为啥一开始不教,比从内存卡启动方便多了

原子得教程是一步一步叫你如何从STM32单片机转linux的,先教你裸机,裸机要烧写最好就是SD卡,uboot是后面得教程了
He who fights with monsters should look to it that he himself does not become a monster, when you gaze long into the abyss, the abyss also gazes into you.
过于执着就会陷入其中,迷失自己,困住自己。
回复 支持 反对

使用道具 举报

9

主题

890

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
2390
金钱
2390
注册时间
2019-9-25
在线时间
397 小时
发表于 2019-11-27 20:45:33 | 显示全部楼层
楼主很强悍
回复 支持 反对

使用道具 举报

0

主题

4

帖子

0

精华

新手上路

积分
46
金钱
46
注册时间
2015-2-27
在线时间
5 小时
发表于 2022-1-31 00:08:40 | 显示全部楼层
imxdownload 头文件中只有256MB和512MB的ddr设置,请问有没有1G或者2G的ddr的设置呢?
回复 支持 反对

使用道具 举报

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

本版积分规则



关闭

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

正点原子公众号

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

GMT+8, 2024-11-25 01:45

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

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