Windows 장치 관리자와 동일한 형식으로 Linux에서 BIOS 장치 이름을 가져오는 방법

Windows 장치 관리자와 동일한 형식으로 Linux에서 BIOS 장치 이름을 가져오는 방법

내 노트북에는 디스플레이 어댑터가 있고 Windows 10에서는 볼 수 있습니다.BIOS 장치 이름에서..

장치 관리자 > 디스플레이 어댑터 > 속성 > 세부 정보 > "BIOS 장치 이름"

거기에서 다음과 같은 팝업이 표시됩니다.\_SB.PCI0.GFX0

동일한 노트북이 Linux를 실행하는 경우 해당 정보를 어떻게 얻을 수 있나요?

건배

고쳐 쓰다

Hackintosh를 구축 중이고 디스플레이 백라이트 수정을 생성하기 위해 SSDT를 구축해야 하기 때문에 이 정보가 필요합니다. 난 도와주고 싶어요Opencore project그리고 (지금은) Linux에서 이를 수행할 수 있는 방법을 제공합니다.유일한 방법네, Windows로 전환해서 사용하세요Device Manager

시도했지만 dmidecodeWindows 에서 제공하고 SSDT를 만드는 데 필요한 형식을 lspci제공하지 않았습니다 .BIOS device name

나는 노력했다acpidump더 가까워졌지만 디컴파일된 출력에는 디스어셈블리 오류가 있습니다. 여기에는 내가 찾고 있는 문자열이 포함되어 있지만 \_SB.PCI0.GFX0해당 파일을 읽고 이를 내 특정 디스플레이 어댑터와 연결하는 스크립트를 만드는 방법을 모르겠습니다. 예를 들어: Intel(R) HD Graphics 4000.

acpidump
다음은 시스템에서 텍스트 파일로 ACPI 테이블을 덤프하기 위해 지금까지 시도한 명령입니다 .

sudo acpidump -o acpidump.out

acpidump 출력에서 ​​이진 ACPI 테이블 추출

acpixtract -a acpidump.out

현재 7개의 ssdt*.data 파일이 있습니다. ssdt1.dat의 바이너리 테이블을 휴먼 소스 코드로 분해했습니다.

iasl -d ssdt1.dat

이렇게 하면 1000개가 넘는 줄 중 처음 60줄에 불과한 매우 큰 .dsl 파일이 생성됩니다.

/*
 * Intel ACPI Component Architecture
 * AML/ASL+ Disassembler version 20190509 (64-bit version)
 * Copyright (c) 2000 - 2019 Intel Corporation
 * 
 * Disassembling to symbolic ASL+ operators
 *
 * Disassembly of ssdt1.dat, Mon Jun  7 09:54:08 2021
 *
 * Original Table Header:
 *     Signature        "SSDT"
 *     Length           0x00001EED (7917)
 *     Revision         0x01
 *     Checksum         0x9C
 *     OEM ID           "COMPAL"
 *     OEM Table ID     "CRV ORB "
 *     OEM Revision     0x00001000 (4096)
 *     Compiler ID      "ACPI"
 *     Compiler Version 0x00040000 (262144)
 */
DefinitionBlock ("", "SSDT", 1, "COMPAL", "CRV ORB ", 0x00001000)
{
    /*
     * iASL Warning: There was 1 external control method found during
     * disassembly, but only 0 were resolved (1 unresolved). Additional
     * ACPI tables may be required to properly disassemble the code. This
     * resulting disassembler output file may not compile because the
     * disassembler did not know how many arguments to assign to the
     * unresolved methods. Note: SSDTs can be dynamically loaded at
     * runtime and may or may not be available via the host OS.
     *
     * To specify the tables needed to resolve external control method
     * references, the -e option can be used to specify the filenames.
     * Example iASL invocations:
     *     iasl -e ssdt1.aml ssdt2.aml ssdt3.aml -d dsdt.aml
     *     iasl -e dsdt.aml ssdt2.aml -d ssdt1.aml
     *     iasl -e ssdt*.aml -d dsdt.aml
     *
     * In addition, the -fe option can be used to specify a file containing
     * control method external declarations with the associated method
     * argument counts. Each line of the file must be of the form:
     *     External (<method pathname>, MethodObj, <argument count>)
     * Invocation:
     *     iasl -fe refs.txt -d dsdt.aml
     *
     * The following methods were unresolved and many not compile properly
     * because the disassembler had to guess at the number of arguments
     * required for each:
     */
    External (_SB_.PCI0.GFX0, DeviceObj)
    External (_SB_.PCI0.GFX0._DOD, IntObj)
    External (_SB_.PCI0.GFX0.AINT, MethodObj)    // Warning: Unknown method, guessing 2 arguments
    External (_SB_.PCI0.GFX0.DD01._ADR, IntObj)
    External (_SB_.PCI0.GFX0.DD01._DGS, IntObj)
    External (_SB_.PCI0.GFX0.DD02._ADR, IntObj)
    External (_SB_.PCI0.GFX0.DD02._BCL, IntObj)
    External (_SB_.PCI0.GFX0.DD02._BCM, IntObj)
    External (_SB_.PCI0.GFX0.DD02._BQC, IntObj)

ssdt1.dat분해 오류가 발생하지 않도록 분해해야 할 수도 있다고 생각합니다 . 그런 다음 분해 파일에서 "Intel(R) HD Graphics 4000"과 같은 이름으로 장치를 검색하거나 적어도 검색할 수 있는 방법이 있습니까? 이것이 BIOS Device Name내 디스플레이 어댑터 라는 것이 분명합니까 ?

아마도 dmidecode, lspci그리고 acpidump모두 하나의 스크립트로 결합될 수 있습니까?

다른 도움을 주시면 대단히 감사하겠습니다.

유연한

답변1

이것이 최선의 솔루션인지, 모든 Linux 배포판에서 작동하는지 모르겠지만 다음 \_SB_.PCI0.GFX0을 사용하여 필요한 정보를 찾을 수 있었습니다.

# cat /sys/class/pci_bus/0000:00/device/0000:00:02.0/firmware_node/path

이를 ACPI 경로라고도 합니다. 이 명령이 나에게 적합한 이유는 무엇입니까?

설명하다
Linux에서 PCI 장치는 16비트 도메인 번호, 8비트 버스 번호, 5비트 장치 번호 및 3비트 기능 번호로 식별됩니다. 마지막 세 숫자는 일반적으로 BDF 또는 B/라고 합니다. 장치의 D/F(버스/장치)/기능).

lspci명령은 다음을 사용하여 이 식별 번호를 표시할 수 있습니다.

# lspci -D
..
0000:00:02.0 VGA compatible controller: VMware SVGA II Adapter
..

이 숫자의 형식은 0000:00:02.0입니다 domain:bus:device:function.

이제 터미널에서 이 명령을 사용하여 디스플레이 어댑터의 ACPI 경로를 찾으세요.

# cat /sys/class/pci_bus/<domain:bus>/device/<domain:bus:device:function>/firmware_node/path

다시 말하지만, 나는 이 주제에 대해 잘 알지 못하며 이 프로세스가 모든 배포판에서 작동하는지 여부는 잘 모르지만 내 배포판에서는 작동합니다 Ubuntu mate 20.04.1.

또 다른 해킹은 및를 사용하여 원래 질문의 단계 를 따르는 것입니다 acpidump. 그런 다음 생성된 디스어셈블리 .dsl 파일을 검색하면 다음 문자열이 발견됩니다.acpixtractiaslDeviceObj외부(SB.PCI0.GFX0, 장치 개체)ACPI 경로가 다음과 같다는 의미입니다.\_SB_.PCI0.GFX0

인용하다
lspci의 출력 해석
유용한 Reddit 게시물

관련 정보