U-Boot 2013.07 (Nov 21 2013 - 18:12:40)
Memory: ECC disabled
DRAM: 1 GiB
MMC: zynq_sdhci: 0
SF: Detected N25Q128A with page size 64 KiB, total 16 MiB
In: serial
Out: serial
Err: serial
Net: Gem.e000b000
Hit any key to stop autoboot: 0
SF: Detected N25Q128A with page size 64 KiB, total 16 MiB
SF: 11010048 bytes @ 0x520000 Read: OK
Wrong Image Format for bootm command
ERROR: can't get kernel image!
U-Boot-PetaLinux>
然后我会输入run sdboot
,它会从 SD 卡启动,我在其中放置了用于 SD 启动的图像。
它表明默认情况下 UBoot 是从闪存启动的。我需要在 uboot 中进行哪些更改,以便默认启动设备是 SD 卡而不是闪存?
我必须为此设置任何环境变量吗?
答案1
要了解有关 u-boot 选项的更多信息,我建议您这样做
U-Boot-PetaLinux> printenv
并查看中提到的特定环境变量的影响UBootEnv变量。也许你会做出的改变是
U-Boot-PetaLinux> setenv bootcmd 'run sdboot' ; saveenv ; reboot
变量 bootcmd 和 bootargs 是最需要理解的。没有什么是真正困难的,信息就在那里为你提供。
答案2
如果您的系统已经设置好,您可以使用@Joe Kul 描述的方法。实际上,您可以使用所需的引导选项设置环境变量,并将 u-boot 配置文件保存到您的介质中。
如果您仍在调试安装,您可能需要在源代码中设置环境变量,然后重新编译。当你弄清楚你的 u-boot 命令之后。
要编辑的文件取决于您使用的板。我使用 mx23evk,所以我编辑该/include/configs/mx23evk.h
文件。看一下/* Extra Environments */
部分。
我删除了该部分中的所有内容并用此替换它。
/* Extra Environments */
#define CONFIG_EXTRA_ENV_SETTINGS \
"boot_mfg=echo Running mfgtools...; " \
"ext2load mmc 0:6 0x40600000 /boot/uboot/mfgupdat.zIm; " \
"ext2load mmc 0:6 0x40a00000 /boot/uboot/mfgupdat.dtb; " \
"bootz 40600000 - 40a00000;\0" \
"boot_pro=echo Running Production...; " \
"ext2load mmc 0:6 0x40600000 /boot/uboot/pro_1.zIm; " \
"ext2load mmc 0:6 0x40a00000 /boot/uboot/pro_1.dtb; " \
"bootz 40600000 - 40a00000;\0" \
"boot_rescue=echo Running Rescue...; " \
"bootz 40600000 - 40a00000;\0" \
在 u-boot 命令行中,我可以简单地在 3 个预定义的启动设置之间进行选择:run boot_mfg
或者run boot_pro
...
这使我能够快速启动到 3 种不同的配置。完成调试后,只需将其设置为默认值即可。
如果我没记错的话,CONFIG_BOOTDELAY
和CONFIG_BOOTCOMMAND
变量与默认启动有关。
因此,首先我将启动,因为您已经弄清楚哪些命令允许您使用所需的内核和根在分区中的媒体上启动。
ext2load mmc 0:6 0x40600000 /boot/uboot/mfgupdat.zIm
然后,我将通过运行您在源代码中设置的变量来更改源代码以反映此命令,而不是自动启动。
run my_boot_variable
如果您对此感到满意,则再次更改源代码以使用该变量自动启动,有或没有定时延迟。您可以添加多个引导变量并通过按键选择不同的变量。
我已经几个月没有处理过这个问题了,所以我可能会遗漏重要的信息,但这应该会让你找到正确的方向。