Делает ли выделенная память модуль, который будет рассматриваться ядром как "используемый"
Я новичок в программировании ядра и в настоящее время работаю с драйвером Madwifi для беспроводной сетевой платы tplink (чипсет Atheros). Моя версия ядра 2.6.32-37 (Ubuntu).
Я работаю с драйвером, который был изменен другими людьми (с которыми я не знаю и не могу связаться для получения дополнительной информации), и я боюсь, что они динамически распределяют память (используя kmalloc), но не освобождают ее соответственно.
Мои вопросы:
Если они фактически не освободили выделенную память, заставляет ли операционная система считать модуль "занятым", что делает его неспособным выгрузить модуль?
И как или где я должен освободить выделенную память в модулях (учитывая тот факт, что модуль должен работать "навсегда")?
Спасибо!
Омер.
1 ответ
Нет. Распределив память с kmalloc
(или любой из его коллег) не увеличивает use-count
модуля. Владельцы выделенной памяти могут измениться в любое время, просто передав адрес (который хранится в переменной-указателе) другому модулю / блоку, хранилище которого находится где-то. Ядро не отслеживает это.
То, как память распределяется, предоставляется и берется, во многом зависит от выбора архитектуры кодирования и модели кодирования. Это написано на C; нет никаких правил для этого.
Один из способов обработать счетчик использования модуля - использовать kref. Для получения дополнительной информации см. Documentation/kref.txt в ядре-исходном дереве или здесь.