另一种方式编译ZYNQ镜像

文章目录

  • 1.创建Petalinux工程,生成BOOT.BIN
    • 创建Petalinux工程
    • 配置Petalinux工程
    • 生成BOOT.BIN
  • 2.生成设备树文件
  • 3.编译kernel
    • 添加设备树文件
    • defconfig配置
    • menuconfig 配置
    • 编译内核源码
    • 编译设备树
  • 4.编译rootfs
  • 5.启动开发板
    • 制作SD启动卡
    • 拷贝镜像到FAT分区
    • 将根文件系统解压到 EXT4 分区
    • 启动开发板
  • 6.tcl脚本

1.创建Petalinux工程,生成BOOT.BIN

编写 linux 驱动的时候,经常改动的要素有设备树文件、linux 内核、根文件系统、bit文件,将这些要素独立出来会方便修改。下面步骤是将 bit 文件从原先的 BOOT.BIN 文件独立出来,将 image.ub 文件分开为内核 zImage 和设备树 dtb,并将根文件系统放到 SD 卡的 EXT4 分区

创建Petalinux工程

source /opt/pkg/petalinux/2018.3/settings.sh //设置 petalinux 工作环境
petalinux-create -t project --template zynq -n project //创建 Petalinux 工程
cd project //进入到 petalinux 工程目录下
petalinux-config --get-hw-description ../hdf/xx.sdk/ //导入 hdf 文件

配置Petalinux工程

  1. 进入“Subsystem AUTO Hardware Settings”菜单下,配置调试串口为ps7_uart_0。

在这里插入图片描述

  1. 进入“Advanced bootable images storage Settings”菜单中,进入“dtb image settings”选项并将 image storage media 设置为 primary sd,然后返回最初的配置界面。
  2. 进入到“Image Packaging Configuration”菜单下的“Root filesystem type (INITRAMFS)”子菜单下,选择“SD card”,按键盘上的“Enter”键返回,保存并退出。

生成BOOT.BIN

编译 fsbl 和 uboot,生成 BOOT.BIN 文件。此时BOOT.BIN 文件仅包含 zynq_fsbl.elf 和 u-boot.elf 文件,而没有包含bit文件。

petalinux-build -c bootloader
petalinux-build -c u-boot
petalinux-package --boot --fsbl --u-boot --force

2.生成设备树文件

编译uboot后,会在工程的components/plnx_workspace/device-tree/device-tree/目录下生成设备树相关文件,红圈中的是需要用到的设备树文件,skeleton.dtsi一般不用。

在这里插入图片描述

重新生成设备树文件:

如果更改vivado工程,BOOT.BIN文件不需要变动,但需要重新生成设备树文件。

一、1.重新导入hdf:petalinux-config --get-hw-description hdf 文件路径

  1. 编译uboot:petalinux-build -c u-boot

二、1. 输入hsi进入到hsi命令模式

  1. 执行下面命令得到新的Vivado工程的设备树文件(device-tree-xlnx-xilinx-v2018.3是下载的设备树):
open_hw_design /xxx/xxxx/.../hdf/xx.sdk/xx.hdf
set_repo_path  /xxx/xxxx/.../device-tree-xlnx-xilinx-v2018.3
create_sw_design device-tree -os device_tree -proc ps7_cortexa9_0
generate_target -dir 设备树文件存放路径
  1. 执行exit退出hsi。

3.编译kernel

添加设备树文件

  1. 将生成的设备树文件pcw.dtsi、pl.dtsi、system-top.dts 以及 zynq-7000.dtsi直接拷贝到内核源码目录下的 arch/arm/boot/dts 目录中。

  2. 修改system-top.dts文件:主要修改了 bootargs 属性、添加了 model 属性、网口 0 的 MAC 地址以及给 qspi 进行了分区操作。

/* * CAUTION: This file is automatically generated by Xilinx. * Version: HSI * Today is: Mon Mar 16 02:51:23 2020 */ /dts-v1/; #include "zynq-7000.dtsi" #include "pl.dtsi" #include "pcw.dtsi" / { model = "Alientek ZYNQ Development Board"; chosen { bootargs = "console=ttyPS0,115200 earlyprintk   root=/dev/mmcblk0p2 rw rootwait"; stdout-path = "serial0:115200n8"; }; aliases { ethernet0 = &gem0; i2c0 = &i2c2; i2c1 = &i2c0; i2c2 = &i2c1; serial0 = &uart0; serial1 = &uart1; spi0 = &qspi; }; memory { device_type = "memory"; reg = <0x0 0x20000000>; }; }; &gem0 {local-mac-address = [00 0a 35 00 1e 53]; }; &qspi { #address-cells = <1>; #size-cells = <0>; flash0: flash@0 { compatible = "n25q512a","micron,m25p80"; reg = <0x0>; #address-cells = <1>; #size-cells = <1>; spi-max-frequency = <50000000>; partition@0x00000000 { label = "boot"; reg = <0x00000000 0x00500000>; }; partition@0x00500000 { label = "bootenv"; reg = <0x00500000 0x00020000>; }; partition@0x00520000 { label = "kernel"; reg = <0x00520000 0x00a80000>; }; partition@0x00fa0000 { label = "spare"; reg = <0x00fa0000 0x00000000>; }; }; }; 
  1. 修改 arch/arm/boot/dts 目录下的 Makefile 文件, 将设备树添加上去:

defconfig配置

内核源码目录下执行make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- xilinx_zynq_defconfig

不要漏掉空格!

在这里插入图片描述

menuconfig 配置

需要时再配,先默认。

编译内核源码

(此步骤需要先配置一下环境变量:sptl

输入make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- zImage -j10

编译完成之后会在 arch/arm/boot/目录下生成一个名为 zImage 的内核镜像文件。

在这里插入图片描述

编译设备树

输入make ARCH=arm CROSS_COMPILE=arm-linux-gnueabihf- system-top.dtb -j10

编译成功后会在 arch/arm/boot/dts 目录下生成 system-top.dtb 文件。

在这里插入图片描述

4.编译rootfs

进入到petalinux工程目录下

配置根文件系统免密登录:

  1. petalinux-config -c rootfs
  2. 进入“Image Features —>”菜单下,使能“debug-tweaks”

编译根文件系统:petalinux-build -c rootfs

编译完成后产生的根文件系统压缩包rootfs.tar.bz2、rootfs.tar.gz在工程目录下的images/linux 目录下。

5.启动开发板

制作SD启动卡

格式化为两个分区:FAT32和EXT4
参考:petalinux设计流程

拷贝镜像到FAT分区

包括 zImage(内核镜像,内核源码目录 arch/arm/boot/zImage)、system-top.dtb(内核设备树 dtb 文件,内核源码目录 arch/arm/boot/dts/system-top.dtb)、system.bit(pl 端 bitstream 文件,Petalinux 工程目录下的 images/linux/system.bit)。

然后将 BOOT.BIN 文件(petalinux工程目录下的images/linux/BOOT.BIN)拷贝到 FAT 分区

将根文件系统解压到 EXT4 分区

进入到 rootfs.tar.gz 压缩包文件所在目录(工程目录下的images/linux 目录下)

  1. 执行sudo tar -xzf rootfs.tar.gz -C /media/zr/rootfs ,该路径为SD启动卡对应的 EXT4 分区的挂载点。

  2. 执行sync,将数据同步到SD卡中。

  3. 执行umount /dev/sdb*,卸载SD启动卡。

启动开发板

设置ZYNQ的启动模式为SD卡启动:

在这里插入图片描述

  1. 在 U-Boot 启动 2 秒倒计时之前,按回车或者是空格键停止启动,进入到 U-Boot 的命令行模式,设置环境变量。
env default -a 
setenv bitstream_load_address 0x100000 
setenv bitstream_image system.bit 
setenv bitstream_size 0x300000 
setenv kernel_img zImage 
setenv dtbnetstart 0x2000000 
setenv netstart 0x2080000 setenv default_bootcmd 'if mmcinfo; then run uenvboot; echo Copying Linux from SD to RAM... && 
load mmc 0 ${bitstream_load_address} ${bitstream_image} && 
fpga loadb 0 ${bitstream_load_address} ${bitstream_size} && 
run cp_kernel2ram && run cp_dtb2ram && bootz ${netstart} - ${dtbnetstart}; fi' 

U-Boot 启动内核或在命令行下执行 boot 命令时其实就是去执行 bootcmd,bootcmd 的内容其实就是运行 default_bootcmd
在这里插入图片描述

  1. 执行saveenv,保存环境变量到QSPI flash,这样下次就不用再设置了。
  2. 执行boot,启动内核。

6.tcl脚本

把命令添加进去一块执行

  1. 创建一个.tcl文件,将前面提到的命令写入
# tcl script test hsi::open_hw_design /home/zynq/hdf/xx.sdk/xx.hdf 
hsi::set_repo_path /home/device_tree_library/device-tree-xlnx-xilinx-v2018.3 
hsi::create_sw_design device-tree -os device_tree -proc ps7_cortexa9_0 
hsi::generate_target -dir 设备树文件存放路径 
  1. 执行tcl脚本:xsct xx.tcl

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

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

相关文章

Windows 安装docker详细步骤说明

文章目录 1. 检查系统要求2. 启用硬件虚拟化3. 启用Hyper-V和容器功能4. 下载并安装Docker Desktop5. 配置Docker Desktop6. 安装WSL 27. 验证Docker安装8. 常见问题排查9. 重点说明参考资源 在Windows上安装Docker的详细步骤如下&#xff1a; 1. 检查系统要求 确保您的Window…

数据库断言-数据库连接池

原因&#xff1a;现在的代码是单线程&#xff0c;如果遇到大并发的话就会崩溃&#xff0c;数据库查询就查不过来 措施&#xff1a;需要建立数据库连接池&#xff0c;可以设置连接池的数量 什么是大并发&#xff1a;很多客户端在idea写的程序和数据库建立连接 步骤&#xff1…

性能测试与负载均衡:保证Java应用的稳定性

性能测试与负载均衡&#xff1a;保证Java应用的稳定性 大家好&#xff0c;我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01; 引言 在当今高度竞争的软件市场中&#xff0c;Java应用…

ubuntu 22.04启用rc.local来实现开机启动调用某些脚本

Ubuntu 22.04 中rc.local 服务并没有启用&#xff0c;手动配置的步骤如下 1、检查rc-local.service服务是否已经配置开机启动 rootmydbserver:~# systemctl is-enabled rc-local.service static2、rc-local.service文件增加2行 rootmydbserver:~# vim /lib/systemd/system/r…

SAP Build 3-调用SAP BAPI和调用S4HC API

1. 调用SAP BAPI 1.1 前提 项目已创建 SAP环境登录正常 1.2 引入BAPI SDK 商店中下载BAPI SDK Process中导入BAPI SDK 1.3 新建action group 新建action group时&#xff0c;会要求填写SAP登录信息&#xff0c;根据连接类型分为SSO&#xff0c;Basic和Custom 如果选择SS…

SAP配置发布WebService接口并调用(超级详细)

文章目录 前言一、案例介绍/笔者需求二、WebService是什么&#xff1f; a.传输协议 b.数据协议 c.WSDL d.UDDI 三、WebService 和 WebApi 的区别以及优缺点 a.主要区别 b.优缺点 四、SAP如何发布一个webser…

SpringCloud Gateway 网关获取或修改接口响应数据

文章目录 前言一、获取响应数据并打印 前言 我们的网关在之前只记录了接口请求日志&#xff0c;响应日志是没有做记录的&#xff0c;在后续别人对接我们开放平台时出现了一些问题没法确认当时的一个数值状态&#xff0c;照成了很多不必要的麻烦&#xff0c;后来决定在网关添加上…

C++编程(六)运算符重载

文章目录 一、概念1. 左值和右值2. 运算符重载3. 可以实现重载的运算符和不可以实现重载的运算符 二、双目运算符&#xff08;一&#xff09;说明&#xff08;二&#xff09;实现1. 注意点2. 算术运算符成员函数版本全局函数版本 3. 关系运算符成员函数版本全局函数版本 三、赋…

技术反诈指南丨央视报了!基于“AI换脸”的新型电信网络诈骗猖獗

目录 利用“AI换脸”技术的诈骗 技术上防范新型电信网络诈骗 内蒙古鄂尔多斯市居民李女士近日遭遇了一起新型电信网络诈骗案。诈骗团伙利用“AI换脸”技术&#xff0c;合成了与李女士老同学相似的视频通话&#xff0c;以此作为诈骗的关键手段&#xff0c;成功骗取李女士信任。 …

【linux】使用vnc连接远程桌面,需要安装tigervnc,并在服务端期待,然后在客户端使用tigervnc-viewer进行连接即可

vnc 远程设置方法 需要服务端安装软件&#xff1a; sudo apt install -y tigervnc-standalone-server# 先配置密码使用&#xff1a; tightvncpasswd启动服务&#xff0c;禁用本机 vncserver -localhost no -geometry 1924x1080 :1客户端安装软件&#xff1a; sudo apt insta…

小红书起号运营01

上次我们详细的分享了小红书怎么起号,说直白点就是,怎么开始行动,让你的想法落地。 这次的分享前提是你已经将你的发展路线也就是定位已经有了思路。 比如以现在的最火的或者最容易入门的母婴系列、装修系列以主要发展路线。 或者做一个技能博主:摄影博主、修家电等等 …

1974. 使用特殊打字机键入单词的最少时间

关键点&#xff1a; 无论数组的开头第一位是什么&#xff0c;总是从a开始的&#xff0c;从第一个字母向后走的时候有顺时针和逆时针&#xff0c;取最小值当从第一个字母开始走的时候&#xff0c;用当前位置替换a的作用 class Solution:def minTimeToType(self, word: str) -&g…

C#面:请写出C#中的单例模式

单例模式是一种常用的设计模式&#xff0c;它确保一个类只有一个实例&#xff0c;并提供一个全局访问点来访问该实例。 以下是一种常见的C#中的单例模式实现方式&#xff1a; public class Singleton {private static Singleton instance;private static readonly object loc…

实现资产优化管理:智慧校园资产分类功能解析

在构建智慧校园的过程中&#xff0c;细致入微的资产管理是确保教育资源高效运作的关键一环&#xff0c;而资产分类功能则扮演着举足轻重的角色。系统通过精心设计的分类体系&#xff0c;将校园内的各类资产&#xff0c;从昂贵的教学设备到日常使用的办公物资&#xff0c;乃至无…

嵌入式linux系统中动态链接库实现详解

大家好,linux系统中动态库是如何实现相互链接的?今天简单聊聊动态链接库的实现原理。 假设有这样两段代码,第一段代码定义了一个全量变量a以及函数foo,函数foo中引用了下一段代码中定义的全局变量b。 第二段代码定义了全局变量b以及main函数,同时在main函数中调用了第一个…

中英双语介绍美国的州:伊利诺伊州(Illinois)

中文版 伊利诺伊州&#xff08;Illinois&#xff09;位于美国中西部&#xff0c;是一个人口众多、经济发达的州。以下是对伊利诺伊州各方面的详细介绍&#xff1a; 发音&#xff1a; IIIinois&#xff1a;英 [ˌɪlɪˈnɔɪ] 人口 截至2020年&#xff0c;美国人口普查数据…

​Chrome插件:React Developer Tools为React开发调试而生

React Developer Tools 是什么? 它是允许在Chrome和Firefox开发者工具中检查React组件层次结构的扩展插件。 插件源码下载 源码下载地址:GitHub - facebook/react-devtools at v3 下载完成以后执行红框中的代码,下载react-devtools 源码,源码如下图所示: 插件打包 当前n…

表单外链,支持查看方式设置

06/19 主要更新模块概览 外链设置 跳转缩放 打印调整 数据校验 01 表单管理 1.1 【表单外链】-填写外链新增查看方式设置 说明&#xff1a; 原表单填写外链&#xff0c;填写字段权限和查看权限统一字段设置&#xff0c;用户在填写时看到数据与查看数据一致…

Qt 使用代码布局,而不使用UI布局

一、工程的建立&#xff1a; 1、打开Qt Creator&#xff0c;文件&#xff0c;新建文件或项目 2、选择Application&#xff0c;Qt Widgets Application 3、写入名称&#xff0c;选择qmake 4、选择基类Base class&#xff0c;去除Generate form 务必选择QWidget&#xff0c;若…

交友系统定制版源码| 相亲交友小程序源码全开源可二开_打造独特的社交交友系统

交友系统源码的实现涉及到多个方面&#xff0c;包括前端页面设计、后端逻辑处理、数据库设计以及用户交互等。以下是一个简单的交友系统源码实现的基本框架和关键步骤: 1.数据库设计:用户表:存储用户基本信息&#xff0c;如用户ID、用户名、密码、头像、性别、年龄、地理位置等…