Advanced Debugging
About AdvDbg Consult Train Services Products Tools Community Contact  
欢迎光临 高端调试 登录 | 注册 | FAQ
 
  ACPI调试
Linux内核调试
Windows内核调试
 
  调试战役
调试原理
新工具观察
 
  Linux
Windows Vista
Windows
 
  Linux驱动
WDF
WDM
 
  PCI Express
PCI/PCI-X
USB
无线通信协议
 
  64位CPU
ARM
IA-32
  CPU Info Center
 
  ACPI标准
系统认证
Desktop
服务器
 
  Embedded Linux
嵌入式开发工具
VxWorks
WinCE
嵌入式Windows
 
  格蠹调试套件(GDK)
  格蠹学院
  小朱书店
  老雷的微博
  《软件调试》
  《格蠹汇编》
  《软件调试(第二版)》
沪ICP备11027180号-1

调试ACPI和BIOS

帖子发起人: nanjingesc   发起时间: 2010-03-02 10:46 上午   回复: 8

Print Search
帖子排序:    
   2010-03-02, 10:46 上午
nanjingesc 离线,最后访问时间: 2011/1/6 11:26:17 nanjingesc

发帖数前150位
注册: 2010-02-24
发 贴: 8
调试ACPI遇到的问题
Reply Quote

虚拟机里装的是xp-sp3,在安全模式下用checked acpi.sys替换了/driver里的acpi.sys.

下载了checked 的acpi.pdb.sys,重命名后替换了自动从微软符号服务器下载的acpi.pdb.

!amli debugger时候没有任何提示,但是用!amli dns测试的时候提示:

AMLI_DBGERR: failed to get root object address

不知道是什么原因,各位有经验的,可以指教下!


IP 地址: 已记录   报告
   2010-03-02, 21:43 下午
Raymond 离线,最后访问时间: 2020/7/3 3:40:25 格蠹老雷

发帖数前10位
注册: 2005-12-19
发 贴: 1,303
Re: 调试ACPI遇到的问题
Reply Quote

从!amli debugger的结果来看,应该是成功与AMLI调试引擎握手了。

手动下载和替换ACPI.pdb是没有必要的,而且可能是导致问题的原因。WinDBG会根据GUID+Age产生路径的打开里面的PDB。

建议删除手工复制的PDB和所在目录,然后设置符号服务器,执行.reload重新下载正确的符号,然后再看是否还有问题。 如果还有问题,那么把当时的命令记录多复制一些过来...


IP 地址: 已记录   报告
   2010-03-03, 11:18 上午
nanjingesc 离线,最后访问时间: 2011/1/6 11:26:17 nanjingesc

发帖数前150位
注册: 2010-02-24
发 贴: 8
Re: 调试ACPI遇到的问题
Reply Quote

按照您的提示,删除了主机acpi.pdb所在的目录,重新主机,目标机连接,

中断到调试器windbg, lm,发现acpi模块的符号deffered,

再!amli debugger,没有任何提示,lm命令,发现ACPI模块后面的符号路径已经出现了,

 !amli dns,依旧AMLI_DBGERR: failed to get root object address, (只有一行错误提示,没有更多的提示可以提供了)

kd> !amli set
AMLTrace        =off
AMLDebugSpew    =off
LoadDDBBreak    =off
ErrorBreak      =off
VerboseMode     =off
LogEvent        =off
LogSize         =0
kd> !amli set spewon

kd> !amli set
AMLTrace        =off
AMLDebugSpew    =on
LoadDDBBreak    =off
ErrorBreak      =off
VerboseMode     =off
LogEvent        =off
LogSize         =0

不管它了,g 发现并没有因为ACPI事件而中断到调试器了,目标机直接进入了操作系统。

进入了虚拟机操作系统后,发现:设备管理器->计算机,下面出现:

 ACPI Uniprocessor PC

Standard PC 依据我的理解,

上述两项说的是APCI和APM的电源管理方式,是否是这个原因,就是说虚拟机对ACPI协议的支持并不是很好导致了上述的问题,

本来虚拟机不能待机这个就是事实啊!


IP 地址: 已记录   报告
   2010-03-03, 12:43 下午
Raymond 离线,最后访问时间: 2020/7/3 3:40:25 格蠹老雷

发帖数前10位
注册: 2005-12-19
发 贴: 1,303
Re: 调试ACPI遇到的问题
Reply Quote

虚拟机下也是可以调试的。下面的输出就都是调试VPC的目标得到的。

ACPI命名空间的根节点保存在全局变量ACPI!gpnsNameSpaceRoot中。上面的错误信息应该就是说找到不到这个变量的地址。

建议你这样操作一下:

kd> x ACPI!gpnsNameSpaceRoot
f9a0263c ACPI!gpnsNameSpaceRoot = <no type information>

kd> dd ACPI!gpnsNameSpaceRoot l1
f9a0263c  817a0024
上面的结果就是ACPI树的根节点817a0024

kd> !amli dns

AMLI(? for help)-> dns
dns

ACPI Name Space: \ (817a0024)

...

有了这个地址后,可以把这个地址直接传给dns命令:

kd> !amli dns /s 817a0024

ACPI Name Space: \ (817a0024)
Unknown(\___)
| Unknown(_GPE)
| Unknown(_PR_)
| Unknown(_SB_)
| | Package(PR00:NumElements=33){
| | | Package(:NumElements=4){

...

得到的结果也是一样的。

 


IP 地址: 已记录   报告
   2010-03-03, 13:45 下午
nanjingesc 离线,最后访问时间: 2011/1/6 11:26:17 nanjingesc

发帖数前150位
注册: 2010-02-24
发 贴: 8
Re: 调试ACPI遇到的问题
Reply Quote

kd> x ACPI!gpnsNameSpaceRoot

 fab1143c ACPI!gpnsNameSpaceRoot =

kd> dd ACPI!gpnsNameSpaceRoot

fab1143c 00000000 00000000 00000000 00000000

fab1144c 00000000 00000000 00000000 00000000

fab1145c 00000000 00000000 00000000 00000000

fab1146c 00000000 00000000 00000000 00000000

fab1147c 00000000 00000000 00000000 00000000

fab1148c 00000000 00000000 00000000 00000000

fab1149c 00000000 00000000 00000000 00000000

fab114ac 00000000 00000000 00000000 00000000

kd> dd ACPI!gpnsNameSpaceRoot l1 fab1143c 00000000

ACPI树的根节点找不到,还有我使用的是VMware的虚拟机,

而不是VPC,不知道对调试有没有影响。

您说的“在保护模式下替换checked acpi.sys”,我按照网络上的理解,

在安全模式下替换的,理解是否准确呢?


IP 地址: 已记录   报告
   2010-03-03, 15:50 下午
nanjingesc 离线,最后访问时间: 2011/1/6 11:26:17 nanjingesc

发帖数前150位
注册: 2010-02-24
发 贴: 8
Re: 调试ACPI遇到的问题
Reply Quote
参考http://bbs.pcbeta.com/archiver/tid-480361.html,问题得到了解决,在!amli debugger命令后无任何提示,g命令后,一会就中断到了amli 调试器了。

kd> !amli debugger

kd> !amli dns
AMLI_DBGERR: failed to get root object address

kd> x ACPI!gpnsNameSpaceRoot
fab1143c ACPI!gpnsNameSpaceRoot =
kd> dd ACPI!gpnsNameSpaceRoot
fab1143c 00000000 00000000 00000000 00000000
fab1144c 00000000 00000000 00000000 00000000
fab1145c 00000000 00000000 00000000 00000000
fab1146c 00000000 00000000 00000000 00000000
fab1147c 00000000 00000000 00000000 00000000
fab1148c 00000000 00000000 00000000 00000000
fab1149c 00000000 00000000 00000000 00000000
fab114ac 00000000 00000000 00000000 00000000
kd> g
MTRR feature disabled.
KiInitializeMTRR: OS support for MTRRs disabled

AMLI(? for help)->

kd>提示符号变成了input>提示符号

之后再输入dns,
AMLI(? for help)-> dns
dns

ACPI Name Space: \ (81ae5024)
Unknown(\___)
| Unknown(_GPE)
| Unknown(_PR_)
| Unknown(_SB_)
| Unknown(_SI_)
| Unknown(_TZ_)
| Integer(_REV:Value=0x00000001[1])
| String(_OS_:Str="Microsoft Windows NT")
| Method(_OSI:Flags=0x1,CodeBuff=81AE52BD,Len=5)
| Mutex(_GL_:pKMutex=81ae5314)

AMLI(? for help)->

虽然可以调试了,但是还是有很多问题,
取得了部分进展,就贴上来,给后来人一个提示,
大家都努力,就不会出现网络上的情况:
“都是问题,没有答案了”

IP 地址: 已记录   报告
   2010-03-03, 15:54 下午
nanjingesc 离线,最后访问时间: 2011/1/6 11:26:17 nanjingesc

发帖数前150位
注册: 2010-02-24
发 贴: 8
Re: 调试ACPI遇到的问题
Reply Quote
顺便把http://bbs.pcbeta.com/archiver/tid-480361.html网页的内容贴在后面,防止该网页打不开了,其他人也就是看不到了。

1)
确认要安装的系统文件。

在安装部分检查版本之前,我们必须知道在我们已经安装的零售版系统上的相关系统文件(ntoskrnl.exe等)和HAL文件的版本。
在Windows NT的发行介质中(如安装光盘)一般都提供了多个版本的系统文件和HAL映像文件,这是为了适应多种类型的处理器和硬件平台的需要。操作系统在安装时会检查系统的硬件,根据实际情况来选择合适的系统文件和HAL映像文件拷贝到系统目录(%systemroot%system32/)中。
操作系统根据是否是多处理器平台和是否支持PAE(Physical Address Extension)来选择合适的系统文件。
ntoskrnl.exe

单x86处理器,使用不超过4GB的物理内存。
ntkrnlpa.exe

单x86处理器,支持PAE。
ntkrnlmp.exe

多处理器,使用不超过4GB的物理内存。
ntkrpamp.exe
多处理器,支持PAE。

同样,HAL也有与之对应的不同文件。



我们可以在系统的安装日志(%systemroot/repair/setup.log)中找到当前的零售版系统在安装时所使用的文件。如,在我的系统上有,部分相关的安装日志如下,


\WINDOWS\system32\hal.dll = "halacpi.dll","181f2"
\WINDOWS\system32\ntkrnlpa.exe = "ntkrnlpa.exe","1f6612"
\WINDOWS\system32\ntoskrnl.exe = "ntoskrnl.exe","220d8c"

从上面可以看出,我的系统所使用的系统文件是ntkrnlpa.exe 和 ntoskrnl.exe,HAL映像文件是halacpi.dll。如果系统所在的平台是多处理器的,则有可能是如下的安装记录:

\WINNT\system32\hal.dll = "halmacpi.dll","2bedf"
\WINNT\system32\ntkrnlpa.exe = "ntkrpamp.exe","1d66a6"
\WINNT\system32\ntoskrnl.exe = "ntkrnlmp.exe","1ce5c5"
...
这说明操作系统在安装时把halacpi.dll、ntkrnlpa.exe和ntoskrnl.exe从安装介质上拷贝到了系统目录中。选择正确的版本的文件很重要,否则系统就无法正常启动。


2)
拷贝检查版本的系统文件和HAL映像文件

在确定了系统文件和HAL映像文件所使用的版本之后,我们就可以把相应的检查版本的文件拷贝到系统文件中。
解压Windows XP Checked Build(我使用的是WindowsXP-KB835935-SP2-DEBUG-ENU),在 .\i386\
目中找到文件 halacpi.dl_、ntkrnlpa.ex_和ntoskrnl.ex_三个文件,把他们拷贝到%systemroot%system32/中。以上的三个文件分别以.dl_和.ex_为后缀,说明它们是被压缩过的,使用expand.exe对它们解压。在cmd中,更换当前目录至%systemroot%system32/,然后运行命令:
expand halacpi.dl_ halacpi.chk
expand ntkrnlpa.ex_ ntkrnlpa.chk
expand ntoskrnl.ex_ ntoskrnl.chk
解压得到的三个文件halacpi.chk、ntkrnlpa.chk和ntoskrnl.chk就是安装部分Checked Build需要的文件。


3)
修改Boot.ini文件,添加Checked Build的启动项。

安装部分的Checked Build就是用检查版本的系统文件(*.chk)来替换零售版的系统文件和HAL映像文件在启动时被加载。这只要在boot.ini文件中添加一个系统启动项,使用/kernel和/hal 选项就可以做到。在boot.ini文件中添加如下语句:
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Windows XP Checked Build" /fastdetect /kernel=ntoskrnl.chk /hal=halacpi.chk


重新启动系统,选择Windows XP Checked Build启动项就启动了部分安装Checked Build的系统。
IP 地址: 已记录   报告
   2010-03-03, 16:19 下午
nanjingesc 离线,最后访问时间: 2011/1/6 11:26:17 nanjingesc

发帖数前150位
注册: 2010-02-24
发 贴: 8
Re: 调试ACPI遇到的问题
Reply Quote
最后,对上述问题做一个总结,也请张老师看看总结的对不对。

1,为什么!amli debugger没有问题,而!amli dns有问题呢?
是因为:主机和目标机一连接就中断到windbg里了,(在windbg快捷方式里有参数 -b -k)中断到windbg的时候比较早,lm命令可以发现acpi模块已经加载,但没有执行,没有执行可以通过bp
ACPI!DriverEntry断点证实,稍后就到了ACPI!DriverEntry里了。ACPI没有初始化,所以!amli dns命令去寻找ACPI Name Space,找到的结果为0。

2,为什么!amli debugger没有问题,执行g命令后,却不能中断到amli debugger调试器里呢?
是因为:checked版本的ACPI.SYS,需要checked版本的系统文件,如http://bbs.pcbeta.com/archiver/tid-480361.html网页里所说。

请张老师指教,看总结的对不对!
IP 地址: 已记录   报告
   2010-03-03, 19:59 下午
Raymond 离线,最后访问时间: 2020/7/3 3:40:25 格蠹老雷

发帖数前10位
注册: 2005-12-19
发 贴: 1,303
Re: 调试ACPI遇到的问题
Reply Quote

赫赫,同意第一点的结论,看来就是观察的时机太早了,在内核初始断点命中时就观察,ACPI树还没建立好呢,所以gpnsNameSpaceRoot 指针的内容是0。这里体现出了网络沟通的局限,我的确没有预料到是在初始断点命中时就执行dns命令:-)

第二点不正确,check版本的acpi驱动可以和free版本的内核文件一起工作,因此没有必要更换内核文件。


IP 地址: 已记录   报告
高端调试 » 软件调试 » 调试ACPI和BIOS » 调试ACPI遇到的问题

 
Legal Notice Privacy Statement Corporate Governance Corporate Governance
(C)2004-2020 ADVDBG.ORG All Rights Reserved.