레거시 NIC와 같은 32 비트 장치가있는 x86_64 시스템의 경우 : NIC와 DRAM간에 DMA를 수행 할 때는 메모리 주소가 더 낮은 메모리에 있어야합니다 (4GB 이하)?32B PCI 다이브를 사용하는 x86_64 시스템에서 DMA 메모리를 사용하는 방법
그런데 OS가 PCI 장치 용으로 예약 된 메모리 주소 공간 리소스, 즉 BAR에 저장된 주소를 어떻게 알 수 있습니까?
레거시 NIC와 같은 32 비트 장치가있는 x86_64 시스템의 경우 : NIC와 DRAM간에 DMA를 수행 할 때는 메모리 주소가 더 낮은 메모리에 있어야합니다 (4GB 이하)?32B PCI 다이브를 사용하는 x86_64 시스템에서 DMA 메모리를 사용하는 방법
그런데 OS가 PCI 장치 용으로 예약 된 메모리 주소 공간 리소스, 즉 BAR에 저장된 주소를 어떻게 알 수 있습니까?
PCI configuration space에 대한 위키 백과 항목을 참조하십시오. PCI BAR 비트는 메모리 주소 지정 요구 사항을 전달하는 데 사용되며 PCI 열거 중에 구성됩니다.
PCI 장치가 32 비트 (즉, 32 비트 주소 만 처리 할 수 있음) 인 경우 "Locatable"값을 "0"(32 비트)으로 설정하여 아래 주소를 유지합니다 4GB. 디바이스가 64 비트 어드레스를 처리 할 수있는 경우
, 그 구성 중에 PCI 장치는하면 BAR 통해 메모리 요구 연통
마찬가지로 (2)에 "위치 추적"을 설정할 것, 상기 OS 마침내 BAR 설정 구애.
는 문제의 위키 백과 섹션을 인용 : 지정된 BDF 조합 공급 업체 ID 레지스터 읽기가 성공하면 BIOS 또는 OS가 존재 알고. 모든 1을 BAR에 쓰고, 디 지털 주소가 0 인 형식으로 디바이스 요구 메모리 크기를 다시 읽습니다. (SiC)
이 요약하려면 :
그것은 디바이스 하드웨어의 성능에 의존한다.
PCI 장치 열거 중에 호스트 OS가 PCI 장치를 찾으면 BAR 비트를 사용하여 장치에 메모리 주소 위치 정보를 요청합니다. 2 단계 프로세스에서 BAR 자체를 사용하여 먼저 메모리 크기 요구 사항을 설정 한 다음 기본 주소를 구성합니다.