1.首先source 一下 PetaLinux 设置文件,以使 PetaLinux 工具可用。
source /home/lab1038/petalinux/settings.sh
2.新建 PetaLinux 工程,使用命令:
petalinux-create --type project --template zynq --name petalinux_Dma
3.进入该工程目录,并将/mnt 下的 system.hdf 文件拷贝到当前目录(我把Vivado工程下生成的system.hdf 放到共享文件夹下,挂载到了/mnt下面,所以需要从/mnt 下拷贝system.hdf 文件)
cp /mnt/system.hdf .
4.然后指定导入硬件描述文件 system.hdf 的路径 (3的操作已经把system.hdf 拷贝到工程目录下面)
在工程目录下,执行命令:
petalinux-config --get-hw-description=.
由于上述命令包含petalinux-config,执行上述指令后,直接进入misc/config System Configuration界面,如下图:
5.因为操作系统移植到SD卡中,这里需要打开SD选项。
选择Image Packaging Configuration --->Root filesystem type(SD card) --->SD card
然后Save之后,退出Exit即可。
6.在工程目录下新建DMA驱动模块
petalinux-create -t modules -n xilinx-axidma --enable
然后可以在petalinux_Dma---->project-spec---->meta-user---->recipes-modules找到新建的DMA驱动模块文件夹xilinx-axidma
7.在下面链接下可以下载DMA驱动的源文件
https://download.csdn.net/download/qq_39337844/11181780
复制源文件目录driver下的所有.c和.h文件,以及include / axidma_ioctl.h复制到驱动模块文件夹下的files文件下
cp -a driver/*.c driver/*.h include/axidma_ioctl.h /media/lab1038/93184b12-84b0-4f4a-b0ba-abb78a6bff9b/PetaLinux_proj/petalinux_Dma/project-spec/meta-user/recipes-modules/xilinx-axidma/files
并且删除新生成的xilinx-axidma.c文件
rm /media/lab1038/93184b12-84b0-4f4a-b0ba-abb78a6bff9b/PetaLinux_proj/petalinux_Dma/project-spec/meta-user/recipes-modules/xilinx-axidma/files/xilinx-axidma.c
8.修改files文件下的Makefile文件。
打开Makefile文件,把第一行替换成
DRIVER_NAME = xilinx-axidma
$(DRIVER_NAME)-objs = axi_dma.o axidma_chrdev.o axidma_dma.o axidma_of.o
obj-m := $(DRIVER_NAME).o
9.返回files文件上一层目录xilinx-axidma,修改xilinx-axidma.bb文件
替换下图方框中的内容,目的是把步骤8中添加的源文件.c和.h文件添加进去:
SRC_URI = "file://Makefile \
file://axi_dma.c \
file://axidma_chrdev.c \
file://axidma_dma.c \
file://axidma_of.c \
file://axidma.h \
file://axidma_ioctl.h \
file://COPYING \
"
替换后如下图所示:
10.修改设备数,与2015.4不同2017版本的Petalinux,默认自动管理设备树,需要修改设备树的时候,要单独输入配置命令进行配置。在工程目录下输入:
petalinux-config -c device-tree
然后可以在工程目录petalinux_Dma---->components---->plnx_workspace---->device-tree---->device-tree-generation
下找到相关设备树文件
11.在pl.dtsi文件中添加以下内容
axidma_chrdev: axidma_chrdev@0 {
compatible = "xlnx,axidma-chrdev";
dmas = <&axi_dma_0 0 &axi_dma_0 1>;
dma-names = "tx_channel", "rx_channel";
};
同时需要把上图中dma-channel 40400030的xlnx,device-id 0X0改为0X1
否则会开机载入驱动模块时,会出现打印ID冲突的错误:
12.修改CMA内存
打开内核配置界面---Kernel Configuration
petalinux-config -c kernel
选择Kernel Features---->Maximum count of the CMA areas
把默认参数值7改成30,save保存后Exit退出
13.取消管理配置界面的自动管理设备树的选项。
在工程目录下,打开基本配置界面misc/config System Configuration
petalinux-config
取消Auto Config Settings --->Device tree autoconfig选项
14.生成image文件
petalinux-build
然后在工程目下,可以找到生成的image文件
15.打包BOOT.bin文件
进入image---->linux,执行终端命令:
petalinux-package --boot --fsbl zynq_fsbl.elf --fpga design_1_wrapper.bit --u-boot
16.通过终端命令,把BOOT.bin和image.ub复制到SD卡的FAT分区;把rootfs.cpio文件复制到Ext分区内。
SD卡制作分区可参考:
https://blog.csdn.net/dylll321/article/details/86770047
同时把DMA测试例程拷贝到FAT分区。
DMA测试例程,下载链接如下:
17.把SD卡插入ZYNQ开发板,开机启动成功,打印基本信息,输入账号密码
18.载入DMA驱动模块
cd /lib/modules/4.9.0-xilinx-v2017.4/extra
insmod xilinx-axidma.ko
打印载入成功信息:
在dev文件夹下可以看到,axidma驱动载入成功
cd dev
19.挂载SD卡
mount /dev/mmcblk0p1 /mnt
20.例程测试