Вопрос или проблема
Проблема со сборкой ядра на Realme Note 50.
Может, кто-то поможет?
./include/linux/android_kabi.h:43:17: ошибка: статическое утверждение не выполнено: "include/linux/sched.h:1312: struct{ u64 last_enqueue_ts; u64 last_sleep_ts; } больше чем "
43 | _Static_assert(sizeof(struct{_new;}) <= sizeof(struct{_orig;}),
| ^~~~~~~~~~~~~~
./include/linux/android_kabi.h:67:17: примечание: в расширении макроса ‘__ANDROID_KABI_CHECK_SIZE_ALIGN’
67 | __ANDROID_KABI_CHECK_SIZE_ALIGN(_orig, _new);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
./include/linux/sched.h:1312:9: примечание: в расширении макроса ‘_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: ошибка: статическое утверждение не выполнено: “include/linux/sched.h:1312: не выровнено так же, как 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: примечание: в расширении макроса ‘__ANDROID_KABI_CHECK_SIZE_ALIGN’
67 | __ANDROID_KABI_CHECK_SIZE_ALIGN(_orig, _new);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
./include/linux/sched.h:1312:9: примечание: в расширении макроса ‘_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: ошибка: статическое утверждение не выполнено: "include/linux/sched.h:1314: struct{ unsigned long last_switch_count; unsigned long last_switch_time; unsigned long used_for_hung_task; } больше чем "
43 | _Static_assert(sizeof(struct{_new;}) <= sizeof(struct{_orig;}),
| ^~~~~~~~~~~~~~
./include/linux/android_kabi.h:67:17: примечание: в расширении макроса ‘__ANDROID_KABI_CHECK_SIZE_ALIGN’
67 | __ANDROID_KABI_CHECK_SIZE_ALIGN(_orig, _new);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
./include/linux/sched.h:1314:9: примечание: в расширении макроса ‘_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: ошибка: статическое утверждение не выполнено: “include/linux/sched.h:1314: не выровнено так же, как 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: примечание: в расширении макроса ‘__ANDROID_KABI_CHECK_SIZE_ALIGN’
67 | __ANDROID_KABI_CHECK_SIZE_ALIGN(_orig, _new);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
./include/linux/sched.h:1314:9: примечание: в расширении макроса ‘_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] ошибка 1
make: *** [Makefile:1243: prepare0] ошибка 2```
Ответ или решение
Извините за ваши трудности при сборке ядра Linux 5.4 на Kali Linux. Проблемы, такие как ваши, могут возникать по целому ряду причин. Давайте детально разберем ситуацию и найдем возможные пути ее решения.
Анализ Проблемы
Исходя из предоставленной ошибки, основной источник проблемы связан с конфликтами в макросах при проверке размеров и выравнивании структур в файлах android_kabi.h
и sched.h
ядра. Ошибки указывают на то, что структура, с которой вы работаете, имеет размеры или выравнивание, отличное от ожидаемого, что вызывает сбой в статическом утверждении.
Примеры ошибок:
static assertion failed: “структура { u64 last_enqueue_ts; u64 last_sleep_ts; } больше, чем ожидалось"
static assertion failed: “структура не выровнена так же, как ожидалось по адресу”
Возможные Причины
-
Проблемы с совместимостью Android Vendor Hooks:
Некоторые ошибочные сообщения указывают на макросы, специфичные для Android (_ANDROID_KABI_REPLACE
). Это может свидетельствовать о том, что вашу сборку ядра конфигурируют с элементами, характерными для Android, что может быть не совместимо с вашей системой Kali Linux на вашем оборудовании. -
Ошибки в конфигурации ядра:
Неправильная конфигурация ядра может привести к тому, что специфичные для архитектуры элементы не правильно настроены для вашего устройства ARM64, что может вызвать ошибки компиляции. -
Устаревшие или несовместимые патчи:
Если вы используете патчи или нестабильные ветки кода, возможно, они несовместимы с другими частями кода ядра.
Решения
-
Проверка конфигурации ядра:
Убедитесь, что вы используете конфигурацию ядра, подходящую для вашего оборудования (в данном случае ARM64 для Realme Note 50). Для этого выполнитеmake menuconfig
и пересмотрите все параметры настройки относительно поддержки Android и других опциональных частей ядра, которые могут не потребоваться. -
Удаление специфичных для Android макросов:
Если вы не планируете запуск Android на вашем оборудовании, возможно, стоит отключить любые патчи или макросы, вроде_ANDROID_KABI_REPLACE
, которые могут вызвать несовместимости и предварительно протестировать сборку без них. -
Использование стабильной версии кода:
Вернитесь к стабильным выпускам ядра без экспериментальных патчей и с более надежной поддержкой архитектур и систем, на которых вы планируете запускать ваше устройство. -
Обратитесь за специализированной помощью:
Если проблема сохраняется, обращение на такие форумы, как Unix & Linux StackExchange, разработчики дистрибутива Kali Linux или сообщество поддержки для разработчиков Android может помочь получить более специализированные советы и готовые решения от сообщества.
Заключение
Компиляция ядра Linux может представлять сложность, особенно при нестандартных конфигурациях или специфических патчах. Постарайтесь разобраться, действительно ли все конфигурационные параметры совместимы и соответствуют архитектуре вашего устройства. Постепенно исключайте вероятные причины ошибок и следуйте рекомендациям, изложенным выше, чтобы успешно достичь стабильной сборки.