我想知道如何i2cLinux 中总线号是如何分配的?在我们的遗留开发板之一中,我们有i2c从设备已连接。当我使用 探测设备时i2cdetect
,它显示/dev/i2c1和/dev/i2c3。
发生了什么事i2c0和i2c1在/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()
.