通过 Linux 用户空间 I/O 驱动程序使用 I2C 或 SPI 设备?

问题描述 投票:0回答:1

Linux 用户空间 I/O 驱动程序可以支持用于 I2C 或 SPI 设备吗?

例如,在 i.MX 或 Zynq 等 SoC 中使用时,是否可以将 UIO 用于 I2C 或 SPI?可以将 I2C 或 SPI 传感器/IC 作为

dev/uioX
设备进行探测,该设备能够
mmap()
并且还可以使用一些基于 GPIO 的中断?

在设备树中,是否可以使用例如在地址0x40的I2C总线上创建UIO设备?

&i2c1 {
    pinctrl-names = "default";
    pinctrl-0 = <&pinctrl_i2c1>;
    clock-frequency = <100000>;
    status = "okay";

    acc_sensor_0: acc_sensor@0x40 {
        reg = <0x40 0x100>;
        compatible = "generic-uio";
        linux,uio-name = "my_acc_sensor_0";
    };
};
embedded-linux i2c spi userspace
1个回答
0
投票

Linux 用户空间 I/O 驱动程序是否可以支持用于 I2C 或 SPI 设备

没有。
I2C和SPI都是总线,有主控制器和从设备。
它是连接到 CPU 的主控制器,因此由 CPU 直接控制(即写入和读取)。总线上从设备的任何 I/O 都必须通过主控制器执行。一种异常异常是中断;从设备可以向 CPU 生成中断,然后由从设备的驱动程序处理。

你的问题不明确;您所说的“I2C 或 SPI 设备”到底指的是什么?

如果您指的是“从设备”,那么您似乎没有意识到这样的从设备不是由CPU直接访问的。从设备将具有只能通过总线访问的寄存器。这些寄存器不会被分配 SoC 物理地址空间中的任何地址。因此,CPU 对从设备寄存器进行内存映射是不可能的。从设备不适合 Linux 用户空间 I/O 驱动程序。 可以使用

i2c-dev

从用户空间控制 I2C 从设备。研究Documentation/i2c/dev-interface.rst. 可以使用

spidev

从用户空间控制 SPI 从设备。研究文档/spi/spidev.rst.

I2C 或 SPI 主控制器不适合作为 Linux 用户空间 I/O 驱动程序。这样的主控制器永远不会有用户空间接口(例如
/dev/

目录中的设备节点),即使它有内核驱动程序。

© www.soinside.com 2019 - 2024. All rights reserved.