通过 SD 卡,ZYNQ 使用 eMMC 引导 PetaLinux 2018.3

准备

ZYNQ实验板带有SD卡(SD0)和eMMC芯片(SD1),计划从SD卡启动系统,将镜像文件加载到eMMC,并最终从QSPI和eMMC引导系统。

需要准备2份PetaLinux 2018.3版本的系统文件BOOT.BIN和image.ub:一份用于从SD卡启动,放在SD卡根目录;一份用于从eMMC引导的系统,放在SD卡的image目录里。SD卡格式化为FAT32。

构建

为了访问ZYNQ实验板的SD卡和eMMC,需要在构建硬件描述文件中选择SD0和SD1设备,另外需要启用芯片检测端口(CD)并将其连接到EMIO,其逻辑为0。当然,加入以太网等设备是个很好的设想。构建的硬件还要满足PetaLinux的要求,比如TTC0设备等。

通过 SD 卡,ZYNQ 使用 eMMC 引导 PetaLinux 2018.3_第1张图片

将硬件描述文件导入PetaLinux工程进行配置。

配置

2个系统分别配置:

petalinux-config

Subsystem AUTO Hardware Settings ---> SD/SDIO Settings ---> Primary SD/SDIO

从SD卡启动的系统选择:

Primary SD/SDIO (psu_sd_0)

从eMMC引导的系统选择:

Primary SD/SDIO (psu_sd_1)

修改

对于从eMMC引导的系统,即便选择了Primary SD/SDIO (psu_sd_1),仍然不能完全启动,似乎这是PetaLinux工具的一个bug,需要从文件/project-spec/meta-plnx-generated/recipes-bsp/u-boot/configs/platform-auto.h里,复制U-boot环境参数定义部分内容:

define CONFIG_EXTRA_ENV_SETTINGS

到文件/project-spec/meta-user/recipes-bsp/u-boot/files/platform-top.h中,并将后者全部 "mmcinfo" 修改为 "mmc dev ${sdbootdev}" ,共5处

编译

对2个系统各自编译,生成image.ub:

petalinux-build

进入工程的image/linux文件夹,生成BOOT.BIN:

petalinux-package --boot --fsbl zynq_fsbl.elf --fpga system.bit --u-boot –force

将2个文件分别复制到SD卡根目录和image文件夹

分区

从SD卡启动,对eMMC进行分区,分成2个:128M的FAT32格式,其余为ext4格式

fdisk /dev/mmcblk1

对分区格式化

mkdosfs -F 32 /dev/mmcblk1p1
mkfs.ext4 /dev/mmcblk1p2

复制

设置从SD卡启动,进入文件夹

cd /run/media/mmcblk0p1/image

检查QSPI芯片分区

cat /proc/mtd

烧写BOOT.BIN到QSPI分区0

flashcp BOOT.BIN /dev/mtd0

挂载eMMC到mnt文件夹

mount /dev/mmcblk1p1 /mnt

复制image到eMMC

cp image.ub /mnt

挂载SD和eMMC,特别注意SD卡和eMMC对应的mmcblk序号:

实验板配套Linux3.15系统启动后,SD0(mmcblk0)是eMMC,SD1(mmcblk1)是SD卡,估计修改过内核;

PetaLinux2018系统启动后,SD0(mmcblk0)是SD卡,SD1(mmcblk1)是eMMC,符合一般情况。

启动

设置跳线从QSPI启动,重新上电,引导BOOT.BIN(运行FSBL,加载bit,运行u-boot),u-boot从eMMC引导加载image.ub(Kernel、Device Tree 和 rootfs)镜像。

参考

https://www.beyond-circuits.com/wordpress/tutorial/tutorial27/

https://www.xilinx.com/support/answers/68833.html

 

你可能感兴趣的:(PetaLinux,Zynq(ARM+FPGA))