zynq/zynqMP启动模式总结:FLASH+emmc启动/petalinux烧写速度最快的启动方式

19秒前 876阅读

        因客户要求zynq开发板只有FLASH和emmc,然而还得在petalinux进行开发系统,因FLASH大小有限,所以没办法把内核和根文件地址全部存储到FLASH中,于是想配合emmc进行启动,但是在网上搜索的大多都是只把根文件系统放到了emmc,然后把内核和BOOT.bin放到了FLASH,但是烧写FLASH真的很费时间,所以就想出了一个新的办法(被逼的):   


    

启动文件分配:      

存储区域分区存储文件
FLASH-BOOT【fsbl、u-boot、bit(可选)】
EMMCFAT32image.ub【Image】
Ext4rootfs.tar.gz【解压后的】

这样分配下来,BOOT.bin 的大小只有几M,烧写起来方便很多

接下来直接讲解实现过程:

首先想介绍一下我的环境:

        petalinux2021.2、vivado2021.2、zynq7020、zynqMP 7ev 

一、向EMMC存储文件

首先应该使用ramdisk模式创建一个很小的petalinux系统:(这个需要打包一起放到FLASH启动)

        1、需要把FLASH内存进行分配(添加kernel、bootscr和rootfs分区)

        2、 修改 Root filesystem type 为 (INITRD),并进行地址配置

        3、  修改 Boot script offset的值 (0x3E80000),这个值为boot.scr的基地址

然后直接petalinux-build即可

然后对这些文件进行打包(网上都是一个一个的分地址烧录到FLASH,但是太麻烦):

这边分享一个把上述文件全部打包成一个BOOT.bin

petalinux-package --boot --force --format BIN --fsbl --u-boot --kernel images/linux/Image --offset 0x1E40000 --cpu a53-0 --boot-script --offset 0x3E80000 --add images/linux/rootfs.cpio.gz.u-boot --offset 0x4000000 --cpu a53-0 --file-attribute partition_owner=uboot

    这样只需要把BOOT.bin(大概50Mb)烧写到FLASH即可,时间有点久(去厕所钓会鱼)  

烧写完之后,把启动模式切换到FLASH启动,即可进入系统了,然后如果有网络可以通过网络把image.ub和rootfs.tar.gz 传到系统,参考我以前的文章进行分区和存放即可。

Linux下给emmc进行分区操作总结-CSDN博客

二、配置从EMMC启动

        1、只需修改Root filesystem type 为 (EXT4 (SD/eMMC/SATA/USB)),并修改rootfs存放的mmc位置

      然后进行petalinux-build

      然后进行打包BOOT.bin (只有5Mb)(只需打包fsbl、u-boot、bit(可选))          

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

这样的BOOT.bin只有5M大小,烧写到FLASH用时很短

然后启动开发板,进入到u-boot界面:(在执行到U-BOOT倒计时的时候按任意键暂停)

在这里修改u-boot启动的指令:

查看当前的启动变量:

print bootcmd

如下所示,在bootcmd的命令中我们使用的默认的distro_bootcmd

zynq/zynqMP启动模式总结:FLASH+emmc启动/petalinux烧写速度最快的启动方式

查看iamge.ub文件

ls emm 1:1

如下所示,即我把image.ub存放到了emmc1的第一个分区

zynq/zynqMP启动模式总结:FLASH+emmc启动/petalinux烧写速度最快的启动方式

查看rootfs文件

ls emm 1:2

如下所示,即我把根文件系统放到了emmc1的第二个分区

zynq/zynqMP启动模式总结:FLASH+emmc启动/petalinux烧写速度最快的启动方式

挂载emmc1

mmc dev 1

zynq/zynqMP启动模式总结:FLASH+emmc启动/petalinux烧写速度最快的启动方式

修改启动内核环境变量

setenv run_emmc_boot "mmc dev 1:1 && load mmc 1:1 0x10000000 /image.ub && bootm 0x10000000"

将bootcmd的命令修改成run_emmc_boot

setenv bootcmd "run run_emmc_boot" 

保存环境变量

saveenv

 重启开发板即可查看到,从emmc中读取iamge.ub

zynq/zynqMP启动模式总结:FLASH+emmc启动/petalinux烧写速度最快的启动方式

然后就是进行读取根文件系统,直至进入到petalinux系统

zynq/zynqMP启动模式总结:FLASH+emmc启动/petalinux烧写速度最快的启动方式 大功告成!!!(开香槟!!)

更多关于zynq和zynqMP的问题,可以评论留言

如果感觉文章对您有用,麻烦三连支持一下,方便下次用到的时候,就可以快速找到我,非常感谢您的支持!!!

VPS购买请点击我

文章版权声明:除非注明,否则均为主机测评原创文章,转载或复制请以超链接形式并注明出处。

目录[+]