为u-boot创建boot.scr

时间:2015-03-30 09:36:34

标签: linux boot u-boot yocto

我使用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 0x120000000bootmbootz,有很多选项,没有任何作用。

2 个答案:

答案 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)