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

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

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

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

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

答案1

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

您应该检查 /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
...

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

相关内容