Перекрестная сборка ядра

Я пытаюсь добиться чего-то похожего на эту https://github.com/volatilityfoundation/volatility/wiki/Android. Ниже приводится среда, которую я использую:

Ubuntu 14.04, Android Studio 2.3, Android NDK r14, эмулятор -api22.

Я сталкиваюсь с трудностями на этапе Cross Compile Kernel. Я нацеливаюсь на ядро ​​золотой рыбки 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-

Учебник, предполагающий, что мы должны запустить следующую команду как

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:

Все так же, как в методе 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-
$ make ranchu_defconfig
$ vim .config # added this to .config file

CONFIG_MODULES=y
CONFIG_MODULES_UNLOAD=y
CONFIG_MODULES_FORCE_UNLOAD=y

$ make

Эта команда выполнена успешно: zImage found.

Но когда я запускаю эмулятор с помощью команды ниже

root@ubuntu:~/Android/Sdk/tools# ./emulator -avd Nexus5x22 -kernel ~/android-source2/android-source/arch/arm/boot/zImage -show-kernel –verbose

Я получаю сообщение об ошибке "Ядро Linux слишком старое для запуска RAM-диска": ошибка RAM-диска

1 ответ

Ядро Google Google испорчено. Они забыли определить L_PTE_MT_VECTORS когда они снова портировали этот патч.

Решение состоит в том, чтобы просто добавить это здесь.

Другие вопросы по тегам