根据正点原子文档搭建驱动开发zynqMP镜像,fsbl和bl31阶段执行成功,但是u-boot无法启动。
问题现象:U-Boot无法启动

该阶段需要的启动文件有:petalinux下利用命令:petalinux-package --boot --fsbl --u-boot --dtb no --force 编译生成的BOOT.BIN、boot.scr、system.bit以及手动编译的Linux内核生成的Image、system-top.dtb。
其中boot.scr文件为启动脚本文件,需要增加如下内容:

Linux下system-top.dtb文件需要引入petalinux下的设备树文件,具体可参看正点原子文档,然后编译生成Image和system-top.dtb文件。


接下来按照文档内容,将BOOT.BIN、boot.scr、system.bit、Image以及system-top.dtb(system-top.dtb需要改名为system.dtb)放入SD卡FAT分区,并且将根文件系统也解压到SD卡EXT4分区,最后尝试启动Linux,发现fsbl和bl31阶段执行成功,但是开发板亮红灯并且u-boot无法启动。
排查原因发现使用命令 petalinux-package --boot --fsbl --u-boot --dtb no --force 打包文件生成BOOT.BIN情况如下:

通过输出可以看出BOOT.BIN文件由zynqmp_fsbl.elf、pmufw.elf、bl31.elf、u-boot.elf四个文件组成,而正常打包命令输出如下:

对比两者之间差异,发现:后面的打包命令还包含了top.bit以及system.dtb文件。system.dtb文件已经放入SD卡FAT分区,并且将打包命令换成 petalinux-package --boot --fsbl --u-boot --fpga --dtb no --force,可以看到top.bit文件也打包到BOOT.BIN。

最后将文件放入SD卡验证,发现开发板没有亮红灯,但是U-Boot任然没有运行。
解决办法:经过上述验证,我想到的解决办法是,将Linux编译生成的system-top.dtb(system-top.dtb需要改名为system.dtb)文件复制到petalinux工程image/linux目录下,最后利用petalinux-package --boot --fsbl --u-boot --fpga --force命令将Linux编译生成的system.dtb文件打包到BOOT.BIN中,然后将BOOT.BIN,boot.scr、system.bit、Image文件放入SD卡FAT分区,启动开发板,发现u-boot和Linux内核都已经正常启动。


更多推荐
所有评论(0)