Petalinux 制作ZYNQ镜像文件流程

news2024/11/16 3:13:21

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 AZYNQ

5. 使用 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-build

11. 使用petalinux-package --boot制作 BOOT.BIN启动文件; 
petalinux-package --boot --fsbl --fpga --u-boot --force

13. 制作SD启动卡,将BOOT.BIN和image.ub以及根文件系统部署到SD卡中; 
14. 将SD卡插入开发板,并将开发板启动模式设置为从SD卡启动; 
15. 开发板连接串口线并上电启动,串口上位机打印启动信息,登录进入Linux系统。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

WordPress|子比主题美化-给首页左侧添加联系站长按钮

WordPress子比主题美化-给首页左侧添加联系站长按钮 5ccy.cn 我创创业-副业资源整合网-网络赚钱-网络创业-资源分享 http://5ccy.cn 效果如下: 功能介绍 联系站长图标的作用主要是为用户提供一种便捷的方式&#xff0c;以与网站的管理员或站长取得联系。这个图标一般放置在网…

cocos creator做圆形进度条

效果图&#xff1a; 我们在开发过程中经常要用到圆形进度条&#xff0c;例如技能CD 原文链接 之前写了一篇cocos2dx-lua_ProgressTimer创建扇形进度条,这里简单记录下在cocosCreator中如何制作。 具体方法 cocosCreator做起来比2dx还是要简单很多&#xff0c;首先给节点添加p…

Java 类加载机制解密一探到底

类加载是 Java 程序在运行期执行之前的重要环节&#xff0c;它决定着程序的运行效率和稳定性。本文将为您深入剖析 Java 类加载机制的整个生命周期&#xff0c;揭开神秘面纱&#xff0c;让您彻底掌握这一核心知识点。 一、类的生命周期概述 类的生命周期在Java中指的是从类被加…

大疆mic、罗德、西圣无线麦克风怎么选?大疆、西圣麦克风测评对比

如今是一个短视频飞速发展的时代&#xff0c;越来越多自媒体人通过短视频的方式来进行直播带货、生活Vlog、线上K歌等&#xff0c;记录下生活里种种美丽的瞬间。不过一个好的视频除了要有巧妙的构思和清晰稳定的拍摄外&#xff0c;干净的声音也是必不可少的部分。短视频归根结底…

飞控如何和接收机接线?

飞控如何和接收机接线&#xff1f; 一般遥控都是按照顺序1对1接到飞控的INPUT端口。特别注意&#xff0c;华科尔的接收机&#xff0c;需要把1和2通道条换过来。 具体方法如下&#xff1a; 下面以MC6遥控接收机为例子&#xff1a; 用下面的图的接收机连接线来演示&#xff1a…

06.部署jpress

安装mariadb数据 yum -y install mariadb-server #启动并设置开启自启动 systemctl start mariadb.service systemctl enable mariadb.service数据库准备 [rootweb01 ~]# mysql Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id…

React-入门

React由Meta公司研发&#xff0c;是一个用于构建Web和原生交互界面的库 既可以写基于浏览器的应用&#xff0c;还可以写苹果和安卓的原生应用 优势 开发环境搭建 create-react-app是一个快速创建React开发环境的工具&#xff0c;底层是由Webpack构建&#xff0c;封装了配置细…

SAP后续借记、后续贷记、贷方凭证的应用介绍

SAP-MM模块中发票校验MIRO,对于做采购或财务相关的用户都应该非常熟悉,可能每天都需要进行这业务操作处理,但是在发票校验的系统界面中,有三个使用不是很频繁的功能(如下图红色框)。 对于这三业务功能曾听有些用户抱怨SAP怎么那么麻烦啊,不就是补偿或扣供应商的钱嘛,我…

Bookie存储架构源码剖析|得物技术

一、Pulsar存储架构简析 Pulsar作为新一代MQ中间件&#xff0c;在底层架构设计上充分贯彻了存算分离的思想&#xff0c;broker与Bookeeper两个组件独立部署&#xff0c;前者负责流量的调度、聚合、计算&#xff0c;后者负责数据的存储&#xff0c;这也契合了云原生下k8s大行其…

【ARM+Codesys案例】树莓派+Codesys软PLC方案在包装行业灌装旋盖机的应用

ARM系列支持&#xff1a;全志T3、RK3568、树莓派 机型定义&#xff1a;双工位旋盖机 旋盖机主要适用于不同规格的材质及不同规格的盖、旋&#xff08;轧&#xff09;盖。适用螺旋盖、防盗盖、防撞盖、压入盖等。压力可方便调整&#xff0c;根据瓶盖大小设置取盖位。结构紧凑、…

Java基础入门day56

day56 现有问题 之前的servlet中&#xff0c;服务器通过Servlet响应客户端页面的不足&#xff1a; 开发方式麻烦&#xff1a;继承父类或者实现接口&#xff0c;覆盖方法&#xff0c;配置注册 代码修改麻烦&#xff1a;一旦代码修改&#xff0c;需要重新编译、部署、重启服务 …

Linux汉化Jupyter Notebook

要在Linux系统中使Jupyter Notebook汉化&#xff0c;可以通过安装jupyterlab-language-pack-zh-CN扩展来实现。以下是具体步骤和示例代码&#xff1a; 打开终端。 执行以下命令以安装Jupyter Notebook的中文语言包&#xff1a; pip install jupyterlab-language-pack-zh-CN …

nbcio-vue升级迁移flowable到最新的jeeg-boot-vue3的问题记录(一)

因为这个项目license问题无法开源&#xff0c;更多技术支持与服务请加入我的知识星球。 1、vue3 jeeg-boot-vue3新版本的流程定义的页面&#xff0c;刷新出现下面问题&#xff0c;或第一次进去也一样 看着好像就一个警告的信息&#xff0c;不知道是什么原因引起的&#xff0c;应…

HTML静态网页成品作业(HTML+CSS)——家乡沅陵介绍网页(1个页面)

&#x1f389;不定期分享源码&#xff0c;关注不丢失哦 文章目录 一、作品介绍二、作品演示三、代码目录四、网站代码HTML部分代码 五、源码获取 一、作品介绍 &#x1f3f7;️本套采用HTMLCSS&#xff0c;未使用Javacsript代码&#xff0c;共有1个页面。 二、作品演示 三、代…

# WIN10/WIN11 找不到【应用商店 Microsoft.WindowsStore】怎么办?

WIN10/WIN11 找不到【应用商店 Microsoft.WindowsStore】怎么办&#xff1f; 解决方法&#xff1a; 1、右键【开始】菜单&#xff0c;点击【Windows PowerShell (管理员)】&#xff0c;输入&#xff1a; Get-AppxPackage -allusers | Select Name, PackageFullName 2、查询…

python 办公自动化-生成ppt文本和图

最终样式 代码实现 # 可编辑折线+写入文字 成功 # 问题: 设置字体类型和加粗和字体为微软雅黑,是只改了字母和数字的字体,中文没变化 pip install pptx_ea_font 这个库可以解决这个问题 import pandas as pd import pptx_ea_font import matplotlib.pyplot as plt from pp…

【基础算法总结】前缀和二

前缀和二 1.和为 K 的子数组2.和可被 K 整除的子数组3.连续数组4. 矩阵区域和 点赞&#x1f44d;&#x1f44d;收藏&#x1f31f;&#x1f31f;关注&#x1f496;&#x1f496; 你的支持是对我最大的鼓励&#xff0c;我们一起努力吧!&#x1f603;&#x1f603; 1.和为 K 的子数…

记录一次内存取证

1.情景复现 我姐姐的电脑坏了。我们非常幸运地恢复了这个内存转储。你的工作是从系统中获取她所有的重要文件。根据我们的记忆&#xff0c;我们突然看到一个黑色的窗口弹出&#xff0c;上面有一些正在执行的东西。崩溃发生时&#xff0c;她正试图画一些东西。这就是我们从崩溃…

1824python进销存管理系统mysql数据库Django结构layUI布局计算机软件工程网页

一、源码特点 python Django进销存管理系统是一套完善的web设计系统mysql数据库 &#xff0c;对理解python编程开发语言有帮助&#xff0c;系统具有完整的源代码和数据库&#xff0c;系统主要采用B/S模式开发。 开发环境pycharm mysql 5.0 到5.5 依赖包 Django…

2024电激世界脉动-中国汽车品牌全球化制胜手册

来源&#xff1a;奥美Ogilvy&#xff1a; 近期历史回顾&#xff1a; 2024中国宏观经济专题报告-数据要素市场建设 2023-2024年度报告.pdf 2024制药与生化医疗技术产业链白皮书.pdf 从可再生能源到绿氢-中国投资助力埃及能源转型.pdf 2024有机旅行中国行业指引.pdf 2024中国技术…