我正在尝试使用我自己编译的内核版本生成一个自定义的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下运行。
另一种可能是获取带有内核调试符号的android oreo图像;您知道是否有带有内核调试符号的预编译映像吗?
谢谢!
答案 0 :(得分:0)
如果问题实际上出在内核中,则以下是如何从源代码构建问题的说明。
首先,您需要确定要为其构建内核的设备。知道设备名称后,您可以为其克隆正确的Android内核源并进行构建。例如,对于金鱼,您应该使用以下内核:
https://android.googlesource.com/kernel/goldfish/
如果不确定设备要使用哪个内核,请尝试使用所谓的“ Android通用内核”:
https://android.googlesource.com/kernel/common/
基本上它是这样的:
现在,您已“ git clone”了内核,签出要使用的版本分支:
$ git checkout android-4.14
我假设您要为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
下载Android内核配置(位于内核目录外部):
$ git clone https://android.googlesource.com/kernel/configs android-kernel-configs
现在,在内核源代码目录中,您可以使用相应的defconfig文件和Android config片段创建内核配置(.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
它应该可以很好地构建,但是我没有对其进行测试(既没有建筑物,也没有在模拟器中运行)。因此,如果您可以验证这些说明是否有效,请提供您的评论。