LINUX.ORG.RU

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

 , ,


1

6

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

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

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

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

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


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

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

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

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

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