Linux kernel 通过内核和用户空间共享I2C驱动程序

Linux kernel 通过内核和用户空间共享I2C驱动程序,linux-kernel,alsa,device-tree,Linux Kernel,Alsa,Device Tree,我的硬件设计使用相同的I2C控制器,用于由内核模块控制的芯片(声音ASoC中的DAC和ADC)和我想要从用户空间控制的设备(I2C端口扩展器->继电器)。我可以在ASoC devicetree文件中使用控制器,同时从用户空间库中使用它吗?如果是这样,我如何在内核和用户空间之间保护/锁定对控制器的访问以避免I2C事务冲突?您可以将该接口与libi2c库一起使用。Ian,非常感谢。我不知道的是,我是否可以通过用户空间中的I2C dev使用相同的I2C控制器来控制一些I2C设备,并将其分配(通过dev

我的硬件设计使用相同的I2C控制器,用于由内核模块控制的芯片(声音ASoC中的DAC和ADC)和我想要从用户空间控制的设备(I2C端口扩展器->继电器)。我可以在ASoC devicetree文件中使用控制器,同时从用户空间库中使用它吗?如果是这样,我如何在内核和用户空间之间保护/锁定对控制器的访问以避免I2C事务冲突?

您可以将该接口与
libi2c
库一起使用。Ian,非常感谢。我不知道的是,我是否可以通过用户空间中的I2C dev使用相同的I2C控制器来控制一些I2C设备,并将其分配(通过devicetree)来同时控制内核模块中的几个ASoC编解码器,而不必担心以某种方式保护I2C事务。例如,在rust(嵌入式rust)中,通过多线程中的单个I2C控制器访问多个设备必须受到保护。这里还介绍了并发访问(用户空间与内核驱动程序),谢谢!是的,您可以使用相同的控制器。打开/dev/i2c-N设备后,需要使用
i2c_slave
ioctl设置从机地址。(如果从机地址已经在使用中,它将失败,但请注意,一些设备将响应多个从机地址,因此要小心!)内核在事务期间锁定I2C适配器,因此不会因为总线上的多个事务同时发生冲突。我漏掉了一个字:“内核锁定I2C适配器的[bus]在交易期间”。