LINUX.ORG.RU

При написании своего модуля ядра как определить, что символы из другого модуля доступны (загружен)?

 , ,


1

6

Привет. Разрабатываю модуль ядра, который взаимодействует с системным, но только если он есть и загружен.

В коде проверяю так:

#if IS_ENABLED(CONFIG_HMM_MIRROR) 
  hmm_mirror_register(...);
#endif

НО, если модуль hmm не загружен, то при insmod будет ошибка Unknown symbol (err -2).

Как правильно проверить, что системный модуль реально загружен, а не просто включён? Но при этом не загружать его/не выпадать в ошибку и т.д., если не загружен.


Ответ на: комментарий от utf8nowhere

Спасибо, так и сделал через «symbol_get» но смущает как раз «правильность» способа.

Rif
() автор топика

modprobe вместо insmod не решает эту проблему?

Если ты делаешь явный вызов функций других модулей, то только modprobe решает твою проблему.

Есть другой случай, когда ты вызываешь какую-то функцию которая может выполнить правильно действия только если загружен какой-то другой модуль, тогда помогает «request_module(„xxxxx“);»

Теоретически можно сначала вызвать request_module(), потом получить адрес нужного символа symbol_get() и воспользоваться уже им.

vel ★★★★★
()
Последнее исправление: vel (всего исправлений: 2)
Ответ на: комментарий от vel

Как раз нужно избежать необходимости явной или косвенной загрузки модуля. modprobe подгрузит зависимость, как и request_module.

Rif
() автор топика

У модулей есть зависимости, ищи как они прописываются.

anonymous
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.