Linux下能否为i2c-dev用户态驱动的I2C总线自定义命名?设备树可行吗?
为I2C总线分配自定义设备名的方法
可以给Linux的I2C总线分配/dev/my-i2c-bus0这类自定义名称,主要有两种可行方案:
一、用户态udev规则方案
这是无需修改内核或设备树的通用方法,通过udev创建软链接实现自定义名称:
- 先通过
i2cdetect -l命令找到目标I2C总线的内核编号(比如i2c-1)。 - 在
/etc/udev/rules.d/目录下创建规则文件,例如99-my-i2c.rules,写入:SUBSYSTEM=="i2c-dev", KERNEL=="i2c-1", SYMLINK+="my-i2c-bus0" - 执行
udevadm control --reload-rules && udevadm trigger让规则立即生效,之后/dev下就会出现my-i2c-bus0软链接,指向原/dev/i2c-1设备。
二、设备树配合方案
你提供的设备树中dev-name属性并非内核I2C驱动识别的属性,无法直接生效。若要通过设备树调整总线编号,再结合udev实现自定义名称,可按以下方式配置:
- 在设备树根节点下添加
aliases节点,将目标I2C总线映射为指定编号:/ { aliases { i2c0 = &i2c1; // 将硬件i2c1总线映射为内核编号i2c0 }; }; &i2c1 { pinctrl-names = "default"; pinctrl-0 = <&pinctrl_i2c1>; clock-frequency = <100000>; status = "okay"; }; - 编译并烧录设备树后,内核会生成
/dev/i2c-0设备文件,再通过上述udev规则,将其链接为/dev/my-i2c-bus0即可。
注意:Linux内核本身只会生成/dev/i2c-X格式的原生设备文件,完全自定义的名称只能通过udev软链接实现。
内容的提问来源于stack exchange,提问作者Livius
相关产品推荐
相关产品推荐

