基于ZYNQ的petalinux 2017.4 DMA驱动的移植

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.例程测试

 

 

注:转载请注明出处

  • 5
    点赞
  • 41
    收藏
    觉得还不错? 一键收藏
  • 9
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值