SMBus 통신이 작동하지 않습니다. smbus.h가 누락되었습니다

SMBus 통신이 작동하지 않습니다. smbus.h가 누락되었습니다

CentOS 8.0에서 SMBus 장치와 통신하려고 합니다. i2c-tools와 libi2c를 설치했습니다. 행위

find / -name "smbus.h" 2>/dev/null

결과를 반환하지 않습니다. 달리기

i2cdump 

작동하지 않습니다.

i2cdump 4 0x12 sp 
"Error: Block read failed, return code -6"

주문하다

i2cget 

"오류: 읽기 실패"를 반환합니다.

다음 블록에서 읽기 위해 ac 프로그램을 직접 컴파일하려고 합니다.이 가이드하지만 컴파일하려고 하면 다음과 같이 표시됩니다.

"치명적인 오류: i2c/smbus.h: 해당 파일이나 디렉터리가 없습니다."

yum whatprovides */smbus.h 

kernel-devel에 대한 일부 결과를 표시하지만 설치가 도움이 되지 않습니다. smbus.h 파일이 비어 있습니다. SMBUS와 통신하는 방법은 무엇입니까?

i2cdetect -l 

프로그램

i2c-3  i2c    DPDDC-C                     I2C adapter
i2c-1  i2c    i915 gmbus dpc              I2C adapter
i2c-4  smbus  SMBus I801 adapter at f040  SMBus adapter
i2c-2  i2c    i915 gmbus misc             I2C adapter
i2c-0  i2c    i915 gmbus dpb              I2C adapter

통신회사 답변 후 업데이트

i2cDetect -F 4 출력:

Functionalities implemented by /dev/i2c-4: 
I2C                              no 
SMBus Quick Command              yes 
SMBus Send Byte                  yes 
SMBus Receive Byte               yes 
SMBus Write Byte                 yes 
SMBus Read Byte                  yes 
SMBus Write Word                 yes 
SMBus Read Word                  yes 
SMBus Process Call               no 
SMBus Block Write                yes 
SMBus Block Read                 yes 
SMBus Block Process Call         no 
SMBus PEC                        yes 
I2C Block Write                  yes 
I2C Block Read                   yes

i2c 감지 4 출력:

     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- 08 -- -- 0b -- -- -- -- 
10: 10 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
40: -- -- -- -- 44 -- -- -- -- -- -- -- -- -- -- -- 
50: 50 -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
70: -- -- -- -- -- -- -- --       

편집 2: 내가 읽으려고 했던 장치가 0x0b인 것을 발견했습니다. 다음을 사용하여 i2c 덤프를 성공적으로 수행할 수 있습니다.

i2cdump 4 0x0b

그러나 이는 오류 검사 기능이 있는 smbus 장치이므로 올바른 명령은 다음과 같습니다.

i2cdump 4 0x0b sp

하지만 이 명령을 사용하면 이 오류가 발생합니다.

오류: 반환 코드 -74로 인해 블록 읽기에 실패했습니다.

답변1

Unix 및 Linux StackExchange에 오신 것을 환영합니다!

이 라이브러리 패키지를 사용하는 자신만의 프로그램을 컴파일하려면 libi2c해당 개발 패키지도 설치해야 합니다 libi2c-devel.


i2cdump및 의 i2cget경우 유용한 작업을 수행하려면 버스 번호/이름과 버스 주소를 지정해야 하는 것 같습니다.

귀하의 경우 smbus i2c-4또는 버스 번호 4. 기본적으로 도구는 버스 번호 0(예: SMBus 대신 i2c)을 사용하려고 시도할 수 있으며 해당 버스는 이미 i915 GPU 드라이버의 제어를 받고 있을 수 있으며 이는 명령이 실패하는 또 다른 이유일 수 있습니다.

모든 i2c/SMBus 어댑터가 모든 명령을 지원하는 것은 아닙니다. 먼저 i2cdetect -F 4SMBus 어댑터가 지원하는 명령을 확인하세요. 출력은 다음과 같습니다:

# i2cdetect -F 4
Functionalities implemented by /dev/i2c-4:
I2C                              no
SMBus Quick Command              yes
SMBus Send Byte                  yes
SMBus Receive Byte               yes
SMBus Write Byte                 yes
SMBus Read Byte                  yes
SMBus Write Word                 yes
SMBus Read Word                  yes
SMBus Process Call               no
SMBus Block Write                yes
SMBus Block Read                 yes
SMBus Block Process Call         no
SMBus PEC                        yes
I2C Block Write                  yes
I2C Block Read                   yes

다음과 같이 버스에서 장치 감지를 실행할 수도 있습니다.

# i2cdetect 4
WARNING! This program can confuse your I2C bus, cause data loss and worse!
I will probe file /dev/i2c-4.
I will probe address range 0x03-0x77.
Continue? [Y/n] 
     0  1  2  3  4  5  6  7  8  9  a  b  c  d  e  f
00:          -- -- -- -- -- 08 -- -- -- -- -- -- -- 
10: -- -- -- -- -- -- -- -- -- UU -- UU -- -- -- -- 
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
30: 30 31 -- -- 34 35 -- -- -- -- -- -- -- -- -- -- 
40: -- -- -- -- 44 -- -- -- -- -- -- -- -- -- -- -- 
50: -- 51 -- 53 -- -- -- -- -- -- -- -- -- -- -- -- 
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- 
70: -- -- -- -- -- -- -- --       

그러면 버스의 간단한 명령에 응답하는 것으로 나타나는 버스 주소 값이 나열됩니다. 유효한 주소 및 버스 명령 목록을 사용하여 버스의 개별 장치 검색을 시작할 수 있습니다.

관련 정보