#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 がオープンできないとなにも表示されずに終了します。