The below technique is especially convenient for ACPI firmware and OS kernel developers. It provides a simple approach to verify ACPI tables without compiling firmware and deploying it to hardware.
Using acpidump.log as an Input for FWTS
The command to read ACPI tables' binary is# check ACPI methods from a text file
$ fwts method --dumpfile=acpidump.log
or
# check ACPI FACP table from a text file
$ fwts facp --dumpfile=acpidump.log
where acpidump.log contains ACPI tables' binary in a specific format as depicted below:
- Table Signature - the 4-byte long ACPI table signature
- Offset - data start from 0000 and increase by 16 bytes per line
- Hex Data- each line has 16 hex integers of the compiled ACPI table
- ASCII Data - the ASCII presentation of the hex data
This format may look familiar because it is not specific to FWTS. In fact, it is the same format generated by acpidump. In other words, the following commands generate the identical results.
# reading ACPI tables from memory
$ sudo fwts method
# dumping ACPI tables and testing it
$ sudo acpidump > acpidump.log
$ fwts method --dumpfile=acpidump.log
This means it is probable to debug remote systems by the following steps: 1) run sudo acpidump > acpidump.log, 2) copy acpidump.log and 3) run fwts with the --dumpfile=acpidump.log.
For developers, using --dumpfile option also means it is possible to test ACPI tables before deploying them on real hardware. The following sections present how to prepare a customized acpidump.log for such purposes.
Using a customized acpidump.log for FWTS
We can use acpica-tools to generate an acpidump.log. The following is an example of building a customized acpidump for the method test.1. Generate a dummy FACP table
FWTS requires a FACP table in an acpidump.log so it can recognize acpidump.log as a valid input file.
- iasl -T FACP
- iasl facp.asl > /dev/zero
- echo "FACP @ 0x0000000000000000" >> acpidump.log
- xxd -c 16 -g 1 facp.aml | sed 's/^0000/ /' >> acpidump.log
- echo "" >> acpidump.log
A customized DSDT can be generated by the following commands
- Generate a DSDT - run "iasl -T DSDT"
- Customize dsdt.asl - ex. adding an ACPI battery device
3. Compile the DSDT table to binary
Similar to FACP, the DSDT can be compiled and appended to acpidump.log.
- iasl dsdt.asl > /dev/zero
- echo "DSDT @ 0x0000000000000000" >> acpidump.log
- xxd -c 16 -g 1 dsdt.aml | sed 's/^0000/ /' >> acpidump.log
- echo "" >> acpidump.log
3. Run FWTS method with acpidump.log
And finally, run fwts with the generated acpidump.log
- fwts method --dumpfile=acpidump.log
Final Words
While we use DSDT as an example, the same technique applies to all ACPI
tables. For instance, HMAT was introduced and frequently updates in
recent ACPI specs, and Firmware Test Suite includes most, if not all,
changes up-to-date; therefore, FWTS is able to detect errors before
firmware developers integrate HMAT into their projects, and therefore
reduce errors in final products.