WINDBG DEBUG ASL
WinDBG 采用Host 和Target 方法进行debug,这是系统级debug 常用的方法,使用Host 机器debug Target 机器,所以一般要两台机器。。
1. 首先把两台机器连起来,有3 种连接方法
COM:常用的串口线就可以,但是现在NB 上基本没有串口,在Server 系统上现在串口还是比较常见,所以debug Server 的话可以使用
IEEE1394:这个在NB 上就比较常见了,Server 上基本没有,所以你的NB 上有1394 接口的话就可以用1394USB2.0 debug cable,这个要用一种特殊的cable,国内没有卖的好像,国外的产品好像只有一种,利用EHCI 的debug port 输出debug 信息。那么最后,如果你这3 种都没有,怎么办呢?那你NB 上总有PCIMCA 卡口吧,让你老板出血买个PCIMCA 转COM 口.
2. 设置target 机器,使之可以debug,分两步
2.1 设置OS 使之处于debug mode,详情参考http://msdn.microsoft.com/enus/library/ms791518.aspx,其实有一个简单的办法,使用msconfig 这个程序,设置boot.ini->Advance->debug 选项.
2.2 替换Target 机器上的acpi.sys 文件,下载你对应OS 的checked build(就是debug版的意思),例如XP 或者Server 2003,现在公开拿到的也就是XP 和Server 2003,其他OS都需要MSDN 注册才能拿到,假设我的OS 是Server 2003 SP1,到微软网站找到这个版本的checked build,下载后解压,到i386 目录下找到acpi.sy_, 这个文件是压缩的,先用expand把它解压: expand acpi.sy_ acpi.sys ,然后把target 机器boot 到safe mode,先在C 盘搜索acpi.sys,把能找到的都改名或者删除, 将从checked build 中解压的acpi.sys 替换target 系统
上C:\Windows\system32\drivers\acpi.sys 这个文件,重启~~~这一段可以参考http://blog.csdn.net/EFIBIOS/archive/2007/03/12/1526763.aspx
3. 设置Host 机器
3.1 安装WinDBG,自己找,不多说
3.2 配置symbols,debug symbols 是target 机器上各个程序函数,变量等的地址。想要debug target 系统,symbols 比不可少。在
http://www.microsoft.com/whdc/DevTools/Debugging/symbolpkg.mspx 这里下作与target 系统对应的symbols,注意,symbols 的版本必须与你targe 上面的acpi.sys 的版本一致,不然debugger 就找不到acpi.sys 和里面的acpi debugger 了,checked build 必须使用
checked build 的symbol file。。然后在WinDBG 里面设定symbols 的安装路径。。File 菜单下面。。注意看就能找到。。然后运行WinDBG-> kernel debug, 选择COM 或者是1394,然后重启target,在targetOS 刚启动的时候,可以看到WinDBG 连接上的信息,和target OS 的信息,debug ACPI 的话,可以在OS 跑滚动条的时候按CTRL+BREAK 把target 停下来,接着调试
4. !amli 看看
5. !amli debugger, 打开acpi debugger,如果没有什么反应,说明成功,如果有出错信息,重新检查设置。
6. !amli set traceon
!amli set verboseon
!amli set spewon
打开全局调试输出,打开这个以后所有OS run 到的asl code 都会输出来,所以会非常慢,如果你不是调试这里的code,那么到你debug 以前的位置再设置这个。。使用这个几个选项可以trace OS 的acpi 是怎么跑的,如果你要debug 某一个acpi method,那么可以使用!amli bp method_path, such as !amlibp \_SB.PCI0.PE01._ADR, 那么OS 在run 这个method 的时候会break 下来,然后你可以使用p,进行单步,看看执行情况。在BIOS 的ASL code 中,可以使用以下方法使你想要的东西输出到WinDBG:
1. 输出一个value,如Store(Local0, Debug)
2. 输出一个字串,如Store("Start trace ASL with windbg", Debug)
类别:Acpi 查看评论