Android 交叉编译内核

Android 交叉编译内核,android,linux-kernel,cross-compiling,volatility,lime,Android,Linux Kernel,Cross Compiling,Volatility,Lime,我正在努力实现类似的目标 . 以下是我正在使用的环境: Ubuntu 14.04,Android Studio 2.3,Android NDK r14,emulator-api22 我在第步交叉编译内核时遇到困难。 我的目标是金鱼内核3.10 以下是我遵循的步骤。任何帮助都将不胜感激 方法1: export ARCH=arm export SUBARCH=arm export CROSS_COMPILE=~/android-ndk/android-ndk-r14/toolchains/arm-l

我正在努力实现类似的目标 . 以下是我正在使用的环境:

Ubuntu 14.04,Android Studio 2.3,Android NDK r14,emulator-api22

我在第步交叉编译内核时遇到困难。 我的目标是金鱼内核3.10 以下是我遵循的步骤。任何帮助都将不胜感激

方法1

export ARCH=arm
export SUBARCH=arm
export CROSS_COMPILE=~/android-ndk/android-ndk-r14/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-
$ export ARCH=arm
$ export SUBARCH=arm
$ export CROSS_COMPILE=~/android-ndk/android-ndk-r14/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-
$ make ranchu_defconfig
$ vim .config # added this to .config file

CONFIG_MODULES=y
CONFIG_MODULES_UNLOAD=y
CONFIG_MODULES_FORCE_UNLOAD=y

$ make
教程建议我们必须按如下方式运行下一个命令

make goldfish_armv7_defconfig
但是当我检查目录“android source/arch/arm/configs/”时,那里没有这样的配置文件。一些教程建议我们可以从内核2.6复制并粘贴文件,所以我做了同样的事情,然后添加

CONFIG_MODULES=y
CONFIG_MODULES_UNLOAD=y
CONFIG_MODULES_FORCE_UNLOAD=y
但更进一步

$ make
错误结果:

arch/arm/mm/mmu.c: In function 'build_mem_type_table':
arch/arm/mm/mmu.c:470:18: error: 'L_PTE_MT_VECTORS' undeclared (first use in this function)
   vecs_pgprot |= L_PTE_MT_VECTORS;
                  ^
arch/arm/mm/mmu.c:470:18: note: each undeclared identifier is reported only once for each function it appears in
arch/arm/mm/mmu.c: At top level:
arch/arm/mm/mmu.c:637:23: warning: 'early_pte_alloc_and_install' defined but not used [-Wunused-function]
 static pte_t * __init early_pte_alloc_and_install(pmd_t *pmd,
                       ^
make[1]: *** [arch/arm/mm/mmu.o] Error 1
make: *** [arch/arm/mm] Error
方法2

export ARCH=arm
export SUBARCH=arm
export CROSS_COMPILE=~/android-ndk/android-ndk-r14/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-
$ export ARCH=arm
$ export SUBARCH=arm
$ export CROSS_COMPILE=~/android-ndk/android-ndk-r14/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-
$ make ranchu_defconfig
$ vim .config # added this to .config file

CONFIG_MODULES=y
CONFIG_MODULES_UNLOAD=y
CONFIG_MODULES_FORCE_UNLOAD=y

$ make
一切都和方法1一样,我只是改变了一个变量

export ARCH=arm64

make ranchu_deconfig
但我也犯了同样的错误

方法3

export ARCH=arm
export SUBARCH=arm
export CROSS_COMPILE=~/android-ndk/android-ndk-r14/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-
$ export ARCH=arm
$ export SUBARCH=arm
$ export CROSS_COMPILE=~/android-ndk/android-ndk-r14/toolchains/arm-linux-androideabi-4.9/prebuilt/linux-x86_64/bin/arm-linux-androideabi-
$ make ranchu_defconfig
$ vim .config # added this to .config file

CONFIG_MODULES=y
CONFIG_MODULES_UNLOAD=y
CONFIG_MODULES_FORCE_UNLOAD=y

$ make
此命令已成功运行:

但是当我使用下面的命令运行模拟器时

root@ubuntu:~/Android/Sdk/tools# ./emulator -avd Nexus5x22 -kernel ~/android-source2/android-source/arch/arm/boot/zImage -show-kernel –verbose
我遇到了“Linux内核太旧,无法运行ram磁盘”的错误:

谷歌的Android内核乱七八糟。当他们向后移植时,他们忘了定义
L_PTE_MT_向量


解决方案就是添加它。

确保您的
CROSS_COMPILE=arm-linux-androideabi-
路径包含
$HOME/android-ndk/android-ndk-r14/toolschains/arm-linux-androideabi-4.9/prebuilded/linux-x86\u 64/bin
。(这只是第一步)