#author("2025-02-03T07:34:32+00:00","default:osana","osana")
#author("2025-02-03T07:38:19+00:00","default:osana","osana")
* クイックスタート [#mf486c0c]

** サンプルの環境をセットアップする [#i1ca1021]

Xilinx 提供の Linux カーネルと、Ubuntu の root filesystem をベースに、
zfifo の例題として配布しているDMA loopback の回路を PL にロードするようにしたものが
[[Download]] のページにあります。

ZYBO, Zybo Z7-20, Ultra96, Ultra96v2 で動作しますので、お手持ちの環境にあわせた
ものをダウンロードして、MicroSD カードから起動しましょう。

** ドライバのロード [#ad4b6874]

デバイスツリーの設定などはありません。AXI DMAのレジスタアドレスを指定してロードします。たとえば、a000_0000 番地に AXI DMA が存在する場合、

#geshi(bash){{
$ sudo insmod ./zfifo.ko zfifo0=0xa0000000
}}

のようにしてロードします。ダウンロードしたサンプルデザインであれば、ホームディレクトリにある load_driver を使って、

#geshi(bash){{
$ sudo sh ./load_driver
}}
 $ sudo sh ./load_driver

で OK です。正しくロードできた場合、dmesg に

 [   32.518852] MM2S_DMASR: 0x10009
 [   32.518854] S2MM_DMASR: 0x10009

のようなログが残りますので、確認してください。( [ ]内の数字は毎回変わります)

** DMA loopback のテスト [#ve2768c3]

デバイス名は /dev/zfifo0 です。

以下のように udev のルールを書いておけば root 以外でもアクセスできます。

 % cat /etc/udev/rules.d/zfifo.rules
 KERNEL=="zfifo*",MODE="666",GROUP="root"

ホームディレクトリにおいてあるテストプログラムを走らせると、DMA loopback のテストが可能です。2つのスレッドを起動して片方が DMA でメモリから読み出し、もう片方がメモリへ書き込みの操作を起動します。読み出したデータがそのまま書き込まれて内容が一致すれば OK 、というわけです。

#geshi(bash){{
$ ./libzfifo-test
Send on thread 0
Recv on thread 1
Data transferred correctly.
}}
 $ ./libzfifo-test
 Send on thread 0
 Recv on thread 1
 Data transferred correctly.

ドライバが読み込まれていないなどの理由で /dev/zfifo0 がオープンできないとなにも表示されずに終了します。

Front page   Edit Diff History Attach Copy Rename Reload   New Page list Search Recent changes   Help   RSS of recent changes