AKR*_*AKR 5 linux linux-kernel
我想知道Linux中i2c总线号是如何分配的?在我们的传统开发板之一中,我们连接了i2c从设备。当我使用 探测设备时i2cdetect,它显示/dev/i2c1和/dev/i2c3。
发生了什么事I2C0和I2C1中的/ dev?这些数字是如何分配的?有人可以对此有所了解吗?
注意:我观察到的是每次启动时,我只能看到 1 和 3 而不是 0 和 1。所有启动都不会改变。如果我想将这些 i2c1 和 i2c3 符号链接到 i20 和 i2c1,这可能吗?
在我的系统上,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().