#linux #linux-kernel #linux-device-driver #embedded-linux
#linux #linux-ядро #linux-device-driver #встроенный-linux
Вопрос:
пытаясь оптимизировать время загрузки ядра, я отключил CONFIG_CC_OPTIMIZE_FOR_SIZE
флаг в конфигурации. Это привело к большому may-be uninitialized
количеству предупреждений (которые рассматривались как ошибка).
Пытаясь отладить это, я обнаружил, что в Makefile:
ifdef CONFIG_CC_OPTIMIZE_FOR_SIZE
KBUILD_CFLAGS = -Os $(call cc-disable-warning,maybe-uninitialized,)
else
KBUILD_CFLAGS = -O2
endif
Я не понимаю причины отключения предупреждения для неинициализированной переменной, когда ядро оптимизировано по размеру, а не по-другому. Какая мысль стоит за этим, и если я добавлю флаг для игнорирования неинициализированных переменных в более позднем случае «не оптимизировано по размеру», с какими проблемами я могу столкнуться, если таковые имеются.
Любая помощь приветствуется.
Спасибо
Ответ №1:
Самые последние ядра (5.1 и более поздние — еще не выпущены на момент написания — см. Фиксацию b303c6df80c9 («kbuild: вычисление ложноположительных -Wmaybe-неинициализированных случаев в Kconfig«)) есть отдельная опция конфигурации CONFIG_CC_DISABLE_WARN_MAYBE_UNINITIALIZED
, чтобы отключить предупреждение. Эти ядра определяют параметр по умолчанию для GCC версии 4.7 (которая представила предупреждение) и GCC версии 4.8, но параметр можно настроить вручную.
Для вашей версии ядра и компилятора должно быть безопасно изменять Makefile для добавления $(call cc-disable-warning,maybe-uninitialized,)
глобально. В качестве альтернативы вы могли бы рассмотреть возможность использования GCC 4.9 или более поздней версии.