나는 방법을 알고 싶다i2cLinux에서 버스 번호는 어떻게 할당됩니까? 우리의 레거시 개발 보드 중 하나에는i2c슬레이브 장치가 연결되었습니다. 프로빙 장치를 사용하면 다음과 같이 i2cdetect
표시됩니다./dev/i2c1그리고/dev/i2c3.
무슨 일이에요i2c0그리고i2c1존재하다/개발자? 이 번호는 어떻게 할당되나요? 누구든지 이것에 대해 통찰력을 줄 수 있습니까?
노트: 시작할 때마다 0과 1이 아닌 1과 3만 보이는 것을 관찰했습니다. 이는 모든 출시에 대해 변경되지 않습니다. 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()
.