ZYNQ学习之Petalinux 设计流程实战

基本都是摘抄正点原子的文章:<领航者 ZYNQ 之嵌入式Linux 开发指南 V3.2.pdf,因初次学习,仅作学习摘录之用,有不懂之处后续会继续更新~

PetaLinux工具提供了在 Xilinx 处理系统上自定义、构建和部署嵌入式 Linux 解决方案所需的一切。该解决方案旨在提高设计生产力,可与 Xilinx 硬件设计工具一起使用,以简化针对 Zynq SoC 的 Linux 系统的开发。

一、Zynq-7000 嵌入式软件栈概述

要想在 Zynq-7000 SoC 中搭建运行 Linux,需先简单的了解下其嵌入式软件栈,如下图所示:

处理器系统引导是一个分三个阶段的过程:

第一个阶段:内部BootROM

内部 BootROM,它存储 stage-0 的引导代码。

BootROM 在 CPU 0 上执行,CPU 1 执行等待事件(WFE)指令。 BootROM 还配置必要的外围设备,以开始从其中一个引导设备获取第一阶段引导加载程序 (FSBL)引导代码。可编程逻辑(PL)不是由 BootROM 配置的。

第二个阶段: FSBL引导代码

这通常存储在闪存、SD 卡中,或者可以通过 JTAG 下载。BootROM 代码将 FSBL 引导 代码从选定的非易失性存储器复制到片上存储器(OCM)。加载到 OCM中的 FSBL的大小限制为192KB。在 FSBL 开始执行后,完整的 256 KB 可用。

第三个阶段:U-Boot引导加载程序

常见的第二阶段引导加载程序是 U-boot。是一个可选的第二阶段引导加载程序,由用户设计。

(1)FSBL

Zynq-7000 的第一阶段引导加载程序(FSBL)使用硬件比特流(如果存在)配置 FPGA, 并将操作系统(OS)映像或第二阶段引导加载器映像从非易失性存储器(NAND/SD/eMMC/QSPI)加载到存储器(DDR/OCM)。它支持多个分区,每个分区可以是代码映像、位流或通用数据。

如果需要,可以对这些分区中的每个分区进行身份验证和解密。

(2)U-Boot

U-Boot,通用引导加载程序的缩写,是一种开源的主引导加载程序,用于嵌入式设备, 以引导 Linux 社区中经常使用的设备操作系统内核。

Xilinx 在 Zynq-7000 设备中使用 U-Boot作为第二阶段引导加载程序。

(3)Linux

Linux,全称 GNU/Linux,是一种免费使用和自由传播的类 UNIX 操作系统,是本开发指南的重点。

以上就简单的介绍了 Zynq-7000嵌入式软件栈,没有看懂没关系,这里简单的概括下。

  1. Zynq-7000 上电后,首先由 BootROM 对 Zynq 设备进行初始启动,然后引导加载 fsbl 到OCM并启动FSBL;
  2. FSBL启动后将 uboot 加载到 DDR 并启动 uboot;
  3. uboot 启动后加载linux系统镜像到DDR并启动linux,至此整个 linux 系统启动完成。

综上,就是需要在 Zynq-7000 运行 linux 系统所需要搭建的软件栈。如果这些软件栈由用户一个个手工搭建,任务量极其庞大,所幸的是,Xilinx 推出了 Petalinux 开发工具,可以让用户方便快捷的完成这些软件栈的搭建,从而加快 linux 的使用和开发。

二、Petalinux 工具的设计流程概述使用

通常 PetaLinux 工具遵循顺序设计流程模型,如下表所示:

Design Flow StepTool / Workflow 
Hardware Platform CreationVivado
Create PetaLinux Projectpetalinux-create -t project
Initialize PetaLinux Projectpetalinux-config --get-hw-description
Configure System-Level Optionspetalinux-config
Create User Componentspetalinux-create -t COMPONENT
Configure the Linux Kernelpetalinux-config -c kernel
Configure the Root Filesystempetalinux-config -c rootfs
Build the Systempetalinux-build
Package for Deploying the Systempetalinux-package
Boot the System for Testingpetalinux-boot

从上表可以看到,使用 Vivado 搭建好硬件平台后,通过几个命令就完成了 Linux 系统的
定制
,极其方便。

需要说明的是以上设计流程不是按部就班的每一步都执行一遍,可以根据使用场景有选
择的执行。

一般的设计流程如下:

1. 通过 Vivado 创建硬件平台,得到 xsa 文件
2. 运行 source <petalinux 安装路径>/settings.sh设置 Petalinux 运行环境
3. 通过 petalinux-create -t project 创建 petalinux 工程
4. 使用 petalinux-config --get-hw-description,将 xsa 文件导入到 petalinux 工程当中并配置petalinux 工程
5. 使用 petalinux-config -c kernel 配置 Linux 内核
6. 使用 petalinux-config -c rootfs 配置 Linux 根文件系统
7. 配置设备树文件
8. 使用 petalinux-build 编译整个工程
9. 使用 petalinux-package --boot 制作 BOOT.BIN 启动文件
10. 制作SD启动卡,将 BOOT.BIN 和 image.ub 以及根文件系统部署到 SD 卡中
11. 将 SD 卡插入开发板,并将开发板启动模式设置为从 SD 卡启动
12. 开发板连接串口线并上电启动,串口上位机打印启动信息,登录进入 Linux 系统

三、Petalinux 定制 Linux 系统解决

3.1、创建 Vivado 硬件平台

为了节省时间,这里使用正点原子为领航者开发板配置的vivado工程,该工程在开发板资料包中已经提供,路径为:4_SourceCode3_Embedded_Linux\vivado_prj,在该目录下有两个,zip压缩文件Navigator_7010.zip和Navigator_7020.zip,分别对应领航者7010和领航者7020的vivado工程,这里用户根据自己所使用的开发板来选择。

这里以领航者7010开发板为例,将Navigator_7010.zip在Windows系统下解压得到vivado工程日录Navigator7020,进入到该目录下,如下图所示:

该目录下有一个system_wrapper.xsa文件,该文件包含着Vivado工程所对应的硬件平台信息,Petalinux根据这些信息来配置fsbl、uboot、内核等
将该文件拷贝到Windows与Ubuntu本地共享文件夹下,即/mnt/hgfs/share,并在Ubuntu系统用户根目录下创建了一个名为“petalinux”的目录,并在该目录下创建“xsa_7010”目录用于存放system_wrapper.xsa文件,即~/petalinux/xsa_7010目录。
将system_wrapper.xsa文件拷贝到petalinux/xsa_7010目录中,使用如下命令:

mkdir -p ~/petalinux/xsa_7010

cp /mnt/hgfs/share/system_wrapper.xsa ~/petalinux/xsa_7010

3.2、设置 Petalinux 环境变量

现在进入到 Ubuntu 系统中,打开终端,以普通用户运行即可,不需要使用 root 用户。在正式使用 petalinux 工具之前,需要先设置 petalinux 的作环境,在终端输入如下命令即可:

source /opt/pkg/petalinux/2020.2/settings.sh

#或者

sptl

执行结果如下图所示:

3.3、创建 petalinux 工程

 上节中创建了petalinux目录,现在在该目录中创建一个名为“ALIENTEK-ZYNQ”的Petalinux工程,在终端中输入如下命令:

cd ~/petalinux

petalinux-create -t project --template zynq -n ALIENTEK-ZYNQ

参数说明:

说明
-t是“-type”的简写
template表明创建的petalinux工程使用的平台模板
zynq表明使用的是zynq平台模板的petalinux工程,用于zynq-7O00系列的芯片
-nname参数(此处简写为“-n”)后接的是petalinux工程名,如此处的“ALIENTEK-ZYNQ”

执行结果如下图所示:

可以看到该命令会自动在 petalinux 目录下创建一个名为 ALIENTEK-ZYNQ 的文件夹,也就是 ALIENTEK-ZYNQ 对应的 Petalinux 工程所在目录。

3.4、配置 petalinux 工程

首次配置 Petalinux 工程是将 xsa 文件导入到 Petalinux 工程中,Petalinux 工具会解析 xsa 文件并弹出配置窗口。在终端中输入如下命令配置 Petalinux 工程:

cd ALIENTEK-ZYNQ

petalinux-config --get-hw-description ../xsa_7010/

即进入到 ALIENTEK-ZYNQ 文件夹,并配置 petalinux 工程。“petalinux-config --get-hw-description”命令后面的文件夹就是复制到 Ubuntu 系统下 system_wrapper.xsa 文件所在的位置。

如果后面修改了 Vivado 工程,重新生成 xsa 文件后,可以重新执行“petalinux-config --get-hw-description < xsa 文件所在的位置>以重新配置 Petalinux 工程。

执行结果如下图所示:

弹出 petalinux 工程配置窗口,如下图所示:

  • 通过键盘上的“↑”和“↓”键来选择要配置的菜单
  • 按下“Enter”键进入子菜单
  • 菜单中蓝色高亮的首字母就是此菜单的热键,在键盘上按下此高亮字母对应的键可以快速选中对应的菜单
  • 选中子菜单以后按下“Y”键就会将相应的配置选项写入配置文件中,菜单前面变为“<*>”
  • 按下“N”键不编译相应的代码,按下“M”键就会将相应的代码编译为模块,菜单前面变为“<M>”
  • 按两下“Esc”键退出,也就是返回到上一级,按下“?”键查看此菜单的帮助信息,按下“/”键打开搜索框,可以在搜索框输入要搜索的内容

在配置界面下方会有五个按钮,这五个按钮的功能如下:

<Select>:选中按钮,和“Enter”键的功能相同,负责选中并进入某个菜单

<Exit>:退出按钮,和按两下“Esc”键功能相同,退出当前菜单,返回到上一级

<Help>:帮助按钮,查看选中菜单的帮助信息

<Save>:保存按钮,保存修改后的配置文件

<Load>:加载按钮,加载指定的配置文件

3.4.1 Linux Components Selection

首先按键盘上的下方向键移动到“Linux Components Selection”,然后按键盘上的 “Enter”进入子菜单,子菜单内容如下图所示:

  • 中括号里的“*”表示已使能配置
  • 第二项和第三项表示会自动生成fsbl.elf 文件和自动更新 ps_init
  • 下面两个选项用来配置 u-boot 和 linux-kernel 的来源,本实验保持默认来源配置,不做改动,后面的实验需要更改的时候再做介绍

按键盘上的“Esc”按键连按两次退出该子菜单。

3.4.2 Auto Config Settings

“Auto Config Settings”菜单主要就是选择是否使能 Device tree、Kernel 和 u-boot 的自动配置,这里使用默认配置,无需更改。

3.4.3 Subsystem AUTO Hardware Settings

“Subsystem AUTO Hardware Settings”子菜单的内容如下图所示:

进入到该界面的各个外设子菜单中,可以发现都已经设置好了默认配置,这些默认配置是根据 xsa 文件的信息自动配置的,基本上无需用户手动配置;

3.4.3.1 Serial Settings

“Serial Settings”配置项用于配置开发板的调试串口和串口波特率等参数,对于领航者开发板来说,这里需要修改一下,首先光标移动到该配置项按回车进入,如下所示:

把 “FSBL Serial stdin/stdout” 和 “DTG Serial stdin/stdout” 两 项 中 默 认 使 用 的“ps7_uart_1”改成“ps7_uart_0”,也就是 USB 串口。这是因为 uart1 是 PL 端的 RS232 和RS485 接口

修改完成之后连按两次 ESC 键回到上一级菜单。

 3.4.3.2 Advanced bootable images storage Settings

在“Advanced bootable images storage Settings”菜单中可配置启动引导镜像和内核镜像的存储媒介,默认为 Primary SD,这里保持默认即可。

返回到主界面(按四次“ESC”按键),“DTG Settings”、FSBL 配置菜单“FSBL Configuration ” 、 FPGA管理器菜单 “ FPGA Manager ” 、 u-boot 配置菜单“u-boot Configuration”和 linux 配置菜单“Linux Configuration”一般保持默认即可。

3.4.4 DTG Settings

DTG Settings”保持默认即可。

3.4.5 FSBL Configuration

FSBL Configuration”保持默认即可。

3.4.6 FPGA Manager

FPGA Manager”保持默认即可。

3.4.7 u-boot Configuration

u-boot Configuration”保持默认即可。

3.4.8 Linux Configuration

Linux Configuration”保持默认即可。

3.4.9 Image Packaging Configuration

进入“Image Packaging Configuration”子菜单,如下图所示:

第一个选项便是根文件系统的类型的配置,默认为 INITRD,一般默认即可。如果用户需要运行 Ubuntu 或 Debian 的根文件系统时,就需要配置成 EXT4(SD/eMMC/ SATA/USB),NFS挂载启动需要配置成 NFS。

注:INITRD 类型的根文件系统每次重新启动 linux 系统都是全新的、未改动过的,也就是说启动系统后进行的所有修改掉电后就全部丢失了,再次重新启动还是之前未修改过的根文件系统,选择“EXT4”可以将根文件系统放在 SD 卡、eMMC 的 ext4 分区,这样启动系统后进行的所有修改掉电后就不会丢失了。

后面会讲解如何将根文件系统放在SD卡的ext4分区。这里还是先从简单的INITRD类型用起。

另外从该界面可以看到,有“Copy final images to tftpboot”选项,当在 Ubuntu 的根文件下创建一个名为 tftpboot 的文件夹时,工程生成镜像后会自动将相关文件复制到/tftpboot目录中。

3.4.10 Firmware Version Configuration

回到主界面,“Firmware Version Configuration”可以用来修改定制的 linux 系统的主机名和产品名,默认与该 Petalinux 工程同名,如果需要可修改。

3.4.11 Yocto Settings

“Yocto Settings”进行与 Yocto相关的设置,这里就不做介绍了,一般保持默认即可。

按键盘上的右方向键(即右箭头),移动到底部的“Save”,按键盘上的“Enter”键, 进入如下图所示的保存配置文件界面:

按键盘上的“Enter”键确认,进入下图所示界面:

再次按键盘上的“Enter”键确认,直接返回到主界面,到这里配置修改就完成了。最后按两次键盘上的“Esc”退出配置窗口,Petalinux 工具开始自动配置工程。 这一步可能需要几分钟才能完成。这是因为 PetaLinux 会根据“Auto Config Settings --->”和“Subsystem AUTO Hardware Settings --->”来解析 xsa 文件,以获取更新设备树、U-Boot 配置文件和内核配置文件所需的硬件信息。

等待一段时间后,完成 petalinux 工程的配置,如下图所示:

如果后面想重新配置,只需输入“petalinux-config”命令即可重新配置

3.5、配置 Linux 内核

接下来开始定制 Linux 内核,在终端输入如下命令:

petalinux-config -c kernel

执行结果如下:

等待一段时间(我等待了一个半小时,与网速有关系)后会弹出 Linux 内核的配置界面,如下图所示:

可以看到 Petalinux 默认使用的内核版本为 5.4.0,当然也可以换成其它版本的内核,不过修改起来比较麻烦,Petalinux 对内核版本有要求,用户如需使用其他的内核版本可以在网上查找关于 Petalinux 使用非默认内核版本的方法。一般使用默认内核版本就可以了。

这里使用的内核 Xilinx 官方已经做好了基础配置,如无特定需求,无需更改。这里采用Xilinx 官方的默认配置即可,保存配置并退出,如下图所示:

关于Linux 内核的配置在后面的 Linux 内核移植学习时再作了解。

3.6、配置 Linux 根文件系统

在终端输入下面的命令可配置根文件系统,如果不需要配置可不执行该命令:

petalinux-config -c rootfs

下图就是根文件系统的配置界面:

默认配置可满足一般使用,也可以根据需求来定制根文件系统,本实验保持默认配置。 需要说明的是“PetaLinux RootFS Settings”可以用来设置 root 用户的密码,默认为“root”。 后面登录的时候会用到。

保存配置并退出。

3.7、配置设备树文件

设备树用于保存 Linux 系统中的各种设备信息,内核在启动过程当中会去解析设备 树文件,获取设备所需的配置信息完成设备的初始化工作。

如果需要配置设备树,可以编辑当前 petalinux 工程目录下的 project-spec/meta-user/recipes-bsp/device-tree/files/system-user.dtsi 文件。

设备树的概念以及相关配置、语法涉及到了 Linux 内核驱动相关知识,并不是本节学习的重点,所以这里并不会去深入介绍,将会在 Linux 驱动部分的章节做详细解说。使用 vi 或 gedit 命令打开 system-user.dtsi 文件,如下所示:

vi project-spec/meta-user/recipes-bsp/device-tree/files/system-user.dtsi

默认的文件内容如下,可见该文件需要用户自己手动配置。

设备树配置内容在资料盘当中已经提供了,路径为: “开发板资料盘(A盘)\4_SourceCode\3_Embedded_Linux\zynq_petalinux\zynq7010\1_customize_linux\ device_tree\system-user.dtsi”,用户可以用资料盘中的文件替换当前 Petalinux 工程中的该文件。

system-user.dtsi设备树文件把按键、led 灯、蜂鸣器、USB、串口、sd 卡、Flash、PL 端网口、PS 端网口、 EEPROM 和 RTC 这两个 IIC 设备添加到 system-user.dtsi 设备树当中,system-user.dtsi 文件内容如下:

#include <dt-bindings/gpio/gpio.h>
#include <dt-bindings/input/input.h>
#include <dt-bindings/media/xilinx-vip.h>
#include <dt-bindings/phy/phy.h>/ {model = "Alientek Navigator Zynq Development Board";compatible = "xlnx,zynq-zc702", "xlnx,zynq-7000";leds {compatible = "gpio-leds";gpio-led1 {label = "led2";gpios = <&gpio0 0 GPIO_ACTIVE_HIGH>;default-state = "on";};gpio-led2 {label = "led1";gpios = <&gpio0 54 GPIO_ACTIVE_HIGH>;linux,default-trigger = "heartbeat";};gpio-led3 {label = "pl_led0";gpios = <&axi_gpio_0 0 0 GPIO_ACTIVE_HIGH>;default-state = "on";};gpio-led4 {label = "pl_led1";gpios = <&axi_gpio_0 1 0 GPIO_ACTIVE_HIGH>;linux,default-trigger = "timer";};gpio-led5 {label = "ps_led0";gpios = <&gpio0 7 GPIO_ACTIVE_HIGH>;default-state = "on";};gpio-led6 {label = "ps_led1";gpios = <&gpio0 8 GPIO_ACTIVE_HIGH>;linux,default-trigger = "timer";};};keys {compatible = "gpio-keys";autorepeat;gpio-key1 {label = "pl_key0";gpios = <&gpio0 55 GPIO_ACTIVE_LOW>;linux,code = <KEY_LEFT>;gpio-key,wakeup;autorepeat;};gpio-key2 {label = "pl_key1";gpios = <&gpio0 56 GPIO_ACTIVE_LOW>;linux,code = <KEY_RIGHT>;gpio-key,wakeup;autorepeat;};gpio-key3 {label = "ps_key1";gpios = <&gpio0 12 GPIO_ACTIVE_LOW>;linux,code = <KEY_UP>;gpio-key,wakeup;autorepeat;};gpio-key4 {label = "ps_key2";gpios = <&gpio0 11 GPIO_ACTIVE_LOW>;linux,code = <KEY_DOWN>;gpio-key,wakeup;autorepeat;};touch-key {label = "touch_key";gpios = <&gpio0 57 GPIO_ACTIVE_HIGH>;linux,code = <KEY_ENTER>;gpio-key,wakeup;autorepeat;};};beep {compatible = "gpio-beeper";gpios = <&gpio0 58 GPIO_ACTIVE_HIGH>;};usb_phy0: phy0@e0002000 {compatible = "ulpi-phy";#phy-cells = <0>;reg = <0xe0002000 0x1000>;view-port = <0x0170>;drv-vbus;};
};&uart0 {u-boot,dm-pre-reloc;status = "okay";
};&sdhci0 {u-boot,dm-pre-reloc;status = "okay";
};&usb0 {dr_mode = "otg";usb-phy = <&usb_phy0>;
};&qspi {u-boot,dm-pre-reloc;flash@0 { /* 16 MB */compatible = "w25q256", "jedec,spi-nor";reg = <0x0>;spi-max-frequency = <50000000>;#address-cells = <1>;#size-cells = <1>;partition@0x00000000 {label = "boot";reg = <0x00000000 0x00100000>;};partition@0x00100000 {label = "bootenv";reg = <0x00100000 0x00020000>;};partition@0x00120000 {label = "bitstream";reg = <0x00120000 0x00400000>;};partition@0x00520000 {label = "device-tree";reg = <0x00520000 0x00020000>;};partition@0x00540000 {label = "kernel";reg = <0x00540000 0x00500000>;};partition@0x00A40000 {label = "space";reg = <0x00A40000 0x00000000>;};};
};&gem0 {local-mac-address = [00 0a 35 00 8b 87];phy-handle = <&ethernet_phy>;ethernet_phy: ethernet-phy@7 {	/* yt8521 */reg = <0x7>;device_type = "ethernet-phy";};
};&gem1 {local-mac-address = [00 0a 35 00 11 55];phy-reset-gpio = <&gpio0 63 GPIO_ACTIVE_LOW>;phy-reset-active-low;phy-handle = <&pl_phy>;pl_phy: pl_phy@4 {	reg = <0x4>;device_type = "ethernet-phy";};
};&watchdog0 {status = "okay";reset-on-timeout;		// Enable watchdog reset function
};&adc {status = "okay";xlnx,channels {#address-cells = <1>;#size-cells = <0>;channel@0 {reg = <0>;};};
};&i2c0 {clock-frequency = <100000>;eeprom@50 {compatible = "atmel,24c64";reg = <0x50>;pagesize = <32>;};rtc@51 {compatible = "nxp,pcf8563";reg = <0x51>;};
};

下面简单的讲解下 gpio led 的配置:

6 个 gpio led 灯分别对应开发板的 6 个 led 灯,配置信息主要包括 compatible(用于与内核驱动匹配的名字)、label(别名)、gpios(对应的 GPIO 管脚)、默认状态以及触发状态。

例如 linux,default-trigger = " timer "表示默认的触发状态是 timer 模式,也可以改为 heartbeat模式。除此之外,还有其他一些内核定义好的触发状态;default-state = "on"表示默认 led 灯是亮着的;gpios = <&gpio0 0 GPIO_ACTIVE_HIGH> 表示该 led 的控制管脚是 gpio-mio0,GPIO_ACTIVE_HIGH 表示高电平有效(也就是高电平的时候 led 灯才会亮)。

其他的暂不了解,后面驱动部分文档中再详细了解。

3.8、编译 Petalinux 工程

现在可以编译整个 Petalinux 工程了,在终端输入如下命令:

petalinux-build

该命令将生成设备树DTB文件、FSBL文件、U-Boot 文件、boot.scr 文件、Linux 内核和根文件系统文件。

编译完成后,生成的镜像文件将位于工程的 images 目录下。需要说明的是FSBL、U-Boot 这两个在本工程中并没有配置,这是因为 Petalinux 会根据 xsa 文件和前面配置 petalinux 工程自动配置FSBL和 uboot,如无特需要求,不需要再手动配置。 执行结果如下图所示:

从上图可以看出,工程已经成功编译。

3.9、制作 BOOT.BIN 启动文件

Petalinux 提供了 petalinux-package 命令将 PetaLinux 项目打包为适合部署的格式,其中“petalinux-package --boot”命令生成可引导映像,该映像可直接与 Zynq 系列设备(包括Zynq-7000 和 Zynq UltraScale + MPSoC)或基于 MicroBlaze 的 FPGA设计一起使用。对于 Zynq系列设备,可引导格式为BOOT.BIN,可以从SD卡引导启动。对于基于MicroBlaze的设计,默认格式为 MCS PROM 文件,适用于通过Vivado或其他PROM编程器进行编程。

ZYNQ 的启动文件 BOOT.BIN 一般包含FSBL文件、bitstream 文件和 uboot 文件。使用下面的命令可生成 BOOT.BIN 文件:

petalinux-package --boot --fsbl --fpga --u-boot --force

参数解释如下:

  • 选项“--fsbl”用于指定 FSBL文件所在位置,后面接文件对应的路径信息,如果不指定文件位置,默认对应的是 images/linux/zynq_fsbl.elf;
  • 选项“--fpga”用于指定 bitstream 文件所在位置,后面接该文件对应的路径信息,默认对应的是 images/linux/system.bit,实际可能有区别;
  • 选项“--u-boot”用于指定 U-Boot 文件所在位置,后面接该文件所在路径信息,默认为images/linux/u-boot.elf。

这里均没有指定对应的文件的路径信息,那么 Petalinux 会自动使用默认文件。执行结果如下图所示:

生成的 BOOT.BIN文件放在 Petalinux 工程的 images/linux 目录下,上一小节编译 Petalinux工程生成的文件同样存放在 images/linux 目录下,如下图所示:

3.10、制作 SD 启动卡

如果使用 SD 卡引导 linux 系统启动,一般需要在 SD 卡上有 2 个分区。一个分区使用 FAT32 文件系统,用于放置启动镜像文件(如 BOOT.BIN,boot.scr文件和 linux 镜像文件等),另一分区使用 EXT4 文件系统,用于存放根文件系统。 需要说明的是在《ZYNQ学习之Petalinux 设计流程实战》配置 petalinux 工程中,“Image Packaging cnfiguration”子菜单根文件系统的类型的配置使用的是默认的 INITRD,所以只需要一个使用 FAT32 文件系统的分区就可以了。当设置为“EXT4”则需要另一个存放根文件系统的分区。 本小节先讲解 SD 卡的分区和格式化,然后说明将哪些文件复制到 SD 卡中。此处的 SD卡指的是那种小卡,也称为 TF 卡。

将SD卡插入到读卡器中、并将读卡器插入电脑并连接到 Ubuntu 系统,在 Ubuntu 系统中找到 SD卡所对应的设备节点,示例中插入的SD卡对应的设备节点为/dev/sdb。在终端中输入如下命令:

umount /dev/sdb*

sudo fdisk /dev/sdb

输入“p”执行结果如下图所示:

可以看到当前的分区表,有两个分区,一个 FAT32 的分区和一个 exFAT 分区。在开始新分区之前需要将以前的分区删除,键入“d”,然后输入 1,删除 1 分区,再次键入“d”删除第 2 个分区,如果读者的 SD 卡原本就只有一个分区,前面只需执行一次删除就行。当再次键入“d”并出现提示“还没有定义分区!”时,表明已无存在的分区,如图 6.3.24 中红色字体提示所示。

下面开始新建分区。输入“n”创建一个新分区。通过选择“p”使其为主,使用默认分 区号 1 和第一个扇区 2048。设置最后一个扇区,也就是设置第一个分区的大小,一般设置500M足够了,通过输入“+500M”,为该分区预留 500MB,如果提示分区包含 vfat签名并询问是否移除该签名,则输入“y”,如下图所示:

现在设置分区类型,输入“t”,然后输入“c”,设置为“W95 FAT32 (LBA)”,如下图所示:

输入“a”,设为引导分区,如下图所示:

第一个分区就创建好了,开始创建第二个分区。 通过键入“n”来创建根文件系统分区。后面一路默认就可以了,如下图所示:

如果现在输入“p”检查分区表,会看到刚刚创建的 2 个分区。如果没问题,键入“w” 以写入到 SD 卡并退出。

完成了分区创建后,就可以格式化分区了。在终端输入如下命令:

sudo mkfs.vfat -F 32 -n boot /dev/sdb1

sudo mkfs.ext4 -L rootfs /dev/sdb2

将第一个分区格式化成 FAT32 分区并命名为 boot,将第二个分区格式化成 ext4 分区并命名为 rootfs。执行结果如下图所示:

格式化分区之后就可以挂载分区了(重新插拔读卡器或者使用 mount 命令进行挂载)。 挂载完成后,用户将该工程 image/linux 目录下的 BOOT.BIN、boot.scr 和 image.ub 文件拷贝到名为 boot 的分区也即/dev/sdb1 分区中,结果如下图所示:

3.11、开发板启动模式设置

将 SD 卡插入领航者开发板的 SD 卡槽,然后使用 USB Type-C 连接线将开发板左侧的USB_UART 接口与电脑连接,用于串口通信。领航者开发板连接 SD(TF)卡的正面图如下图所示:

接下来将领航者底板上的启动模式开关 BOOT_CFG 的两个开关均拨到下面(都置为 OFF),即设置为从 SD 卡启动。不同的启动方式与两个拨码开关的状态对应关系如下图所示:

MIO 4MIO 5
BOOT_CFG12
JTAGONON
NANDOFFON
QSPIONOFF
SD CardOFFOFF

最后连接开发板的电源线给开发板上电。

3.12、打开串口上位机,进入 Linux 系统

打开 MobaXterm 串口上位机或其它串口上位机。上位机打印 Linux 启动信息如下:

停留在登录处,此处使用 root 用户登录,登录密码为“root”(去掉双引号),登录进去后,界面如下:

观察开发板,此时会看到板上的 LED 灯全都是亮的,其中,底板上的 PL_LED1和PS_LED1同频闪烁,这是设备树配置文件产生的结果,

四、参考链接:

ZYNQ领航者V2开发板 — 正点原子资料下载中心 1.0.0 文档

ZYNQ学习之Petalinux 设计流程实战-CSDN博客

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/596704.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【ARM 嵌入式 C 常用数据结构系列 25.1 -- linux 双向链表 list_head 使用详细介绍】

请阅读【嵌入式开发学习必备专栏 】 文章目录 内核双向链表双向链表的数据结构初始化双向链表在双向链表中添加元素遍历双向链表链表使用示例注意事项 内核双向链表 在Linux内核中&#xff0c;双向链表是一种广泛使用的数据结构&#xff0c;允许从任意节点高效地进行前向或后向…

FPGA笔试面试题目记录

1 logic utilization 题目&#xff1a;Rank the following operations from lowest utilization to highest. Assume that all variables are 32-bit integers,that the operations are implemented using LUTs ony and that the synthesiser will produce an optimal digital…

1.微服务

一、微服务是什么 微服务是一种架构风格&#xff0c;即&#xff0c;一个应用应该是一组小型服务&#xff0c;每个服务器只负责一种服务&#xff0c;服务之间可以通过 HTTP 的方式进行互通。每一个功能元素最终都是一个可独立替换和独立升级的软件单元。 可以说&#xff0c;微…

双连通分量算法

1. 连通图概念 连通图&#xff1a;无向图任意两点之间存在通路。 强连通&#xff1a;有向图&#xff08;前提&#xff09;中&#xff0c;任意两点都有至少一条通路&#xff0c;则此图为强连通图。 弱连通图&#xff1a;将有向图的有向边换成无向边得到的图是连通图&#xff0c…

Spring Cloud介绍

一、SpringCloud总体概述 Cloud Foundry Service Broker&#xff1a;通用service集成进入Cloud Foundry Cluster&#xff1a;服务集群 Consul&#xff1a;注册中心 Security&#xff1a;安全认证 Stream&#xff1a;消息队列 Stream App Starters&#xff1a;Spring Cloud Stre…

面试题——JVM老年代空间担保机制(我的想法)

这里借用一下人家的图&#xff0c;来说一下我的想法&#xff0c;嘻嘻。。。。 原文链接&#xff1a;一道面试题&#xff1a;JVM老年代空间担保机制-CSDN博客? 嗯&#xff0c;我觉得老年代担保机制的主要作用就是避免频繁触发FULL GC&#xff0c;这其实也是因为年轻代Minor GC…

自动驾驶_交通标志识别:各目标检测算法评测

自动驾驶|交通标志识别&#xff1a;各目标检测算法评测 论文题目&#xff1a;Evaluation of Deep Neural Networks for traffic sign detection systems 开源代码&#xff1a;https://github.com/aarcosg/traffic-sign-detection 附赠自动驾驶学习资料和量产经验&#xff1a;…

sharo反序列化漏洞

启动docker 服务 sudo service docker start 打开靶场 sudo docker run -d -p 80:8080 medicean/vulapps:s_shiro_1 输入docker虚拟机地址打开靶机sharo框架 如何利用漏洞 打开工具目录在终端中打开 输入靶机地址 打开yaki监听端口可以设置为6666 返回工具填写靶机ip和端口 …

idea开发 java web 高校学籍管理系统bootstrap框架web结构java编程计算机网页

一、源码特点 java 高校学籍管理系统是一套完善的完整信息系统&#xff0c;结合java web开发和bootstrap UI框架完成本系统 &#xff0c;对理解JSP java编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。 前段主要技术 css jq…

【STM32】存储器和位带映射(bit band mapping)

文章目录 0 前言1 关于地址和存储器2 STM32内部存储器3 位带映射&#xff08;bit band mapping&#xff09;4 扩展&#xff1a;IAP 0 前言 最近在研究stm32标准库&#xff0c;对使用宏定义实现位操作的函数非常感兴趣&#xff0c;简单的一句PAout(1) 0;就能实现某个引脚电平的…

HTTP协议报文的结构的补充和from表单以及ajax表单

响应 状态码 表示了这次请求对应的响应,是什么样的状态(成功,失败,还是其他的情况.还有及其对应的原因&#xff09; 主要有这些类 成功状态码&#xff1a;其中200最常见&#xff0c;表示成功 重定向状态码&#xff1a;很多时候,页面跳转,就可以通过重定向来实现. 还有的时…

jdk api之AbstractMethodError基础、应用、实战

博主18年的互联网软件开发经验&#xff0c;从一名程序员小白逐步成为了一名架构师&#xff0c;我想通过平台将经验分享给大家&#xff0c;因此博主每天会在各个大牛网站点赞量超高的博客等寻找该技术栈的资料结合自己的经验&#xff0c;晚上进行用心精简、整理、总结、定稿&…