I.MX6之程序下载
0赞从过去的单片机转到处理器+Linux,变化真是挺大的。 没有基础的,单是编译和下载就得折腾一段时间。为了加快入门步伐,我出血花了1千多大洋买了一个开发板来学习。选的是米尔科技的IMX6ULL 开发板。
本以为直接用人家现成的工具下载进去就可以运行,没想到也没那么顺利,我遇到的问题,下载后出现了
Booting from mmc ... reading myd-y6ull-gpmi-weim.dtb ** Unable to read file myd-y6ull-gpmi-weim.dtb **
无法启动的问题。后来经过一番学习找到了问题。通过这个问题我也大概了解了IMX6的下载流程。
原因是在Uboot工程的include/configs/myd_y6ull.h 中的
"setenv fdt_file myd-y6ull-gpmi-weim.dtb; fi; " \
这句话出现了问题,将其改为
"setenv fdt_file myd-y6ull-emmc.dtb; fi; " \
重新编译再下载就可以了。
http://blog.csdn.net/hbk320/article/details/49975841和https://www.cnblogs.com/helloworldtoyou/p/6053195.html
介绍了Mfgtools的下载原理。
我遇到的问题是Uboot寻找dtb文件时指定的文件名不对。Uboot里dtb的文件名应该和
Sending Device Tree file Sending Device Tree file write device tree to sd card write device tree to sd card
写入到emmc中的名字一致(下面两条语句)。注意不是上面寻找路径中的文件名。
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
2018-4-22 重新整理
1) 打开 core-image-base-myd-y6ulx-emmc.vbs
Set wshShell = CreateObject("WScript.shell")
wshShell.run "mfgtool2.exe -c ""linux"" -l ""eMMC"" -s ""mmc=1"" -s ""board=sabreauto"" -s ""lite=l"" -s ""6uluboot=14x14"" -s ""6uldtb=14x14"" -s ""myd_y6ull_rootfs=core-image-base-myd-y6ull14x14.rootfs.tar.bz2"" -s ""myd_y6ul_rootfs=core-image-base-myd-y6ul14x14.rootfs.tar.bz2"""
Set wshShell = Nothing
参数的含义:
-c: 芯片配置文件夹名称 linux
-l: list名称,对应ucl2.xml文件中的LIST标签的name,后面会说明。
-s: 变量名称, cfg.ini以及ucl2.xml中会用到。
cfg.ini
脚本运行, mfgtool工具启动,解读cfg.ini文件,上面的vbs脚本中的参数会覆盖cfg.ini文件中的参数。
[profiles]
chip = Linux
[platform]
board = SabreSD
[LIST]
name = SDCard
[variable]
board = sabresd
mmc = 0
sxuboot=sabresd
sxdtb=sdb
7duboot=sabresd
7ddtb=sdb
6uluboot=14x14ddr3arm2
6uldtb=14x14-ddr3-arm2
6ulldtb=14x14-ddr3-arm2
ldo=
plus=
lite=l
initramfs=fsl-image-mfgtool-initramfs-imx_mfgtools.cpio.gz.u-boot
seek = 1
sxnor=qspi2
7dnor=qspi1
6ulnor=qspi1
nor_part=0
ucl2.xml
根据 vbs和cfg.ini文件中的参数指定的LIST名称,选择正确的操作进行进行烧录。
这个目录里面有很多文件,烧录的时候要用到的uboot,内核,文件系统到RAM中,运行
首先烧录Profiles/Linux/OS Firmware/firmware文件夹的镜像到RAM中运行系统。
系统运行之后烧录Profiles/Linux/OS Firmware/files/中的镜像到emmc中
将两个%号之间的参数使用vbs脚本和cfg.ini文件中的值进行替换
这里:
uboot:寻找file/u-boot-myd-y6ull14x14_emmc.imx , 写入dd if=$FILE of=/dev/mmcblk%mmc%boot0 bs=512 seek=2"
内核:寻找file/ zImage-myd-y6ull, 写入emmc /mnt/mmcblk%mmc%p1/zImage
设备树:寻找file/ zImage-myd-y6ull-14x14-emmc.dtb ,写入emmc /mnt/mmcblk%mmc%p1/myd-y6ul%lite%-emmc.dtb 名字为myd-y6ull-emmc.dtb