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

zynq7020 u-boot 速通

zynq u-boot 速通

简介

  • 上回最小系统已经跑起来,证明串口和 ddr 正确配置.
  • 现在我们需要正确配置 网口, qspi, emmc.
    • 网口:通过 tftp 下载 dtb,image,rootfs 在线调试.
    • qspi:固化 boot.bin 到 qspi flash,这样 qspi 启动就可以直接运行 u-boot.
    • emmc:存放 ubuntu_base 跟文件系统.
  • 注意:在 vivado 中可以全部设置,但是在 u-boot 的设备树里,只需要上面 3 个外设就可以了.

1 vivado 配置

略,参考野火皓月,但是网口要如下
在这里插入图片描述

2 裸机测试网口

参考 vitis 运行 lwip 例子,略

3 petalinux 生成测试

- 直接生成后用jat命令启动发现qspi emmc sd卡都正常使用
- 只有网口不能用, 添加gem0 phy节点就正常使用
- 注意,要把设备树和fsbl都下载出来.
# qspi
sf probe 0:0
sf read 0x1000000 0x0 0x10000   // 将 QSPI Flash 0x0 位置的 64KB 数据读取到 RAM 0x1000000
md 0x1000000 0x40               // 查看读取的数据(0x40 = 64 行)

sf erase 0x0 0x10000            // 这个命令会擦除 0x0 ~ 0xFFFF 的数据(64KB)
md 0x1000000 0x40

mw.b 0x1000000 0xAA 0x10000     // mw.b 指令会将 0x1000000 开始的 64KB RAM 填充为 0xAA
sf write 0x1000000 0x0 0x10000  // 把RAM 0x1000000 处的 64KB 数据写入 QSPI 0x0 地址

sf read 0x2000000 0x0 0x10000
md 0x2000000 0x40

# sd卡 emmc
mmc list                        // 查看
mmc dev 0                       // 选择
mmc info                        // 详情

mmc read 0x1000000 0x0 0x800    // 读取 SD 卡的前 1MB(0x800*512) 数据
md 0x1000000 0x40               // 查看内存0x1000000

mw.b 0x1000000 0xAA 0x1000      // 写入内存
mmc write 0x1000000 0x1000 0x8  // 写入0x8*512 =4096(0x1000)
mmc read 0x2000000 0x1000 0x8   // 读出内存
md 0x2000000 0x40

fdt addr 0x100000
fdt print /amba/ethernet@e000b000
fdt print /aliases

mii info
fdt addr 0x100000
fdt print /amba/ethernet@e000b000
mii device
setenv ipaddr 192.168.1.10
setenv serverip 192.168.1.31
ping 192.168.1.31
/include/ "system-conf.dtsi"
/ {

    liases {
		ethernet0 = &gem0;
		serial0 = &uart0;
		spi0 = &qspi;
		mmc0 = &sdhci0;
	};
};

&gem0 {
	phy-handle = <&ethernet_phy>;
	ethernet_phy: ethernet-phy@1 {
		reg = <0x1>;
		device_type = "ethernet-phy";
	};
};

3.1 petalinux 生成的设备树没有 phy 节点

  • 折磨我了好久,发现根本不会把 system-user.dtsi 编译到 system.dtb.
  • 在 extracted.dts 里查看 ethernet@e000b000 都没有 phy 节点.
  • 解决:手动调用 dtc 编译设备树
dtc -I dtb -O dts -o extracted.dts images/linux/system.dtb

3.2 手动调用脚本如下

#!/bin/bash

# @file:    make_dts.sh
# @author:  ccj
# @version: V1.0
# @date:    2025-04-07
# @brief:

INC_DIRS="components/plnx_workspace/device-tree/device-tree \
          project-spec/meta-user/recipes-bsp/device-tree/files"
DTS_PATH="components/plnx_workspace/device-tree/device-tree/system-top.dts"

CPP_INCLUDE_FLAGS=""
for dir in $INC_DIRS; do
    CPP_INCLUDE_FLAGS="$CPP_INCLUDE_FLAGS -I$dir"
done

DTS_INCLUDE_FLAGS=""
for dir in $INC_DIRS; do
    DTS_INCLUDE_FLAGS="$DTS_INCLUDE_FLAGS -i$dir"
done

cpp -nostdinc $CPP_INCLUDE_FLAGS -undef -x assembler-with-cpp "$DTS_PATH" > xtmp.dts
dtc -I dts -O dtb $DTS_INCLUDE_FLAGS -o system.dtb xtmp.dts
dtc -I dtb -O dts -o system.dts system.dtb
rm xtmp.dts

4 大功告成,打包 BOOT.BIN, 固化到 qspi flash

  • 由于完全不相信 petalinux 了,手动调用打包工具自己打包
BOOT.BIN
├── bootgen.bif
├── zynq_fsbl.elf
├── system.dtb
└── u-boot.elf

E:/Xilinx/Vitis/2020.2/bin/bootgen.bat -arch zynq -image bootgen.bif -o BOOT.BIN -w on

4.1 bootgen.bif 如下

the_ROM_image:
{
  [bootloader] zynq_fsbl.elf
  u-boot.elf
  [load=0x100000] system.dtb
}

4.2 固化到 flash

使用vivado即可,略

5 切换到 qspi 启动模式,测试

在这里插入图片描述

在这里插入图片描述

相关文章:

  • 发送加密信息的简单实现【Java】
  • Linux下python虚拟环境搭建及使用
  • k8s 部署spring项目+动态启动pod
  • 【漫话机器学习系列】199.过拟合 vs 欠拟合(Overfit vs Underfit)
  • 常见的归一化(Normalization)方法
  • 【高并发内存池】从零到一的项目:项目介绍、内存池及定长内存池的设计
  • 关于MOS的二十个问题
  • 学习SqlSugar的跨库查询基本用法
  • 【JavaEE】SpringBoot 统一功能处理
  • 视觉SLAM十四讲2nd—学习笔记(一)
  • isce+mintpy水体掩膜
  • “堆积木”式话云原生微服务架构(第一回)
  • Autosar Nm开发问题-部分网络管理报文无法维持网络唤醒
  • 论文阅读笔记——Reactive Diffusion Policy
  • 基于51单片机的正负5V数字电压表( proteus仿真+程序+设计报告+讲解视频)
  • Maven java 项目引入2.0.16版本的slf4j-api后,提示jedis:5.1.0的子依赖slf4j-api:1.7.36与2.0.16冲突
  • (PC+WAP)大气滚屏网站模板 电气电力设备网站源码下载
  • llm开发框架新秀
  • 从 MySQL 切换到国产 YashanDB 数据库时,需要在数据库字段和应用连接方面进行适配 ,使用总结
  • HarmonyOS-ArkUI V2装饰器: @Provider和@Consumer装饰器:跨组件层级双向同步
  • 外国有没有中国代做数学作业的网站/今日广州新闻头条
  • 免费制作微网站/宁波关键词优化平台
  • 网站建设与网页设计可行性分析报告/北京营销推广网站建设
  • 网站接入服务器商查询/免费seo搜索优化
  • 行业b2b网站建设/培训网站制作
  • 哪个网站做网销更好/网络营销与直播电商专业就业前景