2015-02-03 2 views
3

커널이 PCI/PCIe 열거 및 BAR 할당을 수행하는 방법을 찾고 있습니다.누가 언제 PCI/PCIe 장치 BAR에 기본 주소를 할당합니까?

내가 시작할 때 커널이 BAR의 PCI 기본 주소를 할당 할 것이라고 생각했지만 BAR valuse를보기 위해 (초기 PCI 하위 시스템보다 앞선) pci earlydump를 시도했을 때 모든 기본 주소가 이미 할당되어 있음을 발견했습니다. BIOS가 PCI/PCIe 열거 및 BAR 할당을 수행한다는 의미입니까? BIOS가 각 pci 장치의 기본 주소를 알고 충돌없이 할당하는 방법은 무엇입니까?

그렇다면 임베디드 시스템 (BIOS없이)이 열거하고 PCI/PCIe 장치의 기본 주소를 할당하는 방법은 무엇입니까? 그런데

, 내 PC는 우분투 14.04.1 LTS (x86_64의) 모든 IBM PC 호환 컴퓨터에

+0

BIOS가 커널 부팅 전에 PCI 장치 구성 공간에 대한 일부 할당을 수행하는 것으로 보입니다. 누가 각 장치의 기본 주소를 계산하고 계산할 수있는 BIOS (또는 로더)를 아는 사람이 있습니까? –

답변

2

는, 바는 BIOS에 의해 할당되어있다. Linux는 단순히 버스를 스캔하여 BAR 값을 기록합니다.

일부 MIPS 보드는 BAR이 펌웨어에 의해 지정되는 유사한 접근법을 채택합니다. 그러나 펌웨어에 의한 BAR 할당의 품질은 상당히 다릅니다. 일부 펌웨어는 BAR을 온보드 PCI 장치에 할당하고 모든 애드온 PCI 카드를 무시합니다. 이 경우 Linux는 펌웨어의 할당에만 의존 할 수 없습니다.

펌웨어 할당에 따라 다른 문제가 있습니다. 펌웨어로 주소 범위 설정을 고수해야합니다. 즉, 펌웨어가 0x10000000에서 0x14000000까지의 PCI 메모리 공간을 할당하면 Linux의 다른 주소 공간으로 쉽게 이동할 수 없습니다. 출처 : Bar asssignment in Linux

+0

여기의 펌웨어는 부트 로더 또는 장치 드라이버를 의미합니까? –

+0

@ jia-chiam 시스템에 따라 다릅니다. 인텔은 BIOS를 yes로 설정합니다. 그러나 일부 플랫폼에는 자체 펌웨어가 있습니다. 장치 드라이버가 매우 높은 수준입니다. ur 답장을위한 –

+0

thx. OS가 BAR을 시작할 때 쓰는다고 누군가가 말하면 혼란 스럽지만 x86 시스템에서는 보이지 않는다. –

관련 문제