А вдруг у кого-то есть ссылка на рабочий пример драйвера и пользовательского приложения для использования AXI DMA под Petalinux, когда у блока DMA два канала - на прием и на передачу? Желательно без режима ScatterGather, но с обработкой прерываний? Например, с помощью uio driver? У меня тут проблема возникла с правильным указанием совместимых драйверов для dma в device-tree (не знаю, как правильно отредактировать system-user.dtsi)? В настройках bootargs указано
Код
console=ttyPS0,115200 earlyprintk uio_pdrv_genirq.of_id=generic-uio
В настройках ядра драйвер включен (<*>).
Пока пишу так:
Код
/include/ "system-conf.dtsi"
/ {
amba_pl: amba_pl {
#address-cells = <1>;
#size-cells = <1>;
compatible = "simple-bus";
ranges;
axi_dma_0: dma@40400000 {
#dma-cells = <1>;
clock-names = "s_axi_lite_aclk", "m_axi_mm2s_aclk", "m_axi_s2mm_aclk";
clocks = <&clkc 15>, <&clkc 15>, <&clkc 15>;
compatible = "generic-uio";
interrupt-names = "mm2s_introut", "s2mm_introut";
interrupt-parent = <&intc>;
interrupts = <0 29 4 0 30 4>;
reg = <0x40400000 0x10000>;
xlnx,addrwidth = <0x20>;
dma_mm2s: dma-channel@40400000 {
compatible = "generic-uio";
dma-channels = <0x1>;
interrupts = <0 29 4>;
xlnx,datawidth = <0x20>;
xlnx,device-id = <0x0>;
};
dma_s2mm: dma-channel@40400030 {
compatible = "generic-uio";
dma-channels = <0x1>;
interrupts = <0 30 4>;
xlnx,datawidth = <0x20>;
xlnx,device-id = <0x0>;
};
};
};
};
/ {
amba_pl: amba_pl {
#address-cells = <1>;
#size-cells = <1>;
compatible = "simple-bus";
ranges;
axi_dma_0: dma@40400000 {
#dma-cells = <1>;
clock-names = "s_axi_lite_aclk", "m_axi_mm2s_aclk", "m_axi_s2mm_aclk";
clocks = <&clkc 15>, <&clkc 15>, <&clkc 15>;
compatible = "generic-uio";
interrupt-names = "mm2s_introut", "s2mm_introut";
interrupt-parent = <&intc>;
interrupts = <0 29 4 0 30 4>;
reg = <0x40400000 0x10000>;
xlnx,addrwidth = <0x20>;
dma_mm2s: dma-channel@40400000 {
compatible = "generic-uio";
dma-channels = <0x1>;
interrupts = <0 29 4>;
xlnx,datawidth = <0x20>;
xlnx,device-id = <0x0>;
};
dma_s2mm: dma-channel@40400030 {
compatible = "generic-uio";
dma-channels = <0x1>;
interrupts = <0 30 4>;
xlnx,datawidth = <0x20>;
xlnx,device-id = <0x0>;
};
};
};
};
Но в /sys/class/uio/ никаких устройств не появляется...
Буду очень благодарна!