zynq的开发主要分为两个阶段:
1)硬件逻辑开发阶段:该过程与传统的fpga 软核cpu(microblaze)开发类似,在vivado中进行。需要在BlockDesign中例化zynq硬核cpu。该阶段综合编译完成后,可以export hardware,生成.hdf文件,交付给第二阶段,软件开发。
2)软件开发。软件开发又分为裸板应用程序开发,以及带操作系统(通常是linux系统)的驱动程序开发和应用程序开发。软件开发在linux主机环境下完成。其中驱动程序、linux镜像编译在xilinx的petalinux环境下完成。(由于zynq的cpu是arm a系列处理器,嵌入式开发人员也可使用通用的yocto开发工具链进行驱动和应用程序的开发,petalinux实际上是将yocto工具链打包,简化了开发步骤)
该部分与microblaze开发类似,在vivado内开发。BlockDesign内zynq cpu的配置可先设置一种开发板的预设置(preset),在预设置的基础上适当修改,以符合设计的需求。综合编译后,可file->export->export hardware输出.hdf文件,供petalinux开发使用。
首先确保linux主机(安装redhat或者ubuntu)正确安装好petalinux开发环境。并将.hdf文件准备好。
1.source安装目录下的petalinux脚本
source /home/petalinux/settings.sh
看是否成功进入petalinux环境:echo $PETALINUX 会回应peta的安装路径
2.创建peta工程
petalinux-create --type project --template zynq --name test
环境会为该工程创建一个test文件夹,进入test文件夹,继续第三步
3.petalinux-config --get-hw-description=/xxx/hdf
/xxx/hdf是hdf文件所在的文件夹,这一步获取了hdf所包含的硬件信息
第三步过程中,会弹出界面,选择启动方式,多线程编译等
4.(可选)创建自定义逻辑ip的驱动,并编译进linux系统中
petalinux-create -t modules --name blink --enable
这一步也可跳过,linux可以后续动态加载驱动模块
驱动模块路径位于test/project-spec/meta-user/recipes-module/blink
5.修改test/project-spec/meta-user/recipes-module/blink下的.bb文件,添加blink.h的文件路径,修改./files下的blink.c
6.test/project-spec/meta-user/recipes-module/blink路径下编译petelinux工程
petalinux-build
编译完成以后,在test/build/tmp/sysroots/plnx_arm/lib/modules/4.9.0-xilinx-v2017.2/extra下有blink.ko驱动目标文件
在test/images/linux下有image.ub u-boot.bin等系统文件,若要用sd卡启动,需要将U-boot打包一下
7.打包
test/images/linux路径下,petalinux-package --boot --format BIN --fsbl zynq_fsbl.elf --u-boot u-boot.elf --fpga xxx.bit,得到BOOT.BIN,将该文件以及image.ub拷贝到sd卡,即可启动linux
启动linux后,进入extra路径下,modprobe blink.ko 加载驱动模块
mknod /dev/blink_Dev c 244 0
mount /dev/xxx/mnt
./blink_app.elf 运行应用程序