Symbian developer community

 
wiki

QEMU & Syborg Debugging/zh-hans

From Symbian Developer Community

Jump to: navigation, search

Symbian虚拟平台 -- Symbian Virtual Platform (SVP) 允许对运行在PC上面的QEMU中的Symbian ROM映像进行停止模式的调试。

File:DebuggingModes.PNG

Contents

先决条件

你需要一个在SVP(介绍)下面启动的Symbian映像文件。

你还需要Carbide.c++,被作为ADT或者PDT的一部分获得。

安装GDB硬件调试器插件

  1. 在Carbide.c++中选择 Help -> Software Updates -> Find and Install...
  2. 选择Search for new features to install 然后 Next
  3. 点击 New Remote Site... 然后填上:
  4. 点击 OK 然后 Finish
  5. 展开 CDT 项. 现在应该能看到 CDT Main FeaturesCDT Optional Features. 展开 CDT Optional Features 菜单. 勾选 Eclipse C/C++ GDB Hardware Debugging <version number> 然后点击 Next
  6. 同意license声明然后点击 NextFinish
  7. 在确认屏幕点击 Install All
  8. 点击 Yes 等待Carbide.c++重启

注意:你可能需要更改第3步中的release name - "ganymede",这要看你的Carbide.c++是基于哪个Eclipse的版本。这至少对ADT1.0和PDT1.0-1.3是正确的值。

下载并安装ARM-ELF工具

  1. 安装 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工程

  1. 在你的Carbide工作目录(workspace)下面创建一个新的目录,拷贝你的elf文件到该目录
  2. 启动Carbide.c++ (如果还没启动的话)
  3. 创建一个新的C++ makefile工程。 File -> New -> Project
  4. 勾上 Show All Wizards 选择框并且选择 C++ -> C++ Project
  5. 点击 Next 并且同意打开 hidden UI 特性
  6. Project name 域输入你的elf所在目录 Project name
  7. 选择 Makefile Project 并且在 toolchains 框选择 MinGW GCC
  8. 点击 Next 然后 Finish
  9. Project Explorer 右键点击刚才创建的项目然后选择 Properties
  10. 展开 C/C++ Build 然后点击 Settings. 在 Binary parser 窗口去掉 PE Windows Parser 的勾,并且勾上 GNU Elf Parser
  11. 通过 GNU Elf Parser 选项让命令 addr2linec++filt 可见. 更改 addr2linearm-elf-addr2linec++filtarm-elf-c++filt. (注意: 如果你的arm-elf工具的路径不在环境变量PATh里面,你必须填写可执行文件的完整路径)
  12. 点击 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)).

创建一个调试配置

  1. 在eclipse UI点击 Run -> Debug Configurations. 如果已经按照上面说的来安装了 gdbjtag 你应该能在 Debug Configurations 窗口看到 GDB Hardware Debugging 选项 .
  2. 右击 GDB Hardware Debugging 然后点击 New
  3. 在打开的菜单选择 Main 标签
    • 为配置指定一个好名字
    • 选择你在 Project 创建的工程
    • C/C++ Application 输入你的ELF文件名
    • 选择 Disable Auto Build
  4. 选择 Debugger 标签
    • 在GDB Command框输入 arm-elf-gdb
    • 反选 Use remote target
  5. 选择 Startup 标签并在Run Commands 框输入 tar rem localhost:1234
  6. 点击 Close

启动你的调试会话

开始仿真
  1. 打开一个命令行窗口并且去到你刚才创建的工程的目录 - elf文件所在的目录
  2. 启动 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
    1. 这个时候 QEMU Symbian 仿真窗口应该出现 (上面有 QEMU [Stopped] 标签)
连接调试器到仿真器
  1. 在 eclipse UI 点击 Run -> Debug Configurations
  2. 现在在 "Debug Configurations" 对话框应该能看到你的调试配置 - 如果没有的话,从列表选择
  3. 点击对话框右下角的 Debug
  4. 如果你的eclipse视角图(perspective)没有自动切换到调试模式(Debug)的话,双击 Window -> Open Perspective -> Debug
  5. 你不必担心可能出现的"'No symbol 'new' in current context"' 错误 ,在Console 窗口可见。
  6. 在 "Console" 窗口输入 "c" (或者你可以点击IDE上的绿色箭头来继续调试 - 这个可能会在第一次给出一个错误,不过后面会工作的很顺利)
  7. 现在你应该已经把Symbian仿真器启动起来了
  8. 在你的Symbian窗口输入一个按键的话你应该命中刚才在DKeyboardPs2Soc::Isr方法中添加的断点。

调试说明

  1. 请小心设置你的path环境变量。比如如果eclipse能找到一个旧的gdb的安装的话就有可能会出现问题 (像 http://downloads.sourceforge.net/mingw/gdb-6.6.tar.bz2)。
  2. 从你的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…