QEMU & Syborg Debugging/zh-hans
From Symbian Developer Community
Symbian虚拟平台 -- Symbian Virtual Platform (SVP) 允许对运行在PC上面的QEMU中的Symbian ROM映像进行停止模式的调试。
Contents |
先决条件
你需要一个在SVP(介绍)下面启动的Symbian映像文件。
你还需要Carbide.c++,被作为ADT或者PDT的一部分获得。
安装GDB硬件调试器插件
- 在Carbide.c++中选择 Help -> Software Updates -> Find and Install...
- 选择Search for new features to install 然后 Next
- 点击 New Remote Site... 然后填上:
- Name: CDT
- URL: "http://download.eclipse.org/tools/cdt/releases/ganymede"
- 点击 OK 然后 Finish
- 展开 CDT 项. 现在应该能看到 CDT Main Features 和 CDT Optional Features. 展开 CDT Optional Features 菜单. 勾选 Eclipse C/C++ GDB Hardware Debugging <version number> 然后点击 Next
- 同意license声明然后点击 Next 和 Finish
- 在确认屏幕点击 Install All
- 点击 Yes 等待Carbide.c++重启
注意:你可能需要更改第3步中的release name - "ganymede",这要看你的Carbide.c++是基于哪个Eclipse的版本。这至少对ADT1.0和PDT1.0-1.3是正确的值。
下载并安装ARM-ELF工具
- 安装 GNUARM GCC-4.3 toolchain , 可以从 http://www.gnuarm.org/bu-2.19_gcc-4.3.2-c-c++_nl-1.16.0_gi-6.8.exe 下载。
安装elf4rom
ELF4ROM 为你的ROM映像文件创建符号和调试信息。 从你的Symbian syborg环境\sf\adaptation\qemu\docs\wiki\ELF4ROM.doc' (没错, 这个zip文件是嵌入在一个word文档当中的!)复制 elf4rom.zip文件,解压到一个本地目录。文档ELF4ROM.doc包含了完整的文档。
调试设置
从Symbian ROM映像创建一个ELF文件
例如:
cd \sf\os\kernelhwsrv\kernel\eka\rombuild elf4rom.exe -i SYBORGARMV5D.IMG -l SYBORGARMV5D.log -o SYBORGARMV5D.elf -p 0x0 -d _SYBORG_EKERN.EXE _SYBORG_KASYBORG.DLL _SYBORG_ESERIAL.PDD _SYBORG_EKEYB.DLL
- 本例假设 elf4rom.exe 的路径已经被加入到环境变量当中。
- 这里指定使用SYBORGARMV5D.log,假如你在构建你的ROM的时候没有显示地重命名它的话,那它就是 ROMBUILD.log
- 最终产生的ELF文件是 SYBORGARMV5D.elf
从\sf\adaptation\qemu\docs\wiki\ELF4ROM.doc阅读更多关于elf4rom的用法
在Carbide.c++中创建一个Makefile工程
- 在你的Carbide工作目录(workspace)下面创建一个新的目录,拷贝你的elf文件到该目录
- 启动Carbide.c++ (如果还没启动的话)
- 创建一个新的C++ makefile工程。 File -> New -> Project
- 勾上 Show All Wizards 选择框并且选择 C++ -> C++ Project
- 点击 Next 并且同意打开 hidden UI 特性
- 在 Project name 域输入你的elf所在目录 Project name
- 选择 Makefile Project 并且在 toolchains 框选择 MinGW GCC
- 点击 Next 然后 Finish
- 在 Project Explorer 右键点击刚才创建的项目然后选择 Properties
- 展开 C/C++ Build 然后点击 Settings. 在 Binary parser 窗口去掉 PE Windows Parser 的勾,并且勾上 GNU Elf Parser
- 通过 GNU Elf Parser 选项让命令 addr2line 和 c++filt 可见. 更改 addr2line 为 arm-elf-addr2line 和 c++filt 为 arm-elf-c++filt. (注意: 如果你的arm-elf工具的路径不在环境变量PATh里面,你必须填写可执行文件的完整路径)
- 点击 OK
你现在应该可以在eclipse环境的Project Explorer视图里面查看ELF文件的内容。要测试这个环境,打开 syborg_keyboard.cpp 并且添加一个断点到 DKeyboardPs2Soc::Isr() 方法。 (注意:根据配置的不同,你可能需要从符号来打开elf文件而不是通过文件名打开 -- 导致这个问题的原因还需要调查 -- 在这种情况下,你必须选择符号名字,通过右键来设置断点 (Depending on configuration, you may get to navigate the elf file by symbol rather than filename - need to investigate what causes this - in this case, you'll have to select the mangled symbol name, right click and select add breakpoint)).
创建一个调试配置
- 在eclipse UI点击 Run -> Debug Configurations. 如果已经按照上面说的来安装了 gdbjtag 你应该能在 Debug Configurations 窗口看到 GDB Hardware Debugging 选项 .
- 右击 GDB Hardware Debugging 然后点击 New
- 在打开的菜单选择 Main 标签
- 为配置指定一个好名字
- 选择你在 Project 创建的工程
- 在 C/C++ Application 输入你的ELF文件名
- 选择 Disable Auto Build
- 选择 Debugger 标签
- 在GDB Command框输入 arm-elf-gdb
- 反选 Use remote target
- 选择 Startup 标签并在Run Commands 框输入 tar rem localhost:1234
- 点击 Close
启动你的调试会话
- 开始仿真
- 打开一个命令行窗口并且去到你刚才创建的工程的目录 - elf文件所在的目录
- 启动 QEMU syborg Symbian 仿真.例如: <path to your build environment>\symbian-qemu-0.9.1\bin\arm-none-symbian-elf-qemu-system.exe -M <path to your build environment>\sf\adaptation\qemu\baseport\syborg\syborg.dtb -kernel SYBORGARMV5D.elf -S -s
- 这个时候 QEMU Symbian 仿真窗口应该出现 (上面有 QEMU [Stopped] 标签)
- 连接调试器到仿真器
- 在 eclipse UI 点击 Run -> Debug Configurations
- 现在在 "Debug Configurations" 对话框应该能看到你的调试配置 - 如果没有的话,从列表选择
- 点击对话框右下角的 Debug
- 如果你的eclipse视角图(perspective)没有自动切换到调试模式(Debug)的话,双击 Window -> Open Perspective -> Debug
- 你不必担心可能出现的"'No symbol 'new' in current context"' 错误 ,在Console 窗口可见。
- 在 "Console" 窗口输入 "c" (或者你可以点击IDE上的绿色箭头来继续调试 - 这个可能会在第一次给出一个错误,不过后面会工作的很顺利)
- 现在你应该已经把Symbian仿真器启动起来了
- 在你的Symbian窗口输入一个按键的话你应该命中刚才在DKeyboardPs2Soc::Isr方法中添加的断点。
调试说明
- 请小心设置你的path环境变量。比如如果eclipse能找到一个旧的gdb的安装的话就有可能会出现问题 (像 http://downloads.sourceforge.net/mingw/gdb-6.6.tar.bz2)。
- 从你的Symbian syborg环境的\sf\os\QEMU\docs\wiki\Stop-mode Debugging.doc读取更多的关于调试的信息。
映射宿主的一个目录到QEMU的S:盘
QEMU一个非常有用的功能是映射宿主的一个目录到S:盘。
要映射的话就在QEMU运行的工作目录的根目录创建一个svphostfs文件夹。例如,如果当前工作目录是C:,创建 C:\svphostfs 。你必须重启QEMU才能使得这个映射生效。
可以在仿真的Symbian OS里面往S:复制文件,它们就会出现在这里。这样使得获取日志变得非常方便。
此外,你可以复制文件到映射的文件夹(即'svphostfs'),然后复制他们到Symbian OS的适当位置。你甚至可以创建目录 'svphostfs\sys\bin' 然后复制二进制到那里,直接在Symbian OS里面使用。这个功能减少了很多构建ROM的必要。
Sign in to comment…

