Это означает, что функция, находящаяся в секции с заданным временем жизни, ссылается на то, что находится в секции с другим сроком службы.
Когда двоичный код ядра связан, разные части кода и данные разделяются на разные разделы. Некоторые из этих разделов постоянно загружаются, но некоторые другие удаляются, когда они больше не нужны (вещи, которые требуются только при загрузке, например, могут быть освобождены после завершения загрузки - это экономит память).
Если функция, находящаяся в длительном разделе, относится к данным в одном из отбрасываемых разделов, возникает проблема - она может попытаться получить доступ к этим данным, когда она уже была выпущена, что приводит к разным режимам выполнения вопросы.
Это не предупреждение, которое вы исправите сами, если только вы не написали этот код или не знакомы с ним. Он фиксируется путем правильной аннотации функции (или данных, к которой она относится), чтобы она попала в правый раздел. Правильное исправление может быть определено только при детальном знании той части ядра.
Перечень этих разделов и аннотаций, обратитесь к заголовку include/linux/init.h
в ядре исходного дерева:
/* These macros are used to mark some functions or
* initialized data (doesn't apply to uninitialized data)
* as `initialization' functions. The kernel can take this
* as hint that the function is used only during the initialization
* phase and free up used memory resources after
*
* Usage:
* For functions:
*
* You should add __init immediately before the function name, like:
*
* static void __init initme(int x, int y)
* {
* extern int z; z = x * y;
* }
*
* If the function has a prototype somewhere, you can also add
* __init between closing brace of the prototype and semicolon:
*
* extern int initialize_foobar_device(int, int, int) __init;
*
* For initialized data:
* You should insert __initdata between the variable name and equal
* sign followed by value, e.g.:
*
* static int init_variable __initdata = 0;
* static const char linux_logo[] __initconst = { 0x32, 0x36, ... };
*
* Don't forget to initialize data not at file scope, i.e. within a function,
* as gcc otherwise puts the data into the bss section and not into the init
* section.
*
* Also note, that this data cannot be "const".
*/
/* These are for everybody (although not all archs will actually
discard it in modules) */
#define __init __section(.init.text) __cold notrace
#define __initdata __section(.init.data)
#define __initconst __section(.init.rodata)
#define __exitdata __section(.exit.data)
#define __exit_call __used __section(.exitcall.exit)
Другие следуют, с большим количеством комментариев и объяснений.
Смотрите также текст справки для символа CONFIG_DEBUG_SECTION_MISMATCH
Kconfig:
секция анализа несоответствия проверяет, есть ли незаконное
ссылки из одного раздела в другой раздел.
Linux будет во время связи или во время выполнения некоторых разделов
, и любое использование кода/данных, ранее указанных в этих разделах, будет
, скорее всего, приведет к упущению.
В функциях кода и переменных аннотируются
__init, __devinit и т.д. (полный список в включать/Linux/init.h)
который приводит в коде/данных, размещаемых в отдельных разделах.
Анализ раздела рассогласования всегда выполняется после полной сборки
ядра, но при включенной опции в дополнении
сделать следующее:
- Добавить опцию -fno-инлайн-функцию называемой однократно в НКУ
При встраивании функции, аннотированной __init в неинтересной функции
, мы потеряли бы информацию раздела и, таким образом, анализ не поймал бы незаконную ссылку.
Этот параметр указывает gcc на inline less, но также будет
приведет к большему ядру.
- Выполнить анализ раздела рассогласования для каждого модуля/встроенного in.o
Когда мы проводим анализ раздела рассогласования на vmlinux.o мы
теряем valueble информации о том, где несоответствие было
введены.
Выполнение анализа для каждого модуля/встроенного файла.
будет определять, где несоответствие происходит намного ближе к источнику
. Недостатком является то, что мы сообщим о том же
несоответствие не менее двух раз.
- Включить подробные отчеты от modpost, чтобы помочь решить
сообщили о несоответствиях раздела.