1. 环境准备与工具链搭建搞ZYNQ开发最头疼的就是环境配置特别是这种老矿板EBAZ4205。我当初用Ubuntu 20.04编译时踩了大坑各种库版本冲突搞得头大。后来老老实实换回16.04才顺利跑通。建议直接上Ubuntu-16.04.4-desktop-amd64.iso别折腾新系统。装依赖库时有个小技巧先运行sudo apt-get update更新源否则可能遇到包找不到的情况。完整依赖列表如下sudo apt-get install tofrodos iproute2 gawk gcc g git make net-tools \ libncurses5-dev tftpd zlib1g:i386 libssl-dev flex bison libselinux1 \ gnupg wget diffstat chrpath socat xterm autoconf libtool tar unzip \ texinfo zlib1g-dev gcc-multilib build-essential libsdl1.2-dev \ libglib2.0-dev screen pax gzip automakePetaLinux版本选择很关键2018.3是最后一个自带交叉编译器的版本。下载petalinux-v2018.3-final-installer.run后记得给执行权限chmod x petalinux-v2018.3-final-installer.run ./petalinux-v2018.3-final-installer.run /opt/petalinux-v2018.3安装路径建议选/opt目录避免权限问题。完成后一定要配置环境变量source /opt/petalinux-v2018.3/settings.sh2. 源码获取与uboot定制Xilinx的uboot和内核源码要从GitHub下载指定tagwget https://github.com/Xilinx/u-boot-xlnx/archive/refs/tags/xilinx-v2018.3.zip wget https://github.com/Xilinx/linux-xlnx/archive/refs/tags/xilinx-v2018.3.zip解压后重点在uboot配置。EBAZ4205没有官方支持需要基于zc702配置修改。我整理了个自动化脚本run.sh#!/bin/bash make ARCHarm CROSS_COMPILEarm-linux-gnueabihf- distclean make ARCHarm CROSS_COMPILEarm-linux-gnueabihf- zynq_ebaz4205_defconfig make ARCHarm CROSS_COMPILEarm-linux-gnueabihf- -j$(nproc)设备树文件要特别注意GPIO定义。矿板的LED和按键GPIO编号与开发板不同gpios gpio0 54 GPIO_ACTIVE_LOW; // 绿色LED gpios gpio0 20 GPIO_ACTIVE_HIGH; // 电源按键NAND分区配置直接影响系统启动这是我的分区方案partition0 { label nand-fsbl-uboot; reg 0x0 0x300000; }; partition1 { label nand-linux; reg 0x300000 0x500000; };3. Linux内核编译与优化编译内核前要先清理旧配置make ARCHarm CROSS_COMPILEarm-linux-gnueabihf- distclean make ARCHarm CROSS_COMPILEarm-linux-gnueabihf- xilinx_zynq_defconfig关键配置项需要手动调整启用CONFIG_GPIO_SYSFS驱动LED控制关闭CONFIG_DEBUG_KERNEL减少内核体积设置CONFIG_CMDLINEconsolettyPS0,115200 rootwait生成uImage时加载地址很关键make ARCHarm CROSS_COMPILEarm-linux-gnueabihf- UIMAGE_LOADADDR0x8000 uImage实测发现内核大于3MB时启动会失败解决方法禁用不需要的驱动模块使用XZ压缩替代gzip移除调试符号strip vmlinux4. 根文件系统与启动配置推荐使用Linaro的Ubuntu根文件系统wget https://releases.linaro.org/archive/12.07/ubuntu/precise-images/ubuntu-desktop/linaro-precise-ubuntu-desktop-20120723-305.tar.gz tar -xzf linaro-precise-ubuntu-desktop-20120723-305.tar.gz -C /mnt/rootfsuEnv.txt配置决定启动行为这是我的优化版本bootargsconsolettyPS0,115200 root/dev/mmcblk0p2 rw rootfstypeext4 rootwait uenvcmdrun sdboot sdbootfatload mmc 0 0x0 devicetree.dtb \ fatload mmc 0 0x8000 uImage \ bootm 0x8000 - 0x0SD卡分区建议第一分区FAT32 (100MB)存放BOOT.bin、uImage等第二分区EXT4 (剩余空间)根文件系统5. 硬件调试与性能优化网络性能差可能是PHY电路问题检查RTL8211E的RX/TX差分对补焊缺失的49.9Ω终端电阻调整时钟偏斜ethtool -s eth0 rx-fixed-delay 50GPIO控制实测代码# LED控制 echo 1 /sys/class/leds/green/brightness # 按键检测 cat /proc/interrupts | grep gpioCPU频率调节echo performance /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor6. 常见问题解决启动卡在Starting kernel...检查uImage加载地址是否正确确认设备树兼容性dtc -I dtb -O dts -o test.dts devicetree.dtbNAND识别失败检查pinctrl配置dmesg | grep nand验证时序参数mtdinfo -aUSB设备不工作更新内核配置启用CONFIG_USB_EHCI_HCD检查VCC电压是否为5VSD卡频繁掉卡调整SDHCI时钟echo 25000000 /sys/kernel/debug/mmc0/clock更换高质量SD卡7. 进阶开发技巧自定义FPGA逻辑加载在u-boot中添加PL配置命令#define CONFIG_FPGA_LOAD_CMD fpga loadb 0 /path/to/bitstream内核模块开发编译外部模块需要指定内核路径KERNEL_SRC/path/to/linux-xlnx性能监控工具安装sysstat包后使用mpstat -P ALL 1 # CPU监控 iostat -dx 1 # IO监控温度监测通过XADC读取芯片温度cat /sys/bus/iio/devices/iio:device0/in_temp0_raw