Linuxドライバ

本ページでは、FPGAマガジンなどで紹介しているZynq向けモジュールのLinuxドライバを紹介します。 最新のLinuxバージョンはFPGAマガジンの執筆当時のバージョンでは無いため、ドライバがKernelバージョンに追従できていない可能性がありますのでご了承ください。

aq_axi_fifoモジュール用ドライバ

ドライバの組み込みとLinux Kernelのビルド

  • 次のようにLinux Kernelをダウンロードしてください。
git clone git://github.com/Xilinx/linux-xlnx.git
  • 次の3つのファイルをダウンロードし、Linux Kernelのdrivers/media/platformへコピーしてください。

    aq_axi_fifo.caq_axi_fifo.haq_axi_fifo_common.h

  • drivers/media/platform/Kconfigに下記のconfigを追加します。
config AQ_AXI_FIFO
    tristate "AQUAXIS AXI FIFO"
    default y
    help
        Aquaxis AXI FIFO.
  • drivers/media/platform/Makefileに下記の1行を追加します。
obj-$(CONFIG_AQ_AXI_FIFO) += aq_axi_fifo.o
  • Linux kernelをビルドします。(クロスコンパイラなどはARMバイナリを生成するものを使用してください。)
make ARCH=arm uImage

アプリケーション

aq_axi_fifoドライバはIOCTLを用いて制御を行います。 aq_axi_fifo_common.hに記述している下記のマジックナンバーでZynqのモジュールを制御します。

#define AA_FIFO_DMABUF_ALLOC        _IOW(AA_FIFO_CMD_MAGIC, 0, unsigned int)
#define AA_FIFO_DMABUF_FREE         _IOW(AA_FIFO_CMD_MAGIC, 1, unsigned int)
#define AA_FIFO_DMA_TXSTART         _IOW(AA_FIFO_CMD_MAGIC, 2, unsigned int)
#define AA_FIFO_DMA_RXSTART         _IOW(AA_FIFO_CMD_MAGIC, 3, unsigned int)
#define AA_FIFO_DMA_TXSTATUS        _IOR(AA_FIFO_CMD_MAGIC, 4, unsigned int)
#define AA_FIFO_DMA_RXSTATUS        _IOR(AA_FIFO_CMD_MAGIC, 5, unsigned int)
#define AA_FIFO_DMA_RESET           _IOR(AA_FIFO_CMD_MAGIC, 6, unsigned int)

AA_FIFO_DMABUF_ALLOC

DMAバッファからメモリを取得します。引数はサイズを指定します。取得が成功した場合、DMAバッファの物理アドレスを返します。

AA_FIFO_DMABUF_FREE

DMAバッファのメモリを開放します。引数は物理アドレスを指定します。

AA_FIFO_DMA_TXSTART

DMAバッファのメモリをZynqのaq_axi_fifoモジュールに転送します。引数は物理アドレスを指定します。

AA_FIFO_DMA_RXSTART

DMAバッファのメモリへZynqのaq_axi_fifoモジュールのデータを取得します。引数は物理アドレスを指定します。

AA_FIFO_DMA_TXSTATUS

aq_axi_fifoモジュールのTX-DMAステータスを返します。

AA_FIFO_DMA_RXSTATUS

aq_axi_fifoモジュールのRX-DMAステータスを返します。

AA_FIFO_DMA_RESET

aq_axi_fifoモジュールをソフトウェア・リセットします。