问小白 wenxiaobai
资讯
历史
科技
环境与自然
成长
游戏
财经
文学与艺术
美食
健康
家居
文化
情感
汽车
三农
军事
旅行
运动
教育
生活
星座命理

Zynq及ZynqMP启动方式总结:从Boot ROM到RootFS的完整流程

创作时间:
作者:
@小白创作中心

Zynq及ZynqMP启动方式总结:从Boot ROM到RootFS的完整流程

引用
CSDN
1.
https://m.blog.csdn.net/w18864443115/article/details/138968714

Zynq及ZynqMP系列启动流程

启动所需文件和顺序

Boot ROM →fsbl(fsbl.elf) → bitstream(system.bit)→ u-boot(u-boot.elf)→ bootscr(boot.scr)→ kernel(Image)→ device tree(system.dtb)→ rootfs

  • Boot ROM:直接固化在Zynq硬件,开发者无法修改,启动模式是在这里设置(QSPI,SD,JTAG)
  • fsbl(first stage boot loader):第一阶段加载程序,运行了这个,系统才能够运行裸机程序或者是引导操作系统的u-boot
  • bitstream:PL端硬件加载文件
  • u-boot:U-Boot引导加载程序的可执行映像文件
  • 注:fsbl(fsbl.elf) → bitstream(system.bit)→ u-boot(u-boot.elf):这三个可以合称为一个BOOT.bin
  • bootscr:加载下面文件的脚本
  • kernel:内核加载可执行镜像文件,操作系统的核心组件
  • device tree:设备树文件,用于嵌入式系统中的设备驱动和操作系统内核之间的通信
  • rootfs :根文件系统,包含了操作系统运行所需的文件和目录结构

展开介绍

Zynq 是通过片上CPU完成对芯片的配置,也就是PS和PL的配置是通过 PS 处理器 ARM 核来实现的。需要注意的是,与传统的 Xilinx 7 系列 FPGA 芯片不同,Zynq 是不支持从 PL 端进行直接启动配置的,一定要通过 PS 部分来完成。

Zynq 的具体启动配置是分级进行的,一共可以分为3个阶段,可以用0~2来表示:

  • Stage 0: BootROM 阶段
  • Stage 1: FSBL (First Stage Boot loader)阶段
  • Stage 2: SSBL (Second Stage Boot loader)阶段

BootROM 阶段:

读取启动方式的MIO引脚(JTAG、QSPI、SD)

全程在PS端完成!

FSBL (First Stage Boot loader)阶段:

  1. 完成 PS 的初始化
  2. 加载 PL 的bit流文件,完成 PL 配置
  3. 加载 SSBL 引导程序或是ARM的裸跑程序到 DDR
  4. 跳转执行 SSBL 或裸跑程序

SSBL (Second Stage Boot loader)阶段:

裸机不需要到这一步,这一步主要是用来运行操作系统

SD卡启动

1、格式化SD卡分区

把SD卡格式化为两个分区:

(1)FAT32分区:主要存储启动必须的文件

  • BOOT.bin (fsbl、bit、u-boot)
  • iamge.ub fix版的内核文件(kernel,设备树、rootfs(一般存放到ext4分区))
  • Image,system.dtb (如果不用fix版本,即需要把这两个文件放到FAT分区)

注:image.ub和{Image system.dtb} 选择一个即可

(2)ext4分区:主要存储根文件系统

  • rootfs.tar.gz (需要把这个文件解压到此分区)

解压命令:$ sudo tar xvf rootfs.tar.gz -C /media/rootfs ({/media/rootfs}为ext4分区名)

(3)petalinux设置部分

选择根文件系统的类型:SD

选择设备名称:/dev/sdblk0p1 (根据自己的情况填写)

通过QSPI FLASH启动

petalinux2021.2版本

1、分配FLASH内存

这里面的size,只是表示分区的存储大小,而不是起始地址

2、修改kernel在FLASH的位置

petalinux-config→ u-boot Configuration→ u-boot script configuration→ QSPI/OSPI image offsets

0x1940000:0x1900000 + 0x40000 (根据第一步分区,进行计算),表示kernel的起始地址

3、配置boot.scr的地址

petalinux-config -c u-boot → ARM architecture → Boot script offset

0x3240000:0x1900000 + 0x4000 + 0x1900000 ,表示boot.scr文件在FLASH中的位置

4、打包生成BOOT.bin

根据上述设置好的地址,打包成BOOT.bin (包含bit文件)

petalinux-package --boot --force --format BIN --fsbl --fpga --pmufw --u-boot --kernel images/linux/Image --offset 0x1940000 --cpu a53-0 --boot-script --offset 0x3240000
 --boot:指定要创建的镜像类型为引导镜像。
 --force:强制执行操作,即覆盖现有的输出文件。
 --format BIN:指定输出镜像的格式为二进制格式。
 --fsbl:将 FSBL(First Stage Boot Loader)添加到镜像中。
 --fpga:将 FPGA 位流文件添加到镜像中。
 --pmufw:将 PMU 固件添加到镜像中。
 --u-boot:将 U-Boot 添加到镜像中。
 --kernel images/linux/Image:指定 Linux 内核映像文件的路径。
 --offset 0x1940000:指定将内核映像文件添加到镜像时的偏移地址。
 --cpu a53-0:指定目标处理器核心。
 --boot-script:将引导脚本(boot script)添加到镜像中。
 --offset 0x3240000:指定将引导脚本添加到镜像时的偏移地址。

5、下板操作

(1)首先用ramdisk版本,进入linux,把rootfs文件解压到emmc的ext4分区,(创建分区,参考petalinux_learning)

tar xvf rootfs.tar.gz -C /media/rootfs

(2)把生成的BOOT.bin通过vitis,烧入到FLASH,(烧写之前,可以通过u-boot模式先把FLASH给擦除)

擦除指令:sf erase 0 0x4000000 // 64MB内存

© 2023 北京元石科技有限公司 ◎ 京公网安备 11010802042949号