友志 发表于 2022-5-24 15:15:35

Linux下使用PL,或者说Linux与PL进行交互


[*]技术支持
[*]LINUX

[*]联系人:林**

[*]手机号:1539655****

[*]邮箱:linyou***@hihonor.com

[*]板卡型号:MZU04A-4EV
如题,想了解在Linux下怎么和PL进行交互,目前能想到的两种方式如下,
1.Linux下直接和PL进行交互,但不知道交互方法,是不是和PS裸机时一样有IP核,直接例化IP核就可以实现如AXI-IIC、AXI-UART等等模块,若了解,请指教。
2.用一个PS的核与PL进行交互,然后通过该PS与Linux核进行交互,即实现Linux与standlone两个核的通信。
以上两种方式哪种实现起来比较简单呢?或者说有其他的方法?

linux-01 发表于 2022-5-25 08:47:53

1、如果是常见的接口类ip核,例如axi-gpio、axi-spi、axi-i2c、axi-uart等,可通过修改设备树(通过vitis生成)在Linux系统内使用对应的子系统。列如axi-uart会直接通过uart子系统在/dev路径下生成ttyPL0设备节点,此时使用echo向设备内写入数据即可在pl uart看到结果。非常见接口,譬如自定义ip或大量数据传输等,通常使用ps端ddr进行交互,通过gic中断实现pl与ps的同步,这种案例相对麻烦。2、这种方法可能不太容易实现。

友志 发表于 2022-5-30 15:41:33

我用vitis生成设备树,在原设备树种添加了如下信息:
amba_pl: amba_pl@0 {
                #address-cells = <2>;
                #size-cells = <2>;
                compatible = "simple-bus";
                ranges ;
                axi_uartlite_0: serial@80000000 {
                        clock-names = "s_axi_aclk";
                        clocks = <&zynqmp_clk 71>;
                        compatible = "xlnx,axi-uartlite-2.0", "xlnx,xps-uartlite-1.00.a";
                        current-speed = <115200>;
                        device_type = "serial";
                        interrupt-names = "interrupt";
                        interrupt-parent = <&gic>;
                        interrupts = <0 89 1>;
                        port-number = <1>;
                        reg = <0x0 0x80000000 0x0 0x10000>;
                        xlnx,baudrate = <0x1c200>;
                        xlnx,data-bits = <0x8>;
                        xlnx,odd-parity = <0x0>;
                        xlnx,s-axi-aclk-freq-hz-d = "100.0";
                        xlnx,use-parity = <0x0>;
                };
        };
但是启动后并没有看到/dev路径下生成的ttyPL0设备节点,有没有例程可以参考下,或者能给我发个修改好的设备树文件吗?

linux-01 发表于 2022-5-31 17:25:12

在aliases里添加serial1 = &axi_uartlite_0;了吗,你的设备树pl端写法没问题
页: [1]
查看完整版本: Linux下使用PL,或者说Linux与PL进行交互