当前位置: 首页 > news >正文

Petalinux 制作ZYNQ镜像文件流程

1概述

在Zynq-7000 SoC中搭建运行Linux,嵌入式软件栈。
在这里插入图片描述
处理器系统引导是一个分两个阶段的过程。第一个阶段是一个内部 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。
(1) FSBL
Zynq-7000 的第一阶段引导加载程序(FSBL)使用硬件比特流(如果存在)配置 FPGA,
并将操作系统(OS)映像或第二阶段引导加载器映像从非易失性存储器
(NAND/SD/eMC/QSPI)加载到存储器(DDR/OCM)。它支持多个分区,每个分区可以是
代码映像、位流或通用数据。如果需要,可以对这些分区中的每个分区进行身份验证和/或解
密。
(2) U-Boot
U-Boot,通用引导加载程序的缩写,是一种开源的主引导加载程序,用于嵌入式设备,
以引导Linux社区中经常使用的设备操作系统内核。Xilinx在Zynq-7000设备中使用U-Boot作
为第二阶段引导加载程序。
(3) Linux
Linux,全称 GNU/Linux,是一种免费使用和自由传播的类 UNIX操作系统,是我们本开
发指南的重点。
以上就简单的介绍了Zynq-7000嵌入式软件栈,如果没有看懂没关系,笔者这里简单的概
括下。Zynq-7000上电后,首先由BootROM对Zynq设备进行初始启动,然后引导加载fsbl到OCM并启动fsbl;fsbl启动后将uboot加载到DDR并启动uboot;uboot启动后加载linux系统
镜像到DDR并启动linux,至此整个linux系统启动完成。

2 Petalinux 工具的设计流程概述

在这里插入图片描述
需要说明的是以上设计流程不是按部就班的每一步都执行一遍,可以根据使用场景有选
择的执行。一般的设计流程如下:

1. 通过Vivado创建硬件平台,得到xsa文件; 
2. 运行 source <petalinux 安装路径>/settings.sh,设置 Petalinux 运行环境 
source /opt/pkg/petalinux/2020.2/settings.sh 
#或者 
sptl 3. 通过petalinux-create -t project 创建 petalinux 工程; 
petalinux-create -t project --template zynq -n AZYNQ5. 使用 petalinux-config --get-hw-description,将 xsa 文件导入到 petalinux 工程当中并配置
petalinux 工程; cd AZYNQ 
petalinux-config --get-hw-description ../6. 使用petalinux-config -c kernel 配置 Linux 内核; 
7. 使用petalinux-config -c rootfs 配置 Linux 根文件系统; 
8. 配置设备树文件; 
vi project-spec/meta-user/recipes-bsp/device-tree/files/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>;};
};10. 使用petalinux-build 编译整个工程; 
petalinux-build11. 使用petalinux-package --boot制作 BOOT.BIN启动文件; 
petalinux-package --boot --fsbl --fpga --u-boot --force13. 制作SD启动卡,将BOOT.BIN和image.ub以及根文件系统部署到SD卡中; 
14. 将SD卡插入开发板,并将开发板启动模式设置为从SD卡启动; 
15. 开发板连接串口线并上电启动,串口上位机打印启动信息,登录进入Linux系统。

相关文章:

Petalinux 制作ZYNQ镜像文件流程

1概述 在Zynq-7000 SoC中搭建运行Linux&#xff0c;嵌入式软件栈。 处理器系统引导是一个分两个阶段的过程。第一个阶段是一个内部 BootROM&#xff0c;它存储 stage-0 的引导代码。BootROM 在 CPU 0 上执行&#xff0c;CPU 1 执行等待事件&#xff08;WFE&#xff09;指令。…...

99%的人都不知道,微信才是真正的学习神器

微信&#xff0c;作为一款全球最受欢迎的社交应用之一&#xff0c;除了聊天、朋友圈、小程序等功能外&#xff0c;还有许多隐藏的学习功能&#xff0c;今天小编就给大家分享10个微信隐藏的学习功能&#xff0c;助您轻松成为学霸。 1、微信笔记 用过代办清单软件的朋友都知道&…...

加速模型训练 GPU cudnn

GPU的使用 在定义模型时&#xff0c;如果没有特定的GPU设置&#xff0c;会使用 torch.nn.DataParallel 将模型并行化&#xff0c;充分利用多GPU的性能&#xff0c;这在加速训练上有显著影响。 model torch.nn.DataParallel(model).cuda() cudnn 的配置&#xff1a; cudnn.…...

《python编程从入门到实践》day40

# 昨日知识点回顾 编辑条目及创建用户账户 暂没能解决bug&#xff1a; The view learning_logs.views.edit_entry didnt return an HttpResponse object. It returned None instead.# 今日知识点学习 19.2.5 注销 提供让用户注销的途径 1.在base.html中添加注销链接 …...

IO多路复用学习笔记

参考资料&#xff1a; 视频1 视频2&#xff08;本人B站也有发布&#xff09; 视频3 参考笔记 参考博客...

Ubuntu设置中文输入法教程

在Ubuntu中设置中文输入法非常简单&#xff0c;只需按照以下步骤操作即可。 打开“设置”菜单。在Ubuntu的左上角点击“活动”按钮&#xff0c;然后在弹出的菜单中选择“设置”图标。 进入“区域和语言”设置。在设置菜单中&#xff0c;找到并点击“区域和语言”选项。 添加中…...

机器学习之爬山算法(Hill Climbing Algorithm)

爬山算法(Hill Climbing Algorithm)是一种简单而常见的启发式搜索算法,通常用于解决优化问题。它的基本思想类似于登山过程中爬升到山顶的过程,即从一个起始点开始,不断尝试向邻近的点移动,直到找到一个局部最优解。 下面是爬山算法的基本工作流程: 初始化:选择一个初…...

LeetCode - 贪心算法 (Greedy Algorithm) 集合 [分配问题、区间问题]

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/139242199 贪心算法&#xff0c;是在每一步选择中&#xff0c;都采取当前状态下&#xff0c;最好或最优&#xff08;即最有利&#xff09;的选择&…...

Linux中ftp配置

一、ftp协议 1、端口 ftp默认使用20、21端口 20端口用于建立数据连接 21端口用于建立控制连接 2、ftp数据连接模式 主动模式&#xff1a;服务器主动发起数据连接 被动模式&#xff1a;服务器被动等待数据连接 二、ftp安装 yum install -y vsftpd #---下…...

BWVS 靶场测试

一、PHP弱类型 is_numeric() 输入&#xff1a;127.0.0.1/BWVS/bug/php/code.php # 1、源代码分析 如果num不是数字&#xff0c;那么就输出num&#xff0c;同时如果num1&#xff0c;就输出flag。即num要是字符串又要是数字 # 2、函数分析&#xff1a; is_numeric()函数&…...

c++ 里重解释转换之于引用 reinterpret_cast< long >

今天遇到了这一很新奇的写法。模糊中记得王老师也这么讲过。c 里四大转换。把数据重解释为原来数据的引用。虽然也可以直接定义对变量的引用。测试如下&#xff1a; 咱们从反汇编再了解下 c 编译器是怎么处理这种写法的&#xff1a; 谢谢...

JAVASE2

封装的步骤&#xff1a; 1、所有属性私有化&#xff0c;使用private关键字进行修饰&#xff0c;private表示私有的&#xff0c;修饰的所有数据只能在本类中访问 2、对外提供简单入口&#xff1a;比如说被private修饰的成员变量&#xff0c;在其他类中只能通过getXxx/setXxx方法…...

ora-00392 ora-00312错误处理

检查当前日志组状态 对日志组进行clear操作 重新开库无报错...

网页、h5默认滚动条样式重构

文章目录 前言一、使用步骤1、在想要滚动的元素上设置相应的css类名2.设置样式 总结 前言 此文章用于&#xff0c;让我自己快速设置 浏览器、h5 默认滚动条样式…… 一、使用步骤 1、在想要滚动的元素上设置相应的css类名 代码如下&#xff1a; <div class"list scro…...

香橙派AIpro测评上手指南

一、前言 首先非常荣幸受到邀请参加本次香橙派开发板的测评活动&#xff0c;除了令人眼前一亮&#xff0c;做工非常精细的开发板&#xff0c;举办方还非常贴心地准备了散热套件&#xff0c;以及烧录好系统的TF卡&#xff0c;甚至准备了电源适配器&#xff0c;数据线&#xff1…...

GBDT 算法【python,机器学习,算法】

GBDT 即 Gradient Boosting Decision Tree 梯度提升树&#xff0c; 是一种迭代的决策树算法&#xff0c;又叫 MART(Multiple Additive Regression Tree)&#xff0c; 它通过构造一组弱的学习器(树)&#xff0c;然后把多棵决策树的结果累加起来作为最终的预测输出。该算法将决策…...

软考 系统架构设计师系列知识点之SOME/IP与DDS(3)

接前一篇文章&#xff1a;软考 系统架构设计师系列知识点之SOME/IP与DDS&#xff08;2&#xff09; 本文内容参考&#xff1a; 车载以太网 - SOME/IP简介_someip-CSDN博客 https://zhuanlan.zhihu.com/p/369422441 什么是SOME/IP?_someip-CSDN博客 SOME/IP 详解系列&#…...

将AI大模型装进你的手机,你愿意么?

大数据产业创新服务媒体 ——聚焦数据 改变商业 AI大模型的发展&#xff0c;有两个方向&#xff0c;一个是模型越做越大&#xff0c;以规模来提升性能。还有一个重要的方向&#xff0c;就是通过将模型做小&#xff0c;来嵌入手机、电脑等计算终端&#xff0c;这同样是值得关注…...

前端面试题12-22

12 Proxy是什么&#xff0c;有什么作用&#xff1f; Proxy 是 ES6 (ECMAScript 2015) 引入的一种元编程特性。它允许你创建一个对象&#xff0c;该对象可以拦截和定义基本操作&#xff08;例如属性查找、赋值、枚举、函数调用等&#xff09;。Proxy 提供了一种机制&#xff0c…...

【论文解读】Performance of AV1 Real-Time Mode

论文下载地址:Performance of AV1 Real-Time Mode 时间:2020.10 级别:IEEE 作者:Ludovic Roux 摘要 背景:COVID-19疫情增加了对数字互动的需求,使得实时或低延迟编解码器变得更加重要。现状:大多数编解码器,包括AV1,主要关注于编码效率,这是视频点播(VOD)的主要改…...

19c补丁后oracle属主变化,导致不能识别磁盘组

补丁后服务器重启&#xff0c;数据库再次无法启动 ORA01017: invalid username/password; logon denied Oracle 19c 在打上 19.23 或以上补丁版本后&#xff0c;存在与用户组权限相关的问题。具体表现为&#xff0c;Oracle 实例的运行用户&#xff08;oracle&#xff09;和集…...

深入剖析AI大模型:大模型时代的 Prompt 工程全解析

今天聊的内容&#xff0c;我认为是AI开发里面非常重要的内容。它在AI开发里无处不在&#xff0c;当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗"&#xff0c;或者让翻译模型 "将这段合同翻译成商务日语" 时&#xff0c;输入的这句话就是 Prompt。…...

【Linux】shell脚本忽略错误继续执行

在 shell 脚本中&#xff0c;可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行&#xff0c;可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令&#xff0c;并忽略错误 rm somefile…...

Prompt Tuning、P-Tuning、Prefix Tuning的区别

一、Prompt Tuning、P-Tuning、Prefix Tuning的区别 1. Prompt Tuning(提示调优) 核心思想:固定预训练模型参数,仅学习额外的连续提示向量(通常是嵌入层的一部分)。实现方式:在输入文本前添加可训练的连续向量(软提示),模型只更新这些提示参数。优势:参数量少(仅提…...

React第五十七节 Router中RouterProvider使用详解及注意事项

前言 在 React Router v6.4 中&#xff0c;RouterProvider 是一个核心组件&#xff0c;用于提供基于数据路由&#xff08;data routers&#xff09;的新型路由方案。 它替代了传统的 <BrowserRouter>&#xff0c;支持更强大的数据加载和操作功能&#xff08;如 loader 和…...

从零实现富文本编辑器#5-编辑器选区模型的状态结构表达

先前我们总结了浏览器选区模型的交互策略&#xff0c;并且实现了基本的选区操作&#xff0c;还调研了自绘选区的实现。那么相对的&#xff0c;我们还需要设计编辑器的选区表达&#xff0c;也可以称为模型选区。编辑器中应用变更时的操作范围&#xff0c;就是以模型选区为基准来…...

UE5 学习系列(三)创建和移动物体

这篇博客是该系列的第三篇&#xff0c;是在之前两篇博客的基础上展开&#xff0c;主要介绍如何在操作界面中创建和拖动物体&#xff0c;这篇博客跟随的视频链接如下&#xff1a; B 站视频&#xff1a;s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...

初学 pytest 记录

安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...

中医有效性探讨

文章目录 西医是如何发展到以生物化学为药理基础的现代医学&#xff1f;传统医学奠基期&#xff08;远古 - 17 世纪&#xff09;近代医学转型期&#xff08;17 世纪 - 19 世纪末&#xff09;​现代医学成熟期&#xff08;20世纪至今&#xff09; 中医的源远流长和一脉相承远古至…...

C/C++ 中附加包含目录、附加库目录与附加依赖项详解

在 C/C 编程的编译和链接过程中&#xff0c;附加包含目录、附加库目录和附加依赖项是三个至关重要的设置&#xff0c;它们相互配合&#xff0c;确保程序能够正确引用外部资源并顺利构建。虽然在学习过程中&#xff0c;这些概念容易让人混淆&#xff0c;但深入理解它们的作用和联…...