记录一下 EBAZ4205 uboot 和 kernel 的配置过程。
准备
使用的 vivado 版本为 2020.2。
首先将工具链的路径 export 到 PATH
1 | export PATH=/tools/Xilinx/Vitis/2020.2/gnu/aarch32/lin/gcc-arm-linux-gnueabi/bin/:$PATH |
clone 以下 repo 到合适的地方。
我们基本无需改动这些代码,只需要写好设备树就可以了。
创建 arch/arm/dts/zynq-EBAZ4205.dts,定义好设备。
这里有一份我的,参考link。
打开 arch/arm/dts/Makefile ,将我们的 zynq-EBAZ4205.dts 照葫芦画瓢加在 zynq-zc702.dtb 旁边。
1 | make xilinx_zynq_virt_defconfig |
- 去掉 xilinx_zynq_virt_defconfig 里的 CONFIG_ENV_IS_IN_SPI_FLASH=y
linux-kernel 的设备树和 uboot 相同,放在 arch/arm/boot/dts/zynq-EBAZ4205.dts ,和上面差不多改下 arch/arm/boot/dts/Makefile 就可以了。
1 | make xilinx_zynq_defconfig |
得到 arch/arm/boot/uImage 和 arch/arm/boot/dts/zynq-EBAZ4205.dtb 这两个我们启动需要的文件。
JTAG 启动
不想老拔插 sd 卡只好用 jtag 启动了,顺便还可以调试。
我们可以用 xsct 来将 uboot.elf 文件通过 jtag 下载到板子的内存里,不过直接执行是有问题的,通过 emio 连接的 phy 会找不到。需要先执行 fsbl 里的初始化部分。
这里使用 vivado 导出的 xsa 文件包含的 ps7_init.tcl 脚本通过 jtag 来初始化。正常独立启动时是由编译出的 fsbl 来做的。
1 | connect |
调试时在 vitis 新建一个调试配置,将脚本指定到上面那个文件就可以了,你可能需要修改一下文件的路径,如果需要在入口停住则去掉最后的 con。 uboot 会进行一次重定位,因此使用断点需要在配置里用带符号的文件 u-boot 设置好两个地址。
tftp kernel
rootfs 从 link 下载
1 | mkimage -A arm -T ramdisk -C gzip -d arm_ramdisk.image.gz uramdisk.image.gz |
tftp 服务器有很多实现这里我使用 dnsmasq 附带的。编辑/etc/dnsmasq.conf
1 | listen-address=192.168.1.1 |
配置上面这几行就可以。将 uImage,zynq-EBAZ4205.dtb 还有 rootfs 放到/srv/tftp 下,启动
1 | systemctl start dnsmasq |
通过 uart 连接板子执行
1 | setenv ipaddr 192.168.1.10 |
不出意外就能进入 shell 了。
dts
1 | // SPDX-License-Identifier: GPL-2.0+ |