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 = <ðernet_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即可,略