我需要知道我们是否可以在金鱼内核中添加一个断点并监视一些变量。请注意,我使用Linux机器来交叉编译模拟器和金鱼内核3.4(从AOSP获取(-正如我所说,模拟器是在Windows 上运行的.exe进程
我花了几天时间寻找这个问题的答案,我发现这是可能的,答案是:
编译金鱼3.4以打开内核配置文件中的调试选项
获取预构建的工具链
cd ~
git克隆https://android.googlesource.com/platform/prebuilts/gcc/linux-x86/arm/arm-eabi-4.6
通过将以下env vars附加到~/.bashrc ,为预构建的工具链设置env var
gedit ~/.bashrc
export ARCH=arm
export SUBARCH=arm
export PATH=~/arm-eabi-4.6/linux-x86/toolchain/arm-eabi-4.4.3/bin:$PATH
export CROSS_COMPILE=arm eabi-
export PATH=$PATH:~/arm-eabi-4.6/darwin-x86/toolchain/arm-eabi-4.4.3
bash#再次执行bash以重新执行/bashrc文件
获取金鱼核
git克隆https://android.googlesource.com/kernel/goldfish.git
git checkout-t origin/android-goldfish-3.4-b goldfish3.4
配置和编译金鱼内核
gedit$GOLDFISH_KERNEL_PATH/arch/arm/configs/GOLDFISH_armv7_defconfig
将"CONFIG_DEBUG_INFO=y"添加到goldfish_armv7a_deconfig
使goldfish_armv7_defconfig
make-j8
测试新构建的金鱼核
现在,您可以在$GOLDFISH_kernel_PATH/arch/arm/boot/zImage中找到新构建的内核
您还需要内核的ELF格式,因为它包含gdb所需的调试符号:$GOLDFISH_kernel_PATH/vmlinux
用监听1234的gdb服务器实例启动默认的android模拟器
emulator-arm.exe-verbose-show kernel-netfast-avd test-qemu-S-gdb tcp::1234,ipv4-kernel$GOLDFISH_kernel_PATH/arch/arm/boot/zImage
获取合适的gdb版本-目标应该是android arm
下载gdb for windows:https://github.com/ikonst/gdb-7.7-android
将vmlinx从内核根文件夹复制到您的windows机器
使用命令行启动gdb:gdb.exe%GOLDFISH_KERNEL_PATH/vmlinux
(gdb(设置远程超时10
(gdb(设置调试远程1
(gdb(目标远程localhost:1234
(gdb(b sdhci_request
(gdb(步骤
(gdb(步骤
(gdb(续
(gdb(等。。