android 带有内核调试符号的版本

android version with kernel debug symbols

我正在尝试生成一个自定义 android 图像,在模拟器下 运行,使用我自己编译的内核版本(想法是包括调试符号)。我在 google 上找到了很多关于它的信息,所以我检查了分支 android-goldfish-4.14-dev,并尝试编译它几次,但每次我 运行编译后的内核。

[    0.851597]  ? generic_make_request+0x123/0x300
[    0.852314]  submit_bio+0x73/0x140
[    0.852854]  ? bio_alloc_bioset+0xcc/0x1e0
[    0.853504]  ? submit_bio+0x73/0x140
[    0.854052]  ? guard_bio_eod+0x2c/0xf0
[    0.854622]  submit_bh_wbc+0x180/0x1b0
[    0.855195]  __bread_gfp+0x54/0xe0
[    0.855744]  ext4_fill_super+0x1f6/0x3a10
[    0.856377]  ? vsnprintf+0x24f/0x4e0
[    0.856943]  ? down_write+0x12/0x40
[    0.857497]  ? snprintf+0x45/0x70
[    0.858021]  mount_bdev+0x17f/0x1b0
[    0.858572]  ? mount_bdev+0x17f/0x1b0
[    0.859149]  ? ext4_calculate_overhead+0x490/0x490
[    0.859896]  ext4_mount+0x15/0x20
[    0.860420]  mount_fs+0x155/0x180
[    0.860942]  ? alloc_vfsmnt+0x1bb/0x230
[    0.861547]  vfs_kern_mount.part.23+0x80/0x150
[    0.862240]  do_mount+0x5ea/0xd20
[    0.862764]  ? memdup_user+0x4f/0x80
[    0.863329]  SyS_mount+0x98/0xe0
[    0.863842]  mount_block_root+0x109/0x2da
[    0.864478]  ? set_debug_rodata+0x17/0x17
[    0.865107]  mount_root+0x6a/0x6d
[    0.865634]  prepare_namespace+0x13e/0x176
[    0.866287]  kernel_init_freeable+0x224/0x251
[    0.866971]  ? rest_init+0xb0/0xb0
[    0.867507]  kernel_init+0xe/0x101
[    0.868045]  ret_from_fork+0x35/0x40

我正尝试在 qemu x86 下为 运行ning 编译它。

另一种可能是获得带有内核调试符号的 android oreo 图像;你知道是否有带有内核调试符号的预编译图像吗?

谢谢!

如果问题确实出在内核中,下面是如何从源代码构建它的说明。

1。获取内核源码

首先,您需要确定要为其构建内核的设备。知道设备名称,您可以为它克隆正确的 Android 内核源代码并构建它。例如,对于金鱼,您应该使用来自:

的内核

https://android.googlesource.com/kernel/goldfish/

如果您不确定要为您的设备使用哪个内核,请尝试使用所谓的 "Android common kernel":

https://android.googlesource.com/kernel/common/

基本上它是这样工作的:

  • Android 普通内核基于常规 Linux 内核,在其之上添加了一些 Android-特定补丁
  • Android特定设备的内核基于通用内核,在其之上添加了一些特定于设备的补丁。

现在您 "git cloned" 内核,检查您要使用的版本分支:

$ git checkout android-4.14

2。配置工具链

我假设您想为 x86_64 架构构建内核。如果是这样,请像这样配置您的工具链:

$ export PATH=$AOSP_DIR/prebuilts/gcc/linux-x86/x86/x86_64-linux-android-4.9/bin:$PATH
$ export CROSS_COMPILE=x86_64-linux-androidkernel-
$ export ARCH=x86_64

其中 $AOSP_DIR -- AOSP 源的路径。如果您没有 AOSP 源,您可以单独获取工具链(在内核源目录之外):

$ git clone https://android.googlesource.com/platform/prebuilts/gcc/linux-x86/x86/x86_64-linux-android-4.9

3。获取 Android 内核配置

下载 Android 内核配置(在您的内核目录之外):

$ git clone https://android.googlesource.com/kernel/configs android-kernel-configs

4。配置和构建内核

现在,在您的内核源代码目录中,您可以使用相应的 defconfig 文件和 Android 配置片段创建内核配置(.config 文件)。例如,对于金鱼,您应该使用此命令:

$ ./scripts/kconfig/merge_config.sh \
    arch/x86/configs/x86_64_ranchu_defconfig \
    ../android-kernel-configs/android-4.14/android-base.config \
    ../android-kernel-configs/android-4.14/android-recommended.config \
    ../android-kernel-configs/android-4.14/android-recommended-x86.config

现在 .config 文件已生成。此时你可能想要 运行 make menuconfig 并根据需要修改内核配置(例如启用一些调试选项等)。

构建内核:

$ make -j4

它应该构建良好,但我没有测试它(既没有构建,也没有模拟器中的 运行ning)。因此,如果您可以验证这些说明是否有效,请提供您的意见。