Уменьшение размера образа ядра AOSP - PullRequest
0 голосов
/ 22 апреля 2020

Я пытаюсь собрать ядро ​​AOSP, но не могу сделать полученный boot.img достаточно маленьким, чтобы набрать sh и загрузить его. Он содержит сжатое ядро ​​с добавленными dtbs и initramfs. Я собираюсь провести фазз-тестирование драйверов, используя Syzkaller . В настоящее время я использую Pixel XL (марлин). Я использую ветку ядра android-msm-marlin-3.18-pie-qpr3 (пробовал также связанные с ней) и пробую различные наборы инструментов на основе g cc. Для AOSP я выбрал P ie (тег android-9.0.0_r46, сборка PQ3A.190801.002). Тем не менее, обратите внимание, что это общий вопрос, он не относится к спецификации fuzz-, kernel- или device c.

Мои требования:

  • Сохранить поставщика драйверы (потому что это то, что я хочу сказать)

  • Включить KASAN и KCOV (и их зависимости)

  • Включить CONFIG_DEBUG_INFO

  • Keep printk и т. П.

Вещи, которые я пробовал, и идеи, которые у меня есть:

  • Настройка конфигурации ядра - Это помогает в некоторой степени, но этого недостаточно. Я уже использую например CONFIG_CC_OPTIMIZE_FOR_SIZE=y, CONFIG_CORE_SMALL=y, CONFIG_NET_SMALL=y, CONFIG_KASAN_OUTLINE=y, CONFIG_TRIM_UNUSED_KSYMS=y, CONFIG_SLOB=y, ...

  • Compress ядро (и / или initramfs) с xz или lzma - идея кажется многообещающей. Я заметил, что система сборки ядра для arm64 не поддерживает ни xz, ни lzma из коробки (не уверен почему?), Поэтому я сам исправил ее, чтобы собрать. Сборка завершается успешно, и в результате Image.xzkern-dtb или Image.lzma-dtb выглядит нормально, однако при попытке загрузить его (журналы последовательной отладки):

[5710] partition_enable_wp: group 0 not defined
[5720] DTB offset is incorrect, kernel image does not have appended DTB
[5720] Device info 0x00000131/00010001/0x00010001/0, pmic 0x20009/0x455013/0x0/0x0
[5740] ERROR: Appended Device Tree Blob not found
[5740] panic (frame 0x83a86848):
...

Я проверил наличие DTB и ядро ​​сжимается как задумано. Мой вопрос здесь: это вообще возможно? Поддерживает ли загрузчик Android xz / lzma? Я почти не нашел информации об этом в Интернете. Есть ли способ использовать сжатые ядра xz или lzma для загрузки Android?

  • Изменить размер загрузочного раздела - Это кажется трудным, но возможным, не уверенным, стоит ли попытки. Можете ли вы порекомендовать какие-либо ресурсы или инструменты для этого?

  • Удаление ненужных функций из initramfs

  • Ссылка- Оптимизация времени - я не смог заставить его работать с ядром AOSP, независимо от того, какую версию g cc я использую. Любые советы?

  • Сборка функций в виде модулей вместо встроенных - Сборка не удастся с любой конфигурацией, которую я пробую, даже при сборке только отдельных функций как модуль (с разными ошибками компилятора или компоновщика в зависимости от конфигурации). У вас есть какие-либо руководства или советы?

Я также следовал руководству по созданию ядра Pixel с KASAN и KCOV на домашней странице AOSP ( ссылка ). У меня были некоторые проблемы с этим, но в конечном итоге (используя Linaro G CC 5.5.0, с некоторыми изменениями конфигурации и без CONFIG_DEBUG_INFO), я мог получить его сборку и загрузку. Хороший как подтверждение концепции, но не то, что мне нужно, поскольку мне пришлось пропустить некоторые необходимые функции.

Я довольно сильно застрял и уже потратил несколько недель на эту проблему. Есть ли другие варианты? Я был бы счастлив, чтобы это загрузилось любым способом. Я с радостью предоставлю любые подробности и логи, но мне показалось, что это уже очень длинный пост. Заранее большое спасибо!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...