Я пытаюсь собрать ядро 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
), я мог получить его сборку и загрузку. Хороший как подтверждение концепции, но не то, что мне нужно, поскольку мне пришлось пропустить некоторые необходимые функции.
Я довольно сильно застрял и уже потратил несколько недель на эту проблему. Есть ли другие варианты? Я был бы счастлив, чтобы это загрузилось любым способом. Я с радостью предоставлю любые подробности и логи, но мне показалось, что это уже очень длинный пост. Заранее большое спасибо!