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设备等。
将硬件描述文件导入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,需要从文件
define CONFIG_EXTRA_ENV_SETTINGS
到文件
对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