3

我使用 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

我创建 boot.scr 使用mkimage -A arm -T script -O linux -d boot.txt boot.scr. 但是,在启动时,它会形成一个循环(bootmake uboot 重新加载配置,它会在其中读取boot并重新开始)。没有boot...没有启动。我尝试了很多可能性:,,,,boot 0x120000000有很多选择bootmbootz没有任何效果。

4

2 回答 2

3

最有可能的是,您的引导失败是因为您从未加载可以从中引导的内核。

在大多数情况下,如果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命令,它已经处理了这些问题。

我会从您的脚本中删除“启动”行,而是加载内核和设备树,然后运行 ​​bootm(或 mmcboot)-基本上尝试在设置 mmcarg 后将上述三行添加到您的脚本中-您需要确保所有引用变量已正确设置(即 mmcdev、mmpart 等)。

于 2015-03-30T15:39:49.623 回答
0

使用 shibley 的答案,我找到了一种更简单的方法:

run loadimage
run mmcboot

他是对的,mmcboot负责内核的引导。但我必须跑loadimage(不是loaduimage)之前。

于 2015-03-31T07:16:39.033 回答