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)。因此,如果您可以验证这些说明是否有效,请提供您的意见。
我正在尝试生成一个自定义 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)。因此,如果您可以验证这些说明是否有效,请提供您的意见。