Linux에서 UEFI 하드웨어 정보에 액세스

Linux에서 UEFI 하드웨어 정보에 액세스

UEFI를 통해 하드웨어에 대한 정보를 얻고 싶습니다. Linux에서 fwts 도구를 사용하여 efi 변수를 가져와 덤프할 수 있다는 것을 알고 있습니다. 또한 UEFI에서 관리하는 모든 장치를 표시하는 EFI 셸의 "device" 명령에 대해서도 알고 있습니다. 하지만 Linux에서 이 정보를 얻는 방법은 없습니다. 다른 도구를 사용하여 하드웨어에 대한 정보를 얻을 수 있는 방법이 있다는 것을 알고 있지만 UEFI를 사용하는 것이 가능한지(연구에 사용하는 경우) 알고 싶습니다.

답변1

UEFI 관리 장치가 없습니다. Linux 운영 체제가 UEFI ExitBootServices 기능을 호출하기 때문입니다. 이는 운영 체제가 모든 장치 관리를 시작하는 데 필요합니다.

최신 운영 체제에는 하드웨어 장치용 드라이버가 포함되어 있습니다. 단일 장치를 두 개의 서로 다른 드라이버로 구동해서는 안 됩니다. 여기에는 하위 장치를 열거하고 통신하는 데 사용되는 상위 장치/"버스"가 포함됩니다.

예를 들어, 모니터의 USB 허브는 마더보드의 PCI-E 슬롯에 연결되는 PCI-E 카드의 USB-C 포트를 통해 컴퓨터에 연결됩니다. 부팅 펌웨어는 이 USB 포트에 연결된 USB 저장 장치에서 EFI 실행 파일을 로드할 수 있습니다. 그러나 실행 파일을 실행하고 UEFI ExitBootServices를 호출하면 이 모든 것이 제어됩니다.

따라서 일반적인 규칙은 운영 체제가 연결된 하드웨어를 열거한다는 것입니다. 펌웨어는 더 이상 제어할 수 없습니다. 현재 연결된 하드웨어를 열거하고 합리적인 결과를 얻도록 펌웨어에 요청할 수 없습니다.

일반적인 규칙에는 예외가 있습니다. 그들은 모두 다루기가 매우 어렵습니다. 작성된 질문에는 컴퓨터에 적용되는 모든 예외를 열거할 이유가 포함되어 있지 않습니다. 그러니 하지 마세요.

일부 하드웨어 정보는 ACPI 및 DMI를 통해 확인할 수 있습니다. 기술적으로 ACPI 테이블은 포인터를 전달하여 UEFI를 통해 제공됩니다(UEFI가 전달한 OS의 메모리 맵에 관련 메모리를 예약하는 것으로 추측됩니다). 아마도 DMI도 비슷할 것입니다.

DMI 명령은 dmidecode주로 식별자 모음인 것으로 보입니다. 이들 중 일부는 부팅 시 하드웨어에서 수집됩니다. 이들 중 어느 것도 포괄적일 필요는 없으므로 기본적으로 필요한 모든 하드웨어 장치를 찾으려면 버스 드라이버가 필요합니다.

acpidump, 및 를 포함하여 많은 ACPI 명령이 있습니다 acpixtract. 이러한 도구 중 하나는 운영 체제가 다양한 경우에 실행하는 AML이라는 해석 언어용 디스어셈블러입니다.

AML은 다소 무섭게 들릴 수도 있지만 적어도 운영 체제 드라이버와 AML 드라이버가 동일한 하드웨어와 연결되어 충돌을 일으키지 않도록 설계되었습니다. 예를 들어 운영 체제에는 임베디드 컨트롤러 장치용 드라이버가 있으며 AML은 실제로 운영 체제 드라이버와 통신할 수 있습니다. 또는 ACPI는 AML이 직접 사용할 수 있도록 특정 하드웨어 리소스를 예약할 수 있으며 OS는 해당 리소스의 사용이 허용되지 않음을 알 수 있습니다.

ACPI는 또한 이전 버전의 ISA PNP를 대체합니다. 이는 운영 체제 자체에서 열거할 수 없는 레거시 장치(예: 직렬 포트)를 열거하는 데 사용됩니다.

마찬가지로 ACPI는 명목상 운영 체제에 초기 PCI 레지스터 또는 IO 메모리 주소를 찾도록 지시하는 역할을 합니다. (저는 최신 상태가 아닙니다. 그러나 ACPI가 아니오라고 하면 Linux가 이에 대한 일반 주소를 조사하려고 시도하는 것을 상상할 수 있습니다.)

많은 장치는 PCI 버스를 통해 직접 또는 간접적으로 액세스됩니다.

IIRC Windows는 PCI를 ACPI의 하위 장치로 표시하여 장치 관리자에 이를 표시합니다. Linux에는 문제가 없는 것 같습니다( pci0000:00/방금 로그인 했습니다 /sys/devices). ACPI->PCI가 기본적으로 노출할 필요가 없는 특수 형식인지, 아니면 Linux에서 특별히 처리하고 신경 쓰지 않는지 기억이 나지 않습니다. ACPI를 상위 장치로 노출합니다.

관련 정보