本ページでは、FPGAマガジンなどで紹介しているZynq向けモジュールのLinuxドライバを紹介します。 最新のLinuxバージョンはFPGAマガジンの執筆当時のバージョンでは無いため、ドライバがKernelバージョンに追従できていない可能性がありますのでご了承ください。
git clone git://github.com/Xilinx/linux-xlnx.git
次の3つのファイルをダウンロードし、Linux Kernelのdrivers/media/platformへコピーしてください。
config AQ_AXI_FIFO
tristate "AQUAXIS AXI FIFO"
default y
help
Aquaxis AXI FIFO.
obj-$(CONFIG_AQ_AXI_FIFO) += aq_axi_fifo.o
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)
DMAバッファからメモリを取得します。引数はサイズを指定します。取得が成功した場合、DMAバッファの物理アドレスを返します。
DMAバッファのメモリを開放します。引数は物理アドレスを指定します。
DMAバッファのメモリをZynqのaq_axi_fifoモジュールに転送します。引数は物理アドレスを指定します。
DMAバッファのメモリへZynqのaq_axi_fifoモジュールのデータを取得します。引数は物理アドレスを指定します。
aq_axi_fifoモジュールのTX-DMAステータスを返します。
aq_axi_fifoモジュールのRX-DMAステータスを返します。
aq_axi_fifoモジュールをソフトウェア・リセットします。