记一次找不到 i2c 设备

记一次找不到 i2c 设备

警告:这篇博客全部为现场复现和日志摘抄

事情是这样的,今天重装我主力机的 manjaro,然后在设置 i2c 权限的时候找不到 i2c 设备了。。。

讲一下我为啥要设置这玩意:
首先 ddcci 要用,第二就是我也喜欢没事捣鼓显卡的 i2c,所以给个权限很有必要

┬─[dzio@dz-pc:~/blog]─[23时18分03秒]
╰─>$ ls /dev/i2c*
fish: No matches for wildcard '/dev/i2c*'. See `help expand`.
ls /dev/i2c*
   ^

首先先寻思是不是有啥内核模块没加载?去网上搜了一圈,啥也没找到。。。
于是祭出 i2cdetect。。。啥也没有:

┬─[dzio@dz-pc:~/blog]─[23时18分06秒]
╰─>$ i2cdetect -l
┬─[dzio@dz-pc:~/blog]─[23时21分31秒]
╰─>$

继续搜资料,貌似 i2c 设备通常在/sys/bus/i2c 下面,一找,还真有

┬─[dzio@dz-pc:~/blog]─[23时21分31秒]
╰─>$ ls /sys/bus/i2c/devices/
i2c-0  i2c-1  i2c-2  i2c-3  i2c-4  i2c-5

what?linux 内核改了?
诶,还有个东西叫 udev,找个配置文件装上,不行!
那 ddcutil 没准改了?装上,运行,我得到了这个

┬─[dzio@dz-pc:~]─[23时06分05秒]
╰─>$ ddcutil detect
Module i2c-dev is not loaded and not built into the kernel.
ddcutil requires module i2c-dev

果然有内核模块没加载! 加载。。。

┬─[dzio@dz-pc:~]─[23时06分28秒]
╰─>$ sudo modprobe i2c-dev
┬─[dzio@dz-pc:~]─[23时06分32秒]
╰─>$ i2cdetect -l
i2c-0 i2c        NVIDIA i2c adapter 0 at 8:00.0   I2C adapter
i2c-1 i2c        NVIDIA i2c adapter 6 at 8:00.0   I2C adapter
i2c-2 i2c        NVIDIA i2c adapter 8 at 8:00.0   I2C adapter
i2c-3 smbus      SMBus PIIX4 adapter port 0 at 0b00 SMBus adapter
i2c-4 smbus      SMBus PIIX4 adapter port 2 at 0b00 SMBus adapter
i2c-5 smbus      SMBus PIIX4 adapter port 1 at 0b20 SMBus adapter

诶嘿!i2c 回来了!
而且由于 udev 的存在,权限都设好了

┬─[dzio@dz-pc:~]─[23时07分02秒]
╰─>$ ls -l /dev/i2c*
crw-rw---- 1 root i2c 89, 0 11月  8 23:06 /dev/i2c-0
crw-rw---- 1 root i2c 89, 1 11月  8 23:06 /dev/i2c-1
crw-rw---- 1 root i2c 89, 2 11月  8 23:06 /dev/i2c-2
crw-rw---- 1 root i2c 89, 3 11月  8 23:06 /dev/i2c-3
crw-rw---- 1 root i2c 89, 4 11月  8 23:06 /dev/i2c-4
crw-rw---- 1 root i2c 89, 5 11月  8 23:06 /dev/i2c-5

有些时候,当遇到一个设备找不到的时候,不妨试试依赖这个设备的工具,那个工具没准会给出解决方案