5

Что произойдет, если __init & Атрибуты __exit используются в модулях инициализации и выхода & Что произойдет, если я их не использую. Пример, как показано ниже.Использование атрибутов __init & __exit

Использование атрибутов

static __init int myinit(void) 
{} 
static __exit void myexit(void) 
{} 

Witout атрибуты

static int myinit(void) 
{} 
static void myexit(void) 
{} 

ответ

3

@Sandy, The __init макросов вызывает функцию инициализации, чтобы быть отброшены, и ее память (vmalloc) освобождается сразу функции инициализации заканчивается для встроенных драйверов. Макрос __exit вызывает упущение функции, когда модуль встроен в ядро. Оба __init и __exit не будут полезны для LKM. Также пройти через эти ссылки What does __init mean in the Linux kernel code? http://amar-techbits.blogspot.in/2012/08/understanding-macro-init-and-exit-in.html

+0

'__init' и (в меньшей степень) '__exit' также полезны для загружаемых модулей ядра, а не только для встроенных. Их эффект такой же, как вы описали, за исключением того, что '__exit' инструктирует опустить отмеченную им функцию, если разгрузка модуля отключена, IIRC. – Eugene

+0

@Eugene, hmm true и спасибо за исправление меня :-) –

3

Основное различие штормовых памяти.

__init token в ней намек на ядро, что данный function is used only at initialization time. модуль Загрузчик drops the initialization function after the module is loaded, making its memory available for other uses. Существует аналогичный тег (__initdata) для данных, используемых только в процессе инициализации. Использование __init и __initdata является необязательным, но это стоит того. Просто не забудьте использовать их для любой функции (или структуры данных), которую вы будете использовать после завершения инициализации.

Использование __init family of macros to place one-time initialization routines into a common section in the object file. Его двоюродный брат __initdata, используемый для обозначения единовременных элементов данных. Функции и данные, помеченные как инициализация с использованием этих макросов, собираются в специально названный раздел ELF.

Позже, после использования этих одноразовых функций инициализации и объектов данных, kernel frees the memory occupied by these items. Вы, возможно, видели сообщение знакомого ядра вблизи конечного части boot process saying, "Freeing init memory: 296K." .

Цель размещения этой функции в специальный раздел файла объектного так memory space that it occupies can be reclaimed when it is no longer needed.

+0

Является ли это целое сообщение должно быть цитатой? Если да, откуда? –

Смежные вопросы