string

string
posts - 27, comments - 177, trackbacks - 0, articles - 0
  C++博客 :: 首页 :: 新随笔 :: 联系 :: 聚合  :: 管理
书中讲到了如何利用_asm int 3 调试代码。
_asm int 3需要配合Nt32Pkg使用。也就是说通过Nt32Pkg编译出的.efi文件才能够调试。
如果你带_asm int 3语句的工程是通过非Nt32Pkg编译出来的(例如AppPkg),在SecMain模拟器中调试会导致断点停在Image.c文件如下代码中
   Image->Status = Image->EntryPoint (ImageHandle, Image->Info.SystemTable);
在模拟器控制台会输出
WARNING: No source level debug
表明SecMain在加载你的模块时没有成功加载调试符号。
解决方案
在.inf文件中添加如下代码
[BuildOptions]
  MSFT:DEBUG_*_IA32_DLINK_FLAGS = /EXPORT:InitializeDriver=$(IMAGE_ENTRY_POINT) /ALIGN:4096 /FILEALIGN:4096 /SUBSYSTEM:CONSOLE




Feedback

# re: 补充《UEFI原理与编程》中关于Edk2的调试  回复  更多评论   

2015-02-10 21:12 by zachary
你好,我正在学UEFI编程,买了你的书,感觉实战性挺强的。不过我有几个问题,不知道你能不能帮我解答一下,谢谢!
1、现在碰到一个问题,用UDK自带的模拟器,不能获取鼠标的状态;用qemu也不能;用vm虚拟机不能自定义bios(我不会。。。),虽然支持获取鼠标,但是好像不支持图形显示。这样是不是只能真机调试了?
2、UDK2014里面的nt32.fd可以直接给机器刷吗?我现在买了一个x86的平板,BayTail架构的,我有编程器,如果想刷成自己的Uefi bios需要什么资料吗?
3、我看你前面实战的目录有Hii的Form章节,我看到书里面好像没有,是取消了吗?你又没有相关的代码?

# re: 补充《UEFI原理与编程》中关于Edk2的调试[未登录]  回复  更多评论   

2015-02-11 01:16 by djx_zh
1、模拟器中没有加载鼠标驱动,所有不支持。
你可以用QUMU虚拟机,加载USB鼠标驱动后就可以了。
2、刷机需谨慎啊。用QEMU虚拟机可以很方便的使用.fd固件
3、目前EDK2对Form的支持比较弱,仍然是类文本格式界面。我个人觉得可能会很快出现比较好用的图形界面库。所以没有在书中介绍Form。如果你真的很想学习Form,可以参考Nt32Pkg里面EDK2自带的示例

# re: 补充《UEFI原理与编程》中关于Edk2的调试  回复  更多评论   

2015-02-11 20:03 by zachary
thanks for your reply.
我加载鼠标驱动后,果然能用了。谢谢!继续学习^-^

# re: 补充《UEFI原理与编程》中关于Edk2的调试  回复  更多评论   

2015-04-01 16:23 by wesily
写了一个APP,在SHELL下显示一个BMP 图片。BMP文档放到同一目录下,APP可以找到并显示出来。请教下怎么把这个APP和BMP一起打包成EFI文件?并且用APP显示?

# re: 补充《UEFI原理与编程》中关于Edk2的调试  回复  更多评论   

2015-04-01 18:48 by zachary
@wesily
写个脚本直接把图片变成像素数组,直接弄,这样很简单。

# re: 补充《UEFI原理与编程》中关于Edk2的调试  回复  更多评论   

2015-04-02 22:25 by wesily
@zachary 确实是个好办法,感谢~~~

# re: 补充《UEFI原理与编程》中关于Edk2的调试  回复  更多评论   

2015-04-05 09:59 by djx_zh
@zachary
同赞

# re: 补充《UEFI原理与编程》中关于Edk2的调试[未登录]  回复  更多评论   

2015-04-28 16:41 by 王帅
你好,我是大四快毕业的学生,刚刚接触uefi编程,当我按照配置在win7上buildovmf时,他会提示failded to execute commond,换到linux环境下只要一执行build命令,最后都会提示这个错误,请问这是为什么?

# re: 补充《UEFI原理与编程》中关于Edk2的调试[未登录]  回复  更多评论   

2015-04-29 01:13 by djx_zh
@王帅
Conf/Target文件里的TOOL_CHAIN_TAG你设置的是什么?
通常failded to execute commond是由于你设置的TOOL_CHAIN_TAG在Conf/tools_def.txt中没有找到。

# re: 补充《UEFI原理与编程》中关于Edk2的调试  回复  更多评论   

2015-05-08 11:14 by jeanhoo
@djx_zh
请问 如何加载USB鼠标驱动?
鼠标驱动在哪里?

# re: 补充《UEFI原理与编程》中关于Edk2的调试[未登录]  回复  更多评论   

2015-05-08 20:34 by djx_zh
@jeanhoo
源代码在MdeModulePkg/Bus/Usb/UsbMouseDxe/
编译MedModulePkg后,应该可以得到UsbMouseDxe.efi
在Shell里 load UsbMouseDxe.efi加载这个驱动

# re: 补充《UEFI原理与编程》中关于Edk2的调试  回复  更多评论   

2015-07-14 11:04 by wwy900624
你好,@djx_zh
load UsbMouseDxe.efi后提示:
Image 'fs1:\UsbMouseDxe.efi' loaded at 5F62000 - Sucess
看提示好像是UsbMouseDxe加载成功了,但是我用WaitForEvent函数等待鼠标输入(mouse->WaitForInput),当我按下鼠标左右键时,程序里还是没有收到鼠标事件,问题在哪里?
我是在Nt32模拟器里运行的。
请指教!

# re: 补充《UEFI原理与编程》中关于Edk2的调试  回复  更多评论   

2015-07-14 11:25 by djx_zh
@wwy900624
Nt32不支持USB鼠标,至少我没有在Nt32下成功使用过鼠标。
在OVMF或者DUET下USB鼠标是可以的。

只有注册用户登录后才能发表评论。
【推荐】超50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理