2021年4月27日 星期二

iASL - ASL Optimizing Compiler and Disassembler

參考網站
ACPICA

Errors, Warnings, and Remarks

-ve
只回報Error,忽略Warning及Remark。

編譯 DSDT0000.dsl時只回報 Error iasl.exe -ve DSDT0000.dsl

AML Disassembler

-d <f1 f2 ...>
反組譯 AML檔案回 ASL(*.dsl)

反組譯 DSDT0000.bin回 DSDT0000.dsl 的ASL檔案 iasl.exe -d DSDT0000.bin

-e <f1 f2 ...>
在反組譯AML時,會遇到有些 unresolve external control method,用以指定含有其
external control method的 AML檔

反組譯DSDT0000.bin時,指定 SSDT0000.bin及 SSD10000.bin為含有其
external control method的AML檔
iasl.exe -e SSDT0000.bin SSD10000.bin -d DSDT0000.bin

指定所有 SSD*.bin為含有DSDT0000.bin external control method的AML檔
iasl.exe -e SSD*.bin -d DSDT0000.bin

2021年4月13日 星期二

asl.exe - Microsoft ASL Compiler

參考網站
microsoft-asl-compiler

Windows在使用 ACPI table時,不是每次都從記憶體存取,而是暫存在其登錄檔,透過登錄檔
來存取。可以透過 regedit登錄檔編輯程式來讀取修改 ACPI的登錄檔,其路徑為
Computer\HKEY_LOCAL_MACHINE\HARDWARE\ACPI

而 Microsoft的 WDK提供 asl.exe可以用來取出或取代其中的 ACPI table。

/tab=<TabSig>
將 <TabSig>的 AML反組譯回 ASL檔案,<TabSig>可從 regedit查詢。

取出 DSDT.asl
asl.exe /tab=DSDT

取出所有 ACPI table並存成 ACPI.txt
asl.exe /tab=*

/nologo
不印出logo banner的訊息。

Example 1: without /nologo
asl.exe /tab=DSDT
Output 1:
Microsoft ACPI Source Language Assembler Version 5.0.0NT
Copyright (c) 1996,2014 Microsoft Corporation
Compliant with the ACPI 5.0 Specification

Example 2: with /nologo
asl.exe /nologo /tab=DSDT
Output 2:


/c
將 table存成 .bin檔

取出 DSDT的 AML並存成 DSDT0000.bin
asl.exe /c /tab=DSDT

ACPI-table-load usage


只能用於已存在在系統中的ACPI table

/loadtable
將ACPI table load進 registry中

將 AMLFile load進 registry中
asl.exe /loadtable [-v] [-d] <AMLFile>
-v: verbose mode
-d: 移除先前所 load的 AML檔

在 Windows下修改及替換 DSDT或SSDT table

1. 以DSDT為例,先使用 asl.exe將 DSDT的 AML從 registry取出
asl.exe /tab=DSDT /c
會得到 DSDT0000.BIN。

2. 使用 ASL compiler iasl.exe將 DSDT0000.bin 反組譯。
iasl.exe -d DSDT0000.bin
若是反組譯成功,就會產生 DSDT0000.dsl的 ASL檔。
有時會遇到缺少 external control method的情況導致反組譯失敗,這時就可以使用 -e
參數來 include包含 external control method的 AML檔。

EX: Include SSD0及 SSD1
iasl.exe -e SSD00000.bin SSD10000.bin -d DSDT0000.bin
或是使用 -fe來 include描述 external control method的檔案。

3. 依照需求修改 DSDT0000.dsl

EX: 在 DSDT0000.dsl中加入 Serial port的定義

DefinitionBlock ("", "DSDT", 2, "ACRSYS", "ACRPRDCT", 0x00000000)
{
    External (_GPE.HLVT, MethodObj)    // 0 Arguments
    External (_PR_.BGIA, UnknownObj)
    External (_PR_.BGMA, UnknownObj)
    External (_PR_.BGMS, UnknownObj)
......
    OperationRegion (SERP, SystemIO, 0x3F8, 0x8)
    Field (SERP, ByteAcc, NoLock, Preserve)
    {
      THRR, 8,
      , 8,
      , 8,
      , 8,
      , 8,
      LSRR, 8,
      MSRR, 8
    }

    Name (SS1, Zero)
    Name (SS2, Zero)
......

4. 使用 iasl.exe compile修改過的DSDT0000.dsl
iasl.exe -ve DSDT0000.dsl
成功後就會產生 DSDT0000.aml。
-ve為忽略 warning及 remark,只顯示error。

5. 將DSDT0000.aml load到 registry
asl.exe /loadtable DSDT0000.aml

6. 啟動 Windows test mode
bcdedit /set testsigning on
重新開機以後就能生效。