"lspci"에 대한 대안이 있습니까?

"lspci"에 대한 대안이 있습니까?

lspcipetalinux에서는 구현되지 않았습니다. 그럼 대안이 있나요? lspci출력 파일을 읽을 수 있나요 ?

답변1

문서가 /proc/bus/pci/devices도움이 될 수 있습니다:

$ cut -f1,2,18 /proc/bus/pci/devices 
0000    808627a0
0008    808627a1        pcieport
00d8    808627d8        snd_hda_intel
00e0    808627d0        pcieport
00e1    808627d2        pcieport
00e2    808627d4        pcieport
00e3    808627d6        pcieport
00e8    808627c8        uhci_hcd
00e9    808627c9        uhci_hcd
00ea    808627ca        uhci_hcd
00eb    808627cb        uhci_hcd
00ef    808627cc        ehci_hcd
00f0    80862448
00f8    808627b9
00f9    808627df        ata_piix
00fa    808627c5        ahci
00fb    808627da        i801_smbus
0100    10027149        radeon
0200    8086109a        e1000e
0300    80864227        iwl3945
1500    104cac56        yenta_cardbus

폴더에는 /sys/bus/pci/devices더 자세한 내용이 포함되어 있지만 더 광범위합니다.

답변2

sysfs 파일 시스템에서 유사한 정보를 얻을 수 있습니다(예: /sys/device/pci0000:00아래에 기호 링크도 있습니다) /sys/class/pci_bus. lspcilspci를 사용하여 시스템에서 이를 검토하여 익숙해질 수 있는 출력 대응에 대한 몇 가지 단서를 제공하기 때문에 먼저 이에 대해 논의하겠습니다.

다음은 편집된 lscpi출력입니다.

00:00.0 Host bridge: Intel Corporation Xeon E3-1200 v2/3rd Gen Core processor DRAM Controller (rev 09)
00:19.0 Ethernet controller: Intel Corporation 82579V Gigabit Network Connection (rev 04)
00:1c.0 PCI bridge: Intel Corporation 7 Series/C210 Series Chipset Family PCI Express Root Port 1 (rev c4)
00:1c.3 PCI bridge: Intel Corporation 7 Series/C210 Series Chipset Family PCI Express Root Port 4 (rev c4)
00:1c.4 PCI bridge: Intel Corporation 82801 PCI Bridge (rev c4)
00:1c.6 PCI bridge: Intel Corporation 7 Series/C210 Series Chipset Family PCI Express Root Port 7 (rev c4)
00:1c.7 PCI bridge: Intel Corporation 7 Series/C210 Series Chipset Family PCI Express Root Port 8 (rev c4)
03:00.0 SATA controller: ASMedia Technology Inc. ASM1062 Serial ATA Controller (rev 01)
04:00.0 PCI bridge: ASMedia Technology Inc. ASM1083/1085 PCIe to PCI Bridge (rev 03)
06:00.0 Network controller: Qualcomm Atheros AR9485 Wireless Network Adapter (rev 01)
07:00.0 USB controller: ASMedia Technology Inc. ASM1042 SuperSpeed USB Host Controller

알림은 00:1c..3, .4, .6 및 .7뿐만 아니라 03:00.0, 04:00.0, 06:00.0 및 07:00.0입니다. 이는 해당합니다. 후자는 전자에 연결된 장치입니다. /sys/class/pci_bus노드에 대한 심볼릭 링크는 /sys/devices/pci0000:00다음과 같습니다.

0000:03 -> 0000:00:1c.3
0000:04 -> 0000:00:1c.4
0000:06 -> 0000:00:1c.6
0000:07 -> 0000:00:1c.7

콘텐츠에 대한 정보만 원하는 경우 이에 대해 너무 많이 생각할 필요는 없지만 이러한 대응이 lspci출력과 관련될 가능성이 높기 때문에 언급하겠습니다.

이러한 노드(디렉토리) 내부에는 subsystem_device텍스트 형식의 16비트(4자리) 16진수 코드가 포함된 파일이 있습니다 0x84ca. subsystem_vendor및 에도 유사한 16진수 코드가 있지만 device후자는 우리에게 쓸모가 없습니다(참고:아니요시스템 내부 레이블인 장치에서 제공한 장치 ID) 전자는 충분히 구체적이지 않습니다(그러나 여전히 유용할 수 있습니다. 아래 참조).

이러한 코드 목록은 계속해서 늘어나고 있으므로 찾기 좋은 곳은 다음과 같습니다.온라인 데이터베이스. 예제에서 모든 목록을 얻으려면:

> find /sys/devices/pci0000:00 -name subsystem_device -exec cat '{}' \;
0x84ca
0x84ca
0x84ca
0x84ca
0x84ca
0x849c
0x84ca
0x84fb
0x84ca
0x84b7
0x84ca
0x1080
0x84ca
0x850d
0x84ca
0x8488
0x84ca
0x84ca
0x84ca
0x84ca
0x84ca

.find0x084ca는 여러 번 반복됩니다. 데이터베이스에서 "장치 검색"을 검색한 결과 이것이 Intel의 "450NX PCIset 메모리 및 I/O 컨트롤러"인 것으로 나타났습니다. 이렇게 반복되는 이유는 그 안에 다른 것이 삽입되어 있기 때문입니다.

이 모든 내용을 다루지 않고 바로 가기를 사용하여 내 Wi-Fi 컨트롤러가 무엇인지 알아 보겠습니다. /sys/class/net3개의 심볼릭 링크를 나열합니다.

em1
lo
wlp6so

ifconfig출력 등에 사용되는 태그 이름에 해당합니다 . wlp6so링크를 걸어도 pci0000:00/0000:00:1c.6/0000:06:00.0/net/wlp6s0기기를 식별하는 데 도움이 되지 않습니다. subsystem_device트리에는 두 개의 루트 노드가 있습니다 . pci0000:00/0000:00:1c.6첫 번째는 0x84ca(역시 컨트롤러)이고 다른 하나는 입니다 0000:06:00.0.0x850d

여기서 우리는 데이터베이스에 누락된 항목이 있다는 사실을 접하게 됩니다. 추가할 정보를 제출할 수 있는 양식이 있지만 물론 지금 당장은 도움이 되지 않습니다.

"pci 0x850d"에 대한 온라인 검색이 나타납니다.Linux 커널 소스 코드에 대한 참조, 1은 커널이 이러한 코드를 사용하여 적절한 드라이버를 로드하기 때문입니다. 이는 우리에게 무언가를 알려줍니다(표면적으로는 ASUSTEK의 Wi-Fi 칩임). 이는 subsystem_vendor동일한 디렉터리에 있는 노드를 보면 다른 방법으로 추론할 수 있습니다(데이터베이스에서 "공급업체 검색"을 수행하면 Asustek이 온라인인 것으로 나타남). :) 0x1043) 이것이 Wi-Fi 인터페이스를 의미한다는 점을 고려하세요. 2 OEM(Original Equipment Manufacturer)이 Atheros라는 단서도 있습니다. 이는 실제로 lscpi" 06:00네트워크 컨트롤러: Qualcomm Atheros AR9485 무선 네트워크 어댑터(Revision 01)"로 나열되어 있는 ath9k 드라이버의 소스 코드이기 때문입니다.

소스 코드를 보지 않고 lspci문자열을 얻기 위해 장치에 직접 쿼리한다고 가정합니다. 커널은 고유 장치 ID를 사용하여 드라이버를 로드하고 해당 정보가 유용하지 않기 때문에 이 작업을 수행하지 않을 수 있습니다.


1. 이 결과를 바탕으로 살펴보는 더 나은 위치는 grep -R커널 소스 트리의 디렉터리를 사용하는 것입니다. drivers/찾을 수 없다면 어차피 운전자도 없는 것입니다.

2. 물론 드라이버가 로드되지 않고 인터페이스가 닫혀 있으면 그다지 명확하지는 않지만 ID는 여전히 남아 있습니다./sys/devices/...

관련 정보