ARM Linux 시스템의 PCI 열거는 BIOS 또는 Linux에서 수행됩니까? Linux를 부팅하기 전에 PCIe에 대해 아무 작업도 수행하지 않으면 어떻게 됩니까?

ARM Linux 시스템의 PCI 열거는 BIOS 또는 Linux에서 수행됩니까? Linux를 부팅하기 전에 PCIe에 대해 아무 작업도 수행하지 않으면 어떻게 됩니까?

x86 시스템의 BIOS가 PCI 열거(버스 및 장치, 기능 찾기)를 수행한다는 내용을 어딘가에서 읽었습니다. (오늘 한국어 웹 문서에서 다시 봤습니다.https://melonicedlatte.com/computerarchitecture/2019/11/27/234300.html). arm64 기반 시스템은 어떻습니까? 나는에서 찾았다https://patchwork.kernel.org/project/linux-pci/patch/[이메일 보호됨]/arm64는 PCIe 초기화를 위해 UEFI를 사용하며 u-boot가 arm64의 PCIe를 지원하는 것으로 확인되었습니다. 그렇다면 UEFI 펌웨어를 사용하지 않고 u-boot를 사용하고 u-boot 중에 PCIe 관련 작업을 수행하지 않으면 OS(linux)가 열거를 수행합니까? (물론 저는 PCI와 PCIe 컨트롤러용으로 Linux를 구성했습니다.)

답변1

여기서 풀어야 할 내용이 많습니다.

PCI 열거

PCI는아니요PCIe와 동일합니다. 나머지 질문은 PCIe에 관한 것이므로 PCI가 아닌 PCIe에 관한 것이라고 가정합니다.

엄밀히 말하면 PCIe에는 열거형이 없습니다. 버스가 아니라 점대점 링크의 네트워크이기 때문에,다리(컴퓨터 네트워킹에서는 다음과 같이 부를 수 있습니다.네트워크 스위치). 네트워크의 어떤 지점도 전체 네트워크 자체의 기능을 알 필요가 없습니다. 아니요버스,그러니까 없어버스 열거.

운영 체제는 어떤 장치가 있는지 알아야 합니다. 이는 모든 다운스트림 연결된 장치의 루트 컴플렉스를 쿼리하여 수행되며, 각 장치 자체는 모든 다운스트림 연결된 장치에 대한 브리지 역할을 합니다.

이 모든 작업은 운영 체제에 의해 수행될 수 있습니다. 운영 체제는 (일반적으로 PCI와 달리) 손상을 입히지 않고 언제든지 수행할 수 있으므로 운영 체제 자체에서 이 작업을 수행합니다. 그런 다음 실제로 발견된 하드웨어를 설정하고 메모리 매핑 영역을 제공하는 등의 작업을 수행합니다.Linux는 이 열거를 수행합니다.

한 가지 예외가 있습니다. 부팅에 필요한 장치(예: 네트워크 인터페이스, NVMe, 그래픽 컨트롤러 등)는 운영 체제를 실행하기 위해 펌웨어에 필요한 장치입니다. 분명히 이것들을 먼저 찾아야합니다. 그래서:따라서 마더보드 펌웨어도 이 작업을 수행할 수 있습니다..

이는 CPU 아키텍처와는 아무 관련이 없습니다. x86을 사용하든 arm을 사용하든 관계없이 수행하면 됩니다. 일반적으로 "임베디드"라고 부르는 일부 장치에서는 펌웨어를 직접 작성하거나 구성할 수 있으므로 어떤 장치가 어디로 가는지 알아내려고 노력할 필요가 없습니다. 여전히 장치와 통신하고 장치를 설정해야 합니다. 따라서 동일한 이야기입니다. "네트워크 전체" 열거가 아니라 사전 구성된 장치 열거입니다.

x86 시스템에서 BIOS로 완료됨

"BIOS"는 시스템 펌웨어용 API입니다. 실제 펌웨어는 일부 초기화를 수행할 수 있지만 "BIOS" 부분은 PCIe보다 이전 버전과는 아무런 관련이 없습니다.

"UEFI"는 또 다른 API입니다. 더 현대적입니다.

arm64는 PCIe 초기화를 위해 UEFI를 사용합니다.

정확히 무엇입니까?"PCIe 초기화"? 여기서는 매우 정확해야 합니다.

다시 말하지만, ARM64는 PCIe 보유 여부 또는 펌웨어가 PCIe와 상호 작용하는 방식과 관련이 없습니다. 단지 다른 것뿐입니다. ARM, PowerPC 또는 CPU를 포함하여 매우 PC와 유사한 컴퓨터 아키텍처 및 펌웨어를 가질 수도 있고, 내부에 x86을 포함하여 매우 PC가 아닌 아키텍처를 가질 수도 있습니다.

또한 UEFI는 다음을 수행할 수 있습니다.아무것;이름은 말 그대로 "확장 가능한 펌웨어 인터페이스"를 의미합니다. UEFI 모듈은 완전한 웹 서버를 제공합니다! 이것들강의TCP/IP 스택을 제공하려면 추가 UEFI 모듈이 필요하며, 이러한 모듈에는 네트워크 인터페이스를 찾고 통신하기 위해 네트워크 인터페이스 드라이버와 일부 PCIe 열거가 필요합니다.
그러나 이러한 콘텐츠 없이 UEFI를 빌드할 수도 있으므로 PCIe 열거가 필요하지 않습니다.

그러나 어떻게든, 어딘가에서는 소프트웨어 부트로더/OS를 로드해야 할 것입니다. 많은 컴퓨터에서 이 콘텐츠가 포함된 저장 장치는 PCIe를 통해서만 액세스할 수 있습니다. 그래서 어떤 종류의 설정이 필요합니다.

임베디드 x86 SoC 또는 일부 ARM SoC와 같은 다른 시스템에서는 부트로더가 일부 eMMC에 있으며 CPU에 어느 정도 직접 연결됩니다.그것은 모두 컴퓨터의 디자인에 달려 있습니다!

CPU 아키텍처는 주변 장치 인터페이스 설계와 거의 관련이 없습니다.이것들은 단지 다른 것입니다.

예를 들어 플레이스테이션 4(Playstation 4)는 x86이고 PCIe가 있지만 PC가 아니고 BIOS를 가지려고 하지 않으며 하드웨어에도 PC 호환 타이머나 인터럽트 컨트롤러가 없다.

그런 다음 UEFI 펌웨어를 사용하지 않고 u-boot를 사용하면

UEF 인터페이스 이름에서 알 수 있듯이 UEFI는 단순히 펌웨어에서 제공하는(또는 제공하지 않는) 소프트웨어 API입니다. 이는 하드웨어 내부에서 수행하는 작업과는 거의 관련이 없습니다.

관련 정보