在开始构建Zynq SD卡启动镜像之前,我们需要先搭建好开发环境。我强烈建议使用Ubuntu 20.04 LTS作为开发主机系统,这是Xilinx官方推荐的版本,兼容性最好。实测下来,这个版本对各种依赖库的支持最稳定。
首先需要准备一台性能足够的机器。根据我的经验,建议配置至少16GB内存和250GB硬盘空间。Petalinux工具链本身就需要约100GB空间,再加上编译过程中产生的临时文件,200GB是最低要求。我遇到过不少因为磁盘空间不足导致编译失败的情况,所以宁可多分配一些。
安装基础依赖库时,这个命令组合是我多年总结的最稳定方案:
bash复制sudo apt-get install -y tofrodos gawk xvfb git libncurses5-dev tftpd \
zlib1g-dev zlib1g-dev:i386 libssl-dev flex bison chrpath socat \
autoconf libtool texinfo gcc-multilib libsdl1.2-dev libglib2.0-dev \
screen pax xterm build-essential net-tools libtinfo5 tftpd tftp \
openbsd-inetd vim
这里有个容易踩坑的地方:一定要确保安装的是32位兼容库(zlib1g-dev:i386)。我在早期项目中就遇到过因为缺少i386库导致工具链无法正常运行的问题。安装完成后,建议重启系统确保所有环境变量生效。
TFTP服务器的配置是很多新手容易忽略的步骤,但在后续调试阶段非常有用。配置时要注意:
Petalinux的安装过程看似简单,但有几个关键点需要注意。首先,安装包的存放路径不能包含中文或特殊字符,这是很多国内开发者容易犯的错误。我建议在/opt/pkg/petalinux目录下安装,这个路径既符合Linux规范,又能避免权限问题。
安装时常见的几个坑:
遇到/bin/sh链接问题时,可以这样解决:
bash复制sudo rm /bin/sh
sudo ln -s /bin/bash /bin/sh
ls -l /bin/sh # 验证链接是否正确
创建工程时,一定要记住:
我习惯在~/petalinux_projects目录下管理所有工程,这样既方便备份,又不会污染系统目录。创建工程后,第一步就是导入硬件描述文件(.hdf或.xsa),这个文件来自Vivado工程,包含了处理器的所有硬件配置信息。
硬件描述导入后,petalinux-config是最关键的配置环节。这里我分享几个实用技巧:
在SD/SDIO Settings中:
Root filesystem type选择EXT4是最通用的方案,兼容性最好。如果考虑安全性,可以选择加密文件系统,但这会增加启动复杂度。
u-boot配置时要注意:
bash复制petalinux-config -c u-boot
在这个界面中:
内核配置是另一个重点:
bash复制petalinux-config -c kernel
对于NVMe设备支持:
根文件系统配置建议添加以下实用工具:
构建过程相对简单,但耗时较长:
bash复制petalinux-build
这个阶段可能会遇到的问题:
构建完成后,打包boot文件:
bash复制petalinux-package --boot --u-boot --fpga --force
这个命令会生成三个关键文件:
准备SD卡时,建议使用至少16GB的卡。分区方案如下:
在Linux下可以使用fdisk进行分区:
bash复制sudo fdisk /dev/sdX # X为你的SD卡设备号
分区完成后需要正确格式化:
bash复制sudo mkfs.vfat -F 32 -n BOOT /dev/sdX1
sudo mkfs.ext4 -L rootfs /dev/sdX2
文件拷贝时要注意权限问题:
bash复制sudo cp BOOT.BIN image.ub boot.scr /media/user/BOOT/
sudo tar -xzvf rootfs.tar.gz -C /media/user/rootfs/
最后一步是设置正确的文件权限:
bash复制sudo chown root:root /media/user/rootfs/usr/bin/sudo
sudo chmod 4755 /media/user/rootfs/usr/bin/sudo
将SD卡插入开发板,设置启动模式为SD卡启动。连接串口终端(波特率115200),上电后应该能看到启动日志。
常见问题排查:
第一次启动时会提示设置root密码,建议设置一个强密码。登录后可以通过dmesg查看完整的启动日志,这对调试非常有帮助。
在实际项目中,我遇到过因为SD卡质量差导致系统不稳定的情况。所以建议使用知名品牌的工业级SD卡,特别是产品化阶段。另外,温度变化大的环境要考虑SD卡的宽温支持能力。