lspci 명령 대신 파일을 읽어 PCI 장치 나열

lspci 명령 대신 파일을 읽어 PCI 장치 나열

파일에서 PCI 장치 정보를 읽어야 합니다. 하지만 이와 같은 명령을 사용하면 사용할 수 없는 출력이 표시됩니다.

cat /proc/bus/pci/05/00.0

산출:

�h��

이 문제를 어떻게 해결할 수 있나요?

운영 체제: Debian 계열 Linux x64, Kenel 4.19

답변1

/proc/ 아래의 모든 파일에 텍스트가 포함되어 있는 것은 아닙니다.

/proc/bus/pci/05/00.0(및 유사한 파일)에는 텍스트가 아닌 이진 데이터가 포함되어 있습니다. 터미널에 표시하기 위한 것이 아니라 바이너리 데이터 형식을 이해하는 프로그램(적어도 커널 문서나 소스 코드 어딘가에 문서화되어 있음)에서 읽을 수 있도록 되어 있습니다.

내부 내용을 보려면 hexdumpaka를 사용할 수 있습니다 hd.

$ hd /proc/bus/pci/05/00.0
00000000  00 10 72 00 07 04 10 00  03 00 07 01 10 00 00 00  |..r.............|
00000010  01 c0 00 00 04 00 6c d2  00 00 00 00 04 00 28 d2  |......l.......(.|
00000020  00 00 00 00 00 00 00 00  00 00 00 00 00 10 40 30  |..............@0|
00000030  00 00 40 fe 50 00 00 00  00 00 00 00 0a 01 00 00  |[email protected]...........|
00000040

05:00.0에 다른 PCI-e 장치가 있는 것이 거의 확실하므로 출력이 다를 수 있습니다.

답변2

PCI 공급업체/장치 식별자를 찾으려면 /sys/bus/pci/...디렉토리 트리를 사용할 수 있습니다.

for i in /sys/bus/pci/devices/*
do 
    printf "Device ${i##*/}: vendor %s, device %s\n" "$(< $i/vendor)" "$(< $i/device)"
done

내 생각에 /sys디렉터리 계층 구조는 /proc구문 분석하기 어려운 형식의 임의의 기타(프로세스 관련이 아닌) 시스템 정보로 어수선해졌고 커널 개발자는 이를 좋아하지 않았기 때문에 /sys가상 디렉터리 파일에 대한 요구 사항이 더 엄격했기 때문에 생성된 것 같습니다. 분석하기 쉽습니다.

/sys그러므로, 방문하시기 전, 원하시는 정보가 "first" 항목에 있는지 확인해 보시는 것이 좋을 것 같습니다 /proc.

관련 정보