前言
最近一直在忙项目,需要跟固件的同事打交道。
在Linux中,目前设备的信息很多是通过ACPI表描述的,而这个ACPI表是需要固件写入的,我们操作系统驱动没办法控制。在调试的过程中,经常会遇到在不同的机器上面,驱动执行不一致的问题。驱动代码都是同一份的,不同的就是固件了。而固件内部,除了一些硬件寄存器配置外,就是ACPI表的描述了。很多时候,不晓得别人是不是给你描述对了,与其去问,还不如自己动手去看ACPI表了。
上网查了一下,get一个新技能。
ACPI表
APCI, Advanced Configuration and Power Interface,高级配置与电源接口,是BIOS到操作系统的一系列接口,ACPI接口中包含了很多预定义的表格,这些表格的定义存储在BIOS芯片中,由BIOS生成到内存中提交给操作系统,各种不同的操作系统都可以提取BIOS提交的原始ACPI表格文件,其中最重要的就是DSDT和SSDT表格。
DSDT,Differentiated System Description Table,差分系统描述表,包含大部分硬件信息的主体表格。
SSDT,Secondary System Description Table,辅助系统描述表,包含少部分硬件补充信息的表格。
APCI表解析
在系统目录/sys/firmware/acpi/tables
下存储了ACPI表信息,不过这个是不能够明文查看的,需要使用工具解析。这个工具就是iasl, 这是一个编译和解析ACPI的工具,一般系统中没有,需要自行安装。
1 | apt install iasl |
打开dsdt.dsl, 找到对应的device,可以看到具体的描述。
上面我们从/sys/firmware/acpi/tables拷贝了DSDT表文件到/tmp目录。其实,我们也可以使用acpidump工具直接生成表文件
1 | apt install acpidump |
除了iasl, 还可以使用acpidump工具。
更多
重启学习历程!
行动,才不会被动!
欢迎关注个人公众号 微信 -> 搜索 -> fishmwei,沟通交流。
博客地址: https://fishmwei.github.io
掘金主页: https://juejin.cn/user/2084329776486919