如何将Android本机代码调试到内核?

时间:2016-07-13 08:36:39

标签: c linux linux-kernel gdb android-kernel

我编译了金鱼内核:

 [ ] Optimize for size,
 [*] Kernel hacking 
     [*] Compile the kernel with debug info 
     [*] KGDB: kernel debugging with remote gdb —>      
     [*] Enable dynamic printk() call support 

我用已编译的内核启动了AVD。

emulator -kernel goldfish/arch/arm/boot/zImage -avd TestAVD

我将已编译的c程序推送到AVD。

我下载了libs(我不确定它是否正确)

adb pull /system/lib ./debuginfo/lib
adb pull /system/bin/linker ./debuginfo/lib

运行gdbserver:

gdbserver 127.0.0.1:7777 ./a

转发端口:

adb forward tcp:7777 tcp:7777

运行gdb

gdb-multiarch ./a

指定搜索目录:

set solib-search-path ./debuginfo/lib

连接到设备

target remote :7777

我打破了,例如,关闭。

0xaf0ae228 in close () from /home/wuyihao/android_sec/debuginfo/lib/libc.so
1: x/i $pc
=> 0xaf0ae228 <close+8>:        svc     0x00000000
(gdb) list
No symbol table is loaded.  Use the "file" command.

我必须得到消息来源。 所以我尝试用变量CFLAG =&#34; -g&#34;

重新编译内核

没什么不同。

谢谢!

ps:我注意到下载的lib都被剥离了。

1 个答案:

答案 0 :(得分:1)

libc.so不是Linux内核。它是C标准库。

您不太可能需要在那里寻找问题。如果你的close()调用不起作用,那么几乎可以肯定你使用它时出了问题,而不是它的实现。