/dev/i2c'x' 中的 i2c 总线编号是如何分配的?

AKR*_*AKR 5 linux linux-kernel

我想知道Linux中i2c总线号是如何分配的?在我们的传统开发板之一中,我们连接了i2c从设备。当我使用 探测设备时i2cdetect,它显示/dev/i2c1/dev/i2c3

发生了什么事I2C0I2C1的/ dev?这些数字是如何分配的?有人可以对此有所了解吗?

注意:我观察到的是每次启动时,我只能看到 1 和 3 而不是 0 和 1。所有启动都不会改变。如果我想将这些 i2c1 和 i2c3 符号链接到 i20 和 i2c1,这可能吗?

meu*_*euh 5

在我的系统上,i2c 总线是设备/dev/i2c-0等等。这些称为适配器,并按照内核文档文件i2c/dev-interface 中的描述动态分配:

您应该检查 /sys/class/i2c-dev/ 或运行“i2cdetect -l”来确定这一点。适配器编号在某种程度上是动态分配的,因此您不能对它们进行太多假设。他们甚至可以从一个引导切换到下一个。

sudo i2cdetect -l将列出哪条总线做什么,或者您可以查看 /sys/class/i2c-dev/

$ sudo i2cdetect -l|sort
i2c-0   i2c             i915 gmbus ssc                 I2C adapter
i2c-1   i2c             i915 gmbus vga                 I2C adapter
i2c-2   i2c             i915 gmbus panel               I2C adapter
...

$ head /sys/class/i2c-dev/i2c-*/name
==> /sys/class/i2c-dev/i2c-0/name <==
i915 gmbus ssc

==> /sys/class/i2c-dev/i2c-1/name <==
i915 gmbus vga
...
Run Code Online (Sandbox Code Playgroud)

注意:虽然 i2c 总线编号通常是动态分配的,但在某些平台上,Linux 将使用设备树中的信息将特定编号分配给 i2c 适配器。据推测,某些主板可以类似地具有请求特定总线编号的平台驱动程序,以更好地表示硬件布局。内核调用是i2c_add_numbered_adapter().