파일에서 PCI 장치 정보를 읽어야 합니다. 하지만 이와 같은 명령을 사용하면 사용할 수 없는 출력이 표시됩니다.
cat /proc/bus/pci/05/00.0
산출:
�h��
이 문제를 어떻게 해결할 수 있나요?
운영 체제: Debian 계열 Linux x64, Kenel 4.19
답변1
/proc/ 아래의 모든 파일에 텍스트가 포함되어 있는 것은 아닙니다.
/proc/bus/pci/05/00.0
(및 유사한 파일)에는 텍스트가 아닌 이진 데이터가 포함되어 있습니다. 터미널에 표시하기 위한 것이 아니라 바이너리 데이터 형식을 이해하는 프로그램(적어도 커널 문서나 소스 코드 어딘가에 문서화되어 있음)에서 읽을 수 있도록 되어 있습니다.
내부 내용을 보려면 hexdump
aka를 사용할 수 있습니다 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
.