версия для Android с символами отладки ядра - PullRequest
0 голосов
/ 19 октября 2018

Я пытаюсь сгенерировать собственный образ андроида для запуска под эмулятором, используя скомпилированную мной версию ядра (идея состоит в том, чтобы включить символы отладки).В 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 с символами отладки ядра;Вы знаете, есть ли предварительно скомпилированные образы с символами отладки ядра?

Спасибо!

1 Ответ

0 голосов
/ 29 октября 2018

Если проблема действительно в ядре, ниже приведены инструкции по ее сборке из исходных кодов.

1.Получить исходные коды ядра

Прежде всего, вам необходимо выяснить устройство, для которого вы хотите собрать ядро.Зная имя устройства, вы можете клонировать для него правильные исходники ядра Android и собрать его.Например, для золотой рыбки вы должны использовать ядро ​​из:

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

Если вы не уверены, какое ядро ​​использовать для вашего устройства, попробуйте использовать так называемое «общее ядро ​​Android»:

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

В основном это работает так:

  • Общее ядро ​​Android основано на обычном ядре Linux, добавляя некоторые патчи для Android поверхit
  • Ядра Android для определенных устройств основаны на общем ядре, добавляя к нему некоторые патчи для конкретных устройств.

Теперь, когда вы «клонировали» ядро, перейдите кВерсия ветки, которую вы хотите использовать:

$ 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.Сконфигурируйте и соберите ядро ​​

Теперь в вашем каталоге исходного кода ядра вы можете создать конфигурацию ядра (файл .config), используя соответствующий файл defconfig и фрагменты конфигурации Android.Например, для золотой рыбки вы должны использовать эту команду:

$ ./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

Должно быть хорошо, но я не проверял (ни здание, ни работающий в эмуляторе).Поэтому, если вы можете проверить, работают ли эти инструкции, пожалуйста, оставьте свои комментарии.

...