гостевые дополнения виртуального бокса: ОШИБКА: конфигурация ядра недействительна

while read name; do for i in {00..99}; do echo ${name}${i}; done; done < name_list.txt
4
02.03.2020, 12:21
1 ответ

По-видимому, существует конфликт между макросами, связанными с атрибутом gcc fallthroughв гостевых дополнительных драйверах виртуального ящика, и заголовками ядра Linux.

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

root@vdebtest:/usr/src/vboxguest-5.1.38$ grep fallthrough -R
vboxvideo/include/iprt/cdefs.h:# define RT_FALL_THROUGH()      __attribute__((fallthrough))
vboxguest/include/iprt/cdefs.h:# define RT_FALL_THROUGH()      __attribute__((fallthrough))
vboxsf/include/iprt/cdefs.h:# define RT_FALL_THROUGH()      __attribute__((fallthrough))

Но в ядре Linux в include/linux/compiler _attribute.h есть что-то вроде этого:

/*
 * Add the pseudo keyword 'fallthrough' so case statement blocks
 * must end with any of these keywords:
 *   break;
 *   fallthrough;
 *   goto <label>;
 *   return [expression];
 *
 *  gcc: https://gcc.gnu.org/onlinedocs/gcc/Statement-Attributes.html#Statement-Attributes
 */
#if __has_attribute(__fallthrough__)
# define fallthrough                    __attribute__((__fallthrough__))
#else
# define fallthrough                    do {} while (0)  /* fallthrough */
#endif

Теперь, если я правильно понимаю ваш журнал сборки, я думаю, что эти RT_FALL_THROUGHна самом деле закончатся как __attribute__((__attribute__((__fallthrough__)))), что испортит код.

Не могли бы вы попробовать зайти в свой каталог /usr/src/vboxguest-x.y.zи заменить все __attribute__((fallthrough))(, их всего 3 в моей установке )на __attribute__((__fallthrough__))? (Обычные falthroughтоже должны работать, я думаю )...

Затем перестройте все это с помощью ./build_in_tmp.

Обновление:Я вижу, что некоторое время назад были жалобы на эту тему здесь . И вроде бы уже исправлено через этот тикет .

3
28.04.2021, 23:21

Теги

Похожие вопросы