<div dir="ltr"><div>はじめまして、柳原と申します。</div><div>このMLで良いか確信がないですが、ご助言いただけますと幸いです。</div><div><br></div><div>QEMU上で起動したLinuxカーネルをDDD(GDB)でデバッグしようとしているのですが、</div><div>設定したブレークポイントで止まってくれず困っています。</div><div><br></div><div>正確にはそのLinuxカーネルはAndroidのカーネルであり、GoogleのサイトからDLしました。</div><div><a href="https://android.googlesource.com/kernel/goldfish.git">https://android.googlesource.com/kernel/goldfish.git</a></div><div>ここで言うQEMUはAndroid用にカスタマイズしたエミュレータで、Androidのソースに付属していました。</div><div><br></div><div>以下に基本情報と実施した操作を記します。</div><div>使用するツールはこれで適切か、設定に不備がないかをご教示ください。</div><div><br></div><div>また、不足している情報がありましたらご指摘お願いいたします。</div><div><br></div><div><基本情報></div><div>HostOS: Ubuntu14.04 64bit LTS</div><div>GCC: 4.8.2</div><div>Make: 3.8.1</div><div>QEMU: 0.10.50Android</div><div>DDD: 3.3.12</div><div>GDB: 7.7.1</div><div>Linux Kernel: 2.6.29</div><div><br></div><div><br></div><div><操作></div><div>●ターゲットをARMに指定して、ビルドオプションを設定してカーネルをビルド</div><div>$ export ARCH=arm</div><div>$ export SUBARCH=arm</div><div>$ export CROSS_COMPILE=arm-eabi-</div><div>$ make goldfish_armv7_defconfig</div><div>$ make menuconfig</div><div><br></div><div>Linux Kernel Configuration</div><div>  Kernel hacking</div><div>    [Y]Compile the kernel with debug info</div><div><br></div><div>$ make -j8</div><div><br></div><div><br></div><div>●Androidエミュレータ(QEMU)をデバッグオプションを付けて起動</div><div>$ emulator -kernel goldfish/arch/arm/boot/zImage -qemu -s -S</div><div><br></div><div>●DDDを起動しQEMUに接続</div><div>$ DDD vmlinux</div><div>GNU DDD 3.3.12 (x86_64-pc-linux-gnu), by Dorothea LReading symbols from vmlinux...done.</div><div>(gdb) target remote localhost:1234</div><div>Remote debugging using localhost:1234</div><div>warning: Architecture rejected target-supplied description</div><div>Could not fetch register "st2"; remote failure reply 'E14'</div><div>0x00000000 in ?? ()</div><div><br></div><div>●ブレークポイントをstart_kernel()に設定</div><div>(gdb) b start_kernel</div><div>Breakpoint 1 at 0xc00086a4: file init/main.c, line 531.</div><div>(gdb) continue</div><div>Continuing.</div><div><br></div><div>Program received signal SIGTRAP, Trace/breakpoint trap.#←SIGTRAPが発行され、設定した以外の場所でブレイクする</div><div>0x00021d78 in ?? ()</div><div>(gdb)</div><div><br></div><div>●一度SIGTRAPを受けると、ブレークポイントを外さない限り他の操作が受け付けられない</div><div>(gdb) next</div><div>Cannot find bounds of current function</div><div>(gdb) step</div><div>Cannot find bounds of current function</div><div>(gdb) continue</div><div>Continuing.</div><div><br></div><div>Program received signal SIGTRAP, Trace/breakpoint trap.#←SIGTRAPが発行され設定した以外の場所でブレイクする。</div><div>0x00021d78 in ?? ()</div><div>(gdb)</div><div><br></div><div><br></div></div>