루트 브리지부터 시작하여 PCI 장치 스캔

루트 브리지부터 시작하여 PCI 장치 스캔

나는 이제 linux/pci.h와 연결된 모든 파일에서 PCI(읽기 전용)를 안전하게 스캔한 다음 장치가 일치할 때 pci_slot을 선택하는 방법을 알아내기 위해 수많은 시간을 보냈습니다.

그런데 검색을 시작할 수 있는 루트 브리지나 루트 노드가 없어서 검색을 시작할 수도 없습니다. (검색은 가능한 한 일반적이어야 합니다. 모두 커널 모듈에서 수행됩니다.)

어린이/부모를 추가로 검색하는 기능의 시작점이 필요하다는 것을 알았습니다. 하지만 슬롯을 추가하거나 등록하고 싶지 않습니다(예: pci_scan_bus() 함수로 수행 ->https://elixir.bootlin.com/linux/v5.5.5/source/drivers/pci/probe.c#L3085). Linux Device Drivers 책에서 언급했듯이 기존 방식으로는 PCI 버스를 검색할 수 있는 방법이 없습니다.

루트 노드에 도달하려면 가상 장치/슬롯을 등록한 다음 PCI 버스에 대한 전체 트리를 다시 확인해야 합니까? 2004년 kernel.org 문서에도 커널이 pci 버스를 관리하는 방법에 대한 일부 메커니즘에 대한 주요 정보가 부족합니다.

모든 답변에 감사드립니다 :)

답변1

일부 lspci 도움말을 자세히 살펴본 후 이것을 발견했습니다.

pci_find_bus(0x0, 0x0); //_pci_host_bridge(&(res_bus->dev))의 호스트 버스여야 합니다.

어린이 목록이 다른 장치에 로드되는 것 같습니다. :) 아마도 이것이 미래에 누군가에게 도움이 될 것입니다.

관련 정보