!["lspci"에 대한 대안이 있습니까?](https://linux55.com/image/51915/%22lspci%22%EC%97%90%20%EB%8C%80%ED%95%9C%20%EB%8C%80%EC%95%88%EC%9D%B4%20%EC%9E%88%EC%8A%B5%EB%8B%88%EA%B9%8C%3F.png)
lspci
petalinux에서는 구현되지 않았습니다. 그럼 대안이 있나요? 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
. lspci
lspci를 사용하여 시스템에서 이를 검토하여 익숙해질 수 있는 출력 대응에 대한 몇 가지 단서를 제공하기 때문에 먼저 이에 대해 논의하겠습니다.
다음은 편집된 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
.find
0x084ca는 여러 번 반복됩니다. 데이터베이스에서 "장치 검색"을 검색한 결과 이것이 Intel의 "450NX PCIset 메모리 및 I/O 컨트롤러"인 것으로 나타났습니다. 이렇게 반복되는 이유는 그 안에 다른 것이 삽입되어 있기 때문입니다.
이 모든 내용을 다루지 않고 바로 가기를 사용하여 내 Wi-Fi 컨트롤러가 무엇인지 알아 보겠습니다. /sys/class/net
3개의 심볼릭 링크를 나열합니다.
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/...