前言
不知不觉,已经写了2篇关于AD9361驱动移植的博文了,今天给大家带来第三篇,主要描述关于利用PetaLinux工具进行AD9361 Linux驱动移植,在完成驱动移植到自己的板子上之后,便可以利用ADI IIO接口使用IIO Scope、MATLAB、Gnuradio等工具对板卡进行访问,我后面会编写几篇关于IIO Scope、MATLAB、Gnuradio等工具访问移植Linux 驱动后板卡的文章;
由于本文会使用到前文“移植AD9361官方驱动到自己板子上 - HDL移植 - NO OS移植”中HDL工程,所以本文就不再赘述vivado工程部分。
一、使用工具及材料
工具:PetaLinux 2019.1
材料:
1、linux-2019_R2.zip,版本很重要,需要在分支里找到与工具适配的版本;地址:
https://github.com/analogdevicesinc/linux
2、meta-adi-2019_R2.zip,同样也需要版本对应;地址:
https://github.com/analogdevicesinc/meta-adi
注意:github网站访问不是很稳定,打不开时需要讲科学方法;另外本文使用PetaLinux工具构建Linux驱动时也需要联网,且需要访问github。
二、实现步骤
1、解压缩linux-2019_R2.zip、meta-adi-2019_R2.zip文件,在Windows或者Linux进行解压缩操作都可以;
2、新建文件夹ad9361_build,用以存放上述解压之后的文件夹,另外在ad9361_build文件夹下新建HDL文件夹,并将“移植AD9361官方驱动到自己板子上 - HDL移植 - NO OS移植”中裁剪得到的*.hdl文件存放其中;
3、进入ad9361_build目录,新建PetaLinux工程,并进入工程根目录
petalinux-create -t project --template zynq -n ad9361_linux
cd ad9361_linux/
3、利用hdl文件配置工程
petalinux-config --get-hw-description …/HDL
4、配置Yocto Settings->User layers,加入 meta-adi-xilinx 和meta-adi-core layers
5、配置linux-kernel -> ext-local-src并指向linux-2019_R2
6、外设配置,根据自己的板卡情况进行配置,比如启动方式、串口、网口指定等等
7、保存并退出配置界面,等待参数配置完成
8、原则上在步骤6中配置了板卡外设后,工具会根据配置自动生成设备树文件,但由于配置为外部内核源码,所以不会自动生成可用的设备树文件,需要到外部内核源码文件中修改设备树,该文件存放在 …/ad9361_build/linux-2019_R2/arch/arm/boot/dts文件夹中
9、由前面两篇文章可知,构建平台为fmcomms2+zed,于是就知道该硬件平台设备树文件为zynq-zed-adv7511-ad9361-fmcomms2-3.dts,根据自己板卡情况修改,设备树语法不是本文重点,需要修改的可以自行学习;此外如果使用了官方硬件平台或者外设连接情况与官方一致,则可以直接跳过此步骤
10、在修改完设备树文件之后,执行以下命令告诉工具使用的设备树文件
echo ‘KERNEL_DTB=“zynq-zed-adv7511-ad9361-fmcomms2-3”’ >> project-spec/meta-user/conf/petalinuxbsp.conf
11、分别执行以下命令配置u-boot、kernel、rootfs,可以根据需要修改,本文使用默认配置
petalinux-config -c u-boot
petalinux-config -c kernel
petalinux-config -c rootfs
12、执行petalinux-build命令构建Linux启动镜像文件
13、 在步骤11、12过程中可能会出现网络问题,如以下情况,这是因为工具需要在github网站上下载文件,而网站无法访问导致的,此时需要科学上网;如果没有条件的,根据github网站间接性限制访问的特性,可以将构建命令分时、多次尝试执行
14、在执行完成所有命令之后,使用以下指令生成BOOT.BIN文件
cd images/linux
petalinux-package --boot --fsbl --fpga --u-boot --force
15、将BOOT.BIN、image.ub放入板卡中,上电启动硬件,验证结果,可见ADI源码中已经嵌入了ad9361驱动相关程序,在Linux系统上电加载期间,将ad9361当做一个普通外设,将其加载进去
16、同时,Linux上电过程中,IIO相关程序也加载了,后续就可以通过它直接操作AD9361 内部配置以及信号收发;到此AD9361 Linux驱动移植完毕。
注意:文件存放位置可以根据个人需要进行变更,本文中涉及到的文件存放路径纯属博主个人习惯。
总结
ad9361 Linux驱动移植官方给出了两种方式,除了本文中用到的利用PetaLinux构建外,还可以采用传统使用源码直接构建的方式,两种方式各有利弊,博主建议使用自己习惯的方式;从官方的实现思路来看,目的是将ad9361通过HDL+Linux驱动的方式,采用IIO将其抽象为一个标准的输出/输出接口,以方便MATLAB、GUNRADIO等工具的接入,对于算法开发者来说,不需要关心底层AD9361的寄存器配置、数据接口驱动等,只需要在MATLAB、GUNRADIO等工具中进行少量的参数定制,便可以将原本处于仿真阶段的通信算法,进行无线空口实验;此外,ADI官方驱动的HDL端采用BD方式搭建,IQ数据采用AXIS方式传输,用户可以加入自己的算法模块,扩展性极强。
到此,经过3篇的ad9361驱动移植过程编写,该芯片驱动部分告一段落,往后会抽空写一些关于使用方面的文章。2024/08/17