调试
<h3>QEMU和Gdb</h3>
<p><strong><code>QEMU</code></strong>
首先运行<code>QEMU</code>监听<code>gdb</code>连接然后才开始执行调试的代码
<code>qemu -s -S <image></code></p>
<ul>
<li>-S 不启动CPU,必须输入<code>c</code>才开始</li>
<li>-s <code>-gdb tcp::1234</code>的快捷选项
<blockquote>
<p><code>zephyr.elf</code>文件名可通过<code>Kconfig</code>选项设置
<code>GDB服务器</code>使用<code>TCP:1234</code></p>
</blockquote></li>
</ul>
<ol>
<li><strong>在应用构建目录下运行</strong>
<pre><code>ninja debugserver</code></pre>
<p>它将启动<code>QEMU</code>并挂起<code>CPU</code>,并开启<code>GDB</code>服务器在<code>TCP:1234</code>监听连接.
使用本地<code>GDB</code>配置文件<code>.gdbinit</code>帮助初始化<code>GDB</code>实例,在这个例子中初始化文件指向<code>GDB</code>服务器的实例,它配置使用<code>TCP:1234</code>连接远程目标。这个初始化将内核根目录做为引用</p>
<pre><code>target remote localhost:1234
dir ZEPHYR_BASE</code></pre></li>
<li>使用<code>gdb</code>连接<code>GDB</code>服务器
命令从<code>elf</code>二进制文件中加载符号表
<pre><code>..../path/to/gdb --tui zephyr.elf</code></pre>
<blockquote>
<p><code>gdb</code>版本可能不支持<code>tui</code>选项,确定使用<code>SDK</code>中的<code>GDB</code>。如果不使用<code>.gdbinit</code>文件,你需要在<code>GDB</code>内连接<code>GDB</code>服务器<code>(gdb) target remote localhost:1234</code>
使用<code>ddd(Data Displayer Debugger)</code>连接<code>GDB</code>服务器 <code>ddd --gdb --debugger "gdb zephyr.elf"</code></p>
</blockquote></li>
</ol>
<h3>Eclipse调试</h3>
<ol>
<li>
<p>简介
<code>CMake</code>支持生成工程描述文件,它可以导入到 Eclipse开发环境中,<code>GNU MCU Eclipse</code>插件支持使用<code>pyOCD</code>,<code>J-Link</code>和<code>OpenOCD</code>调试工具调试<code>ARM</code>工程
下面以使用<code>pyOCD</code>调试<code>Zephyr</code>应用(假定你已安装<code>GCC ARM Embedded toolchain</code>和<code>pyOCD</code>)</p>
</li>
<li>
<p>设置开发环境</p>
<ul>
<li>下载和安装<code>Eclipse IDE for C/C++ Developers</code></li>
<li>安装<code>GNU MCU Eclipse</code>插件</li>
<li>配置<code>pyOCD GDB server</code>路径,打开<code>Window->Preferences</code>,选中<code>MCU</code>设置<code>pyOCD</code>路径</li>
</ul>
</li>
<li>
<p>生成和导入<code>Eclipse</code>工程</p>
<ul>
<li>
<p>配置<code>GCC ARM Embedded compiler</code>环境</p>
</li>
<li>
<p>进入<code>Zephyr</code>目录外构建应用</p>
<pre><code># On Windows
cd %userprofile%</code></pre>
</li>
<li>配置应用并使用<code>ninja</code>构建,除了<code>ninja</code>通常构建文件它将生成<code>.project</code>工程描述文件
<pre><code># On Windows
mkdir build && cd build
cmake -G"Eclipse CDT4 - Ninja" -DBOARD=frdm_k64f %ZEPHYR_BASE%\samples\synchronization
ninja</code></pre></li>
</ul>
</li>
<li><code>File->Import...</code>选中工程文件导入到工作空间</li>
</ol>
<h3>创建调试配置文件</h3>
<ol>
<li>
<p><code>Run->Debug Configurations...</code></p>
</li>
<li>选中<code>GDB PyOCD Debugging</code>, 点击<code>New</code>并配置下列选项:
<ul>
<li><code>Main</code>页</li>
<li>Project: my_zephyr_app@build</li>
<li>C/C++ Application: zephyr/zephyr.elf</li>
</ul></li>
</ol>
<ul>
<li>
<p><code>Debugger</code>页</p>
<ul>
<li>pyOCD Setup
<ul>
<li>Executable path: $pyocd_path\$pyocd_executable</li>
<li>Uncheck “Allocate console for semihosting”</li>
</ul></li>
<li>Board Setup
<ul>
<li>Bus speed: 8000000 Hz</li>
<li>Uncheck “Enable semihosting”</li>
</ul></li>
<li>GDB Client Setup
<ul>
<li>Executable path: C:\gcc-arm-none-eabi-6_2017-q2-update\bin\arm-none-eabi-gdb.exe</li>
</ul></li>
</ul>
</li>
<li><code>SVD</code>页
<ul>
<li>File path: <zephyr base>\ext\hal\nxp\mcux\devices\MK64F12\MK64F12.xml
<blockquote>
<p>这是可选的,它提供SOC的内存映射寄存器地址和位场给调试器</p>
</blockquote></li>
</ul></li>
</ul>
<ol>
<li>点击<code>Debug</code>开始调试</li>
</ol>
<h3>支持RTOS</h3>
<p><code>pyOCD v0.11.0</code>或之后版本才支持,它与<code>Eclipse</code>中的<code>GDB PyOCD Debugging</code>插件是兼容的,但需要自应用中使能<code>CONFIG_OPENOCD_SUPPORT=y</code></p>