Linux 中通过开关配置 I2C 总线

Configuration of I2C bus over a switch in Linux

我的系统有以下简化示意图。

                                   GPIO4
                     +-----------------------------+
                     |             GPIO3           |
                     |  +------------------------+ |
                     |  |          GPIO2         | |
                     |  |  +-------------------+ | |
                     |  |  |       GPIO1       | | |
                     |  |  |  +--------------+ | | |
                     |  |  |  |              | | | |
                   +-+--+--+--+-+            | | | |
I2C1 +-------------+            |            | | | |
                   |            |           ++-+-+-++
I2C2 +-------------+            |    I2C    |       |
                   |   SWITCH   +-----------+  CPU  |
I2C3 +-------------+            |           |       |
                   |            |           +-------+
I2C4 +-------------+            |
                   +------------+

在 Linux 中 implement/configure 最好的方法是什么?为什么?是否有可能以某种方式在设备树中配置它,在 user-space 中导出 4 个 i2c 设备,并且每当有人想要 write/read 到这 4 个 i2c 总线之一时,相应的 GPIO 被断言?

是否只能在内核中实现module/driver?

来自评论:

有一个“i2c-mux-gpio”驱动程序可以帮助解决这个问题。 – @Ian Abbott 2019 年 9 月 12 日在 11:35