Xilinx 提供の Linux カーネルと、Ubuntu の root filesystem をベースに、 zfifo の例題として配布しているDMA loopback の回路を PL にロードするようにしたものが Download のページにあります。
ZYBO, Zybo Z7-20, Ultra96, Ultra96v2 で動作しますので、お手持ちの環境にあわせた ものをダウンロードして、MicroSD カードから起動しましょう。
デバイスツリーの設定などはありません。AXI DMAのレジスタアドレスを指定してロードします。たとえば、a000_0000 番地に AXI DMA が存在する場合、
$ sudo insmod ./zfifo.ko zfifo0=0xa0000000
のようにしてロードします。ダウンロードしたサンプルデザインであれば、ホームディレクトリにある load_driver を使って、
$ sudo sh ./load_driver
で OK です。正しくロードできた場合、dmesg に
[ 32.518852] MM2S_DMASR: 0x10009 [ 32.518854] S2MM_DMASR: 0x10009
のようなログが残りますので、確認してください。( [ ]内の数字は毎回変わります)
デバイス名は /dev/zfifo0 です。
以下のように udev のルールを書いておけば root 以外でもアクセスできます。
% cat /etc/udev/rules.d/zfifo.rules KERNEL=="zfifo*",MODE="666",GROUP="root"
ホームディレクトリにおいてあるテストプログラムを走らせると、DMA loopback のテストが可能です。2つのスレッドを起動して片方が DMA でメモリから読み出し、もう片方がメモリへ書き込みの操作を起動します。読み出したデータがそのまま書き込まれて内容が一致すれば OK 、というわけです。
$ ./libzfifo-test Send on thread 0 Recv on thread 1 Data transferred correctly.
ドライバが読み込まれていないなどの理由で /dev/zfifo0 がオープンできないとなにも表示されずに終了します。