Bash# 创建一个模板项目(推荐 zynqMP 或 versal 模板)
petalinux-create -t project -n my_custom_project --template zynqMP
# 或 versal 模板: --template versal
# 导入你自己的硬件描述(最关键一步!)
petalinux-config --get-hw-description=/path/to/your/my_design_wrapper.xsa
这一步会弹出 menuconfig 界面,把硬件信息导入成功。
# 根文件系统配置(最常用修改的地方)
petalinux-config -c rootfs
# 内核配置(一般用默认,除非你要加驱动)
petalinux-config -c kernel
# u-boot 配置
petalinux-config -c u-boot
# 整体项目配置(BOOT.bin 相关、串口波特率等)
常用修改项举例(rootfs 里):
勾选 petalinux → image features → ssh → dropbear(建议开启,便于远程登录)
增加常用工具: busybox → vi, bash, i2c-tools, gpio-utils 等
添加自己的应用/驱动:将来可以放在 project-spec/meta-user/recipes-apps/
Bash# 第一次构建非常慢(1~3小时,甚至更久,视机器配置)
# 如果只想更新某个部分(速度快很多)
petalinux-build -c kernel # 只重编内核petalinux-build -c rootfs # 只重编根文件系统petalinux-build -c device-tree # 只更新设备树
构建成功后,所有产物都在:
text<project>/images/linux/
├── boot.scr
├── image.ub ← 最重要的!(fit 格式,包含内核+dtb+根文件系统)
├── rootfs.tar.gz
├── zImage / Image
├── system.dtb / pl.dtbo
└── ...
打包
petalinux-package --boot --fsbl images/linux/zynqmp_fsbl.elf \ --u-boot images/linux/u-boot.elf \ --pmufw images/linux/pmufw.elf \ --fpga path/to/your_system.bit \ --force -o images/linux/BOOT.BIN
2. 准备好SD卡,在Linux开发环境中,完成如下操作:# 1. 强制卸载 sdc 下的所有分区(忽略报错)sudo umount /dev/sdc* 2>/dev/null# 2. 彻底擦除卡上原有的分区表和旧签名(解决所有冲突)sudo wipefs -a /dev/sdc# 3. 创建全新的 DOS 分区表sudo parted -s /dev/sdc mklabel msdos# 4. 创建分区 1 (BOOT): 从 1MB 处开始,大小分配 1024MB (即 1GB),格式为 fat32sudo parted -s /dev/sdc mkpart primary fat32 1MiB 1025MiB# 5. 设置分区 1 为可启动 (boot 标志)sudo parted -s /dev/sdc set 1 boot on# 6. 创建分区 2 (RootFS): 从 1025MB 开始,占据剩下的 100% 空间,格式为 ext4sudo parted -s /dev/sdc mkpart primary ext4 1025MiB 100%# 7. 通知系统分区表已更改,等待内核同步sudo partprobe /dev/sdcsleep 2# 8. 无交互执行格式化sudo mkfs.vfat -F 32 -n BOOT /dev/sdc1sudo mkfs.ext4 -F -L rootfs /dev/sdc2echo "🎉 分区与格式化已全部自动完成!"
# 1. 创建挂载点并挂载两个分区sudo mkdir -p /mnt/sd-boot /mnt/sd-rootfssudo mount /dev/sdc1 /mnt/sd-bootsudo mount /dev/sdc2 /mnt/sd-rootfs# 2. 拷贝启动文件到 BOOT 分区 (fat32)sudo cp images/linux/BOOT.BIN /mnt/sd-boot/sudo cp images/linux/image.ub /mnt/sd-boot/sudo cp images/linux/boot.scr /mnt/sd-boot/# 3. 解压根文件系统到 rootfs 分区 (ext4)sudo tar -xzvf images/linux/rootfs.tar.gz -C /mnt/sd-rootfs/# 4. 强制将缓存写入 SD 卡 (这一步必须有,防止文件损坏)sync# 5. 卸载 SD 卡sudo umount /mnt/sd-boot /mnt/sd-rootfssudo rm -rf /mnt/sd-boot /mnt/sd-rootfsecho "✅ 镜像烧录彻底完成!现在可以拔出 SD 卡插到开发板上了!"