我使用Yocto生成飞思卡尔i.mx6 sabresd的图像。 启动时,要激活hdmi,我必须通过编辑bootargs来修改u-boot。我使用以下命令:
setenv mmcargs 'setenv bootargs console=ttymxc0,115200 root=/dev/mmcblk2p2 rootwait rw video=mxcfb0:dev=hdmi, 1920x1080M@60, if=RGB24'
我可以使用saveenv
在每次启动时都不输入它,但我想自动化它以使部署更容易。所以我做了一个boot.scr。这是boot.txt:
setenv mmcargs 'setenv bootargs console=ttymxc0,115200 root=/dev/mmcblk2p2 rootwait rw video=mxcfb0:dev=hdmi, 1920x1080M@60, if=RGB24'
boot
我使用mkimage -A arm -T script -O linux -d boot.txt boot.scr
创建了boot.scr。但是,在启动时,它会进行循环(boot
使uboot重新加载配置,其中它会读取boot
,因此它会重新开始)。没有boot
......没有启动。我尝试了很多可能性:boot 0x120000000
,bootm
,bootz
,有很多选项,没有任何作用。
答案 0 :(得分:2)
最有可能的情况是,您的启动失败是因为您从未加载可以从中启动的内核。
在大多数情况下,如果 bootcmd 加载了boot.scr,则由boot.scr脚本加载内核(假设您使用的是最近的iMX6内核,还需要设备树) )。然后,您的脚本可以使用此内核启动,或允许 bootcmd 使用加载的内核继续执行其启动序列。加载命令看起来像:
loadfdt=fatload mmc ${mmcdev}:${mmcpart} ${fdt_addr} ${fdt_file}
loaduimage=fatload mmc ${mmcdev}:${mmcpart} ${loadaddr} ${uimage}
启动命令应该类似于:
run loaduimage; run loadfdt; bootm ${loadaddr} - ${fdt_addr}
您可能已经定义了 mmcboot 命令,该命令已经处理了这些命令。
我会从你的脚本中删除“boot”行,而是加载内核和设备树,然后运行bootm(或mmcboot) - 基本上尝试在设置mmcarg后将上面的三行添加到你的脚本中 - 你需要确保正确设置所有引用的变量(即mmcdev,mmpart等)。
答案 1 :(得分:0)
使用shibley的答案,我找到了一种更简单的方法:
run loadimage
run mmcboot
他是对的,mmcboot
负责内核的启动。但我必须先运行loadimage
(而不是loaduimage)
。