Ошибка при сборке ядра Linux 5.4

Вопрос или проблема

Проблема со сборкой ядра на Realme Note 50.
Кто-нибудь может помочь?

./include/linux/android_kabi.h:43:17: error: static assertion failed: "include/linux/sched.h:1312: struct{ u64 last_enqueue_ts; u64 last_sleep_ts; } is larger than "
43 | _Static_assert(sizeof(struct{_new;}) <= sizeof(struct{_orig;}),
| ^~~~~~~~~~~~~~
./include/linux/android_kabi.h:67:17: note: in expansion of macro ‘__ANDROID_KABI_CHECK_SIZE_ALIGN’
67 | __ANDROID_KABI_CHECK_SIZE_ALIGN(_orig, _new);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
./include/linux/sched.h:1312:9: note: in expansion of macro ‘_ANDROID_KABI_REPLACE’
1312 | _ANDROID_KABI_REPLACE(ANDROID_VENDOR_DATA_ARRAY(1, 2), struct{ u64 last_enqueue_ts; u64 last_sleep_ts; });
| ^~~~~~~~~~~~~~~~~~~~~
./include/linux/android_kabi.h:48:17: error: static assertion failed: “include/linux/sched.h:1312: is not aligned the same as struct{ u64 last_enqueue_ts; u64 last_sleep_ts; }”
48 | _Static_assert(alignof(struct{_new;}) <= alignof(struct{_orig;}),
| ^~~~~~~~~~~~~~
./include/linux/android_kabi.h:67:17: note: in expansion of macro ‘__ANDROID_KABI_CHECK_SIZE_ALIGN’
67 | __ANDROID_KABI_CHECK_SIZE_ALIGN(_orig, _new);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
./include/linux/sched.h:1312:9: note: in expansion of macro ‘_ANDROID_KABI_REPLACE’
1312 | _ANDROID_KABI_REPLACE(ANDROID_VENDOR_DATA_ARRAY(1, 2), struct{ u64 last_enqueue_ts; u64 last_sleep_ts; });
| ^~~~~~~~~~~~~~~~~~~~~
./include/linux/android_kabi.h:43:17: error: static assertion failed: "include/linux/sched.h:1314: struct{ unsigned long last_switch_count; unsigned long last_switch_time; unsigned long used_for_hung_task; } is larger than "
43 | _Static_assert(sizeof(struct{_new;}) <= sizeof(struct{_orig;}),
| ^~~~~~~~~~~~~~
./include/linux/android_kabi.h:67:17: note: in expansion of macro ‘__ANDROID_KABI_CHECK_SIZE_ALIGN’
67 | __ANDROID_KABI_CHECK_SIZE_ALIGN(_orig, _new);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
./include/linux/sched.h:1314:9: note: in expansion of macro ‘_ANDROID_KABI_REPLACE’
1314 | _ANDROID_KABI_REPLACE(ANDROID_OEM_DATA_ARRAY(1, 3), struct{ unsigned long last_switch_count; unsigned long last_switch_time; unsigned long used_for_hung_task; });
| ^~~~~~~~~~~~~~~~~~~~~
./include/linux/android_kabi.h:48:17: error: static assertion failed: “include/linux/sched.h:1314: is not aligned the same as struct{ unsigned long last_switch_count; unsigned long last_switch_time; unsigned long used_for_hung_task; }”
48 | _Static_assert(alignof(struct{_new;}) <= alignof(struct{_orig;}),
| ^~~~~~~~~~~~~~
./include/linux/android_kabi.h:67:17: note: in expansion of macro ‘__ANDROID_KABI_CHECK_SIZE_ALIGN’
67 | __ANDROID_KABI_CHECK_SIZE_ALIGN(_orig, _new);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
./include/linux/sched.h:1314:9: note: in expansion of macro ‘_ANDROID_KABI_REPLACE’
1314 | _ANDROID_KABI_REPLACE(ANDROID_OEM_DATA_ARRAY(1, 3), struct{ unsigned long last_switch_count; unsigned long last_switch_time; unsigned long used_for_hung_task; });
| ^~~~~~~~~~~~~~~~~~~~~
make[1]: *** [scripts/Makefile.build:104: arch/arm64/kernel/asm-offsets.s] error 1
make: *** [Makefile:1243: prepare0] error 2```

Ответ или решение

Ошибка при сборке ядра Linux 5.4 на устройстве Realme Note 50 указывает на проблему с совместимостью структур данных, используемых в Android-коде ядра. Анализируя предоставленный лог ошибок, можно выделить несколько моментов, которые требуют исправления.

Ошибка Компиляции: Статические Утверждения

Ошибка, которую вы наблюдаете, связана с макросом _ANDROID_KABI_REPLACE, применяемым для обеспечения совместимости API/ABI (Application Binary Interface) Android-ядра. Эти макросы используются для проверки размера и выравнивания структур в различных частях кода ядра.

  1. Статическая проверка размера:

    ./include/linux/android_kabi.h:43:17: error: static assertion failed: "..."

    Это указывает на то, что новая структура, задаваемая _new, превышает размеры оригинальной структуры _orig. Такое несоответствие может вызвать ошибки при взаимодействии разных компонентов системы.

  2. Проверка выравнивания:

    ./include/linux/android_kabi.h:48:17: error: static assertion failed: "..."

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

Возможные Причины и Решения:

  1. Несоответствие версий Android ядра:
    Возможно, вы используете источник, несовместимый с текущей версией кода ядра Android. Проверьте, чтобы исходные файлы соответствовали той версии ядра, для которой разработаны используемые патчи.

  2. Необходимость в изменении структур:
    Проверьте размеры и выравнивание названных структур в исходниках. Если вы добавляли или изменяли поля, убедитесь, что новые структуры соответствуют оригинальным по размеру и выравниванию.

  3. Правки в исходном коде:

    • Изучите, какие изменения вы внесли в include/linux/sched.h и include/linux/android_kabi.h.
    • Убедитесь, что не нарушены существующие полиморфные интерфейсы.
    • Возможно, нужно заменить _ANDROID_KABI_REPLACE на соответствующий аналог, если у вас специфические изменения в ядре Android.

Рекомендации:

  • Синхронизация с репозиторием производителя: Проверьте, есть ли обновления от производителя устройства. Возможно, они уже исправили подобные проблемы в своих репозиториях.
  • Откат изменений: При неудачных попытках исправления лучше всего откатить изменения к состоянию по умолчанию и проанализировать порядок действий поочередно.
  • Обратитесь к сообществу разработчиков: Публикация данной информации на форумах разработчиков, связанных с Android-ядром, может помочь в получении советов от опытных специалистов.

Снижение барьера совместимости и приведение всех структур в соответствии с желаемыми размерами и выравниванием является ключом к успешной сборке ядра на вашем устройстве. Удачи в решении вашего вопроса!

Оцените материал
Добавить комментарий

Капча загружается...