LINUX.ORG.RU

вызов функции из модуля ядра

 


0

2

Всех приветствую.
Понадобилось тут подрихтовать пару модулей ядра. Всплыла необходимость из одного модуля вызвать функцию из другого модуля. Особенность в том, что модуль из которого будет вызываться функция загружаемый и на момент вызова функции может быть и не загружен. Поэтому вопрос:
Как правильно обычно организуется вызов функций в таком случае?
Проверятся загруженность модуля? Или еще как-то.
Интересует в первую очередь встроенные механизмы ядра для этого случая, а не теоретические измышления.

★★★★

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

Ядро не даст подгрузить модуль с неразрешенными зависимостями

А если модуль который будет вызывать функцию, в ядро вкомпилен, что будет в этом случае?

yax123 ★★★★ ()
Ответ на: комментарий от yax123

Оно не даст вкомпилить в ядро компонент с отключенными зависимостями. menuconfig не даст этого выбрать, а если потрогать .config ручками - эти изменения будут удалены.

Lavos ★★★★★ ()
Ответ на: комментарий от yax123

Хз, не сталкивался еще.

Чисто навскидку предположу - либо так ядро не соберешь, либо отхватишь в лучшем случае упс.

О, Lavos подтвердил.

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

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

yax123 ★★★★ ()
Ответ на: комментарий от Lavos

Оно не даст вкомпилить в ядро компонент с отключенными зависимостями. menuconfig не даст этого выбрать

Враньё. Не все в ядре собирается в виде модулей - аппаратно-зависимый код жестко прописан в make-файлах, к тому же код и данные помеченные макросами __init удалаяется в рантайме и преспокойно слинкуется при сборке.

anonymous ()
Ответ на: комментарий от yax123

Правильно ли я понимаю, что то чего я хочу, в принципе не реализуемо

Почитайте книжки (LDD3 - рекомендую) и делайте как там написано и все будет реализовано в лучшем виде.

anonymous ()
Ответ на: комментарий от anonymous

Да, можно поправить зависимости в makefile, но тогда сборка просто упадет на этапе компиляции.

Lavos ★★★★★ ()
Ответ на: комментарий от anonymous

... и все будет реализовано в лучшем виде

Всегда делайте все хорошее хорошо и никогда не делайте плохое и все будет в
лучшем виде.

yax123 ★★★★ ()
Ответ на: комментарий от anonymous

помеченные макросами __init удалаяется в рантайме

чегой? может быть память, использованная для них, освобождается?

false ★★★★★ ()
Ответ на: комментарий от yax123

Всегда делайте все хорошее хорошо

Просто я не знаю как тебя объяснить что в ядре _нужно_ читать документацию, на форуме невозможно объяснить все нюансы, да и никто не знает тут их лучше автора LDD. И даже там описана малая часть - я пример привел как запросто выстрелить в ногу на макросах __init.

anonymous ()
Ответ на: комментарий от false

может быть память, использованная для них, освобождается?

конечно - этот код и данные размещаются в специальном сегменте. Поумничать решил ? :)

anonymous ()
Ответ на: комментарий от anonymous

Я спрашиваю можно ли почистить зубы сажей из дымохода, а вы мне в ответ читайте что написано на тюбиках с зубной пастой.
А теперь признаете что док много, нюансов еще больше.
И как к этому относится? Сначала «ваш КО», потом взаимоисключающие?

Я спрашиваю про не совсем обычные вещи. Я догадываюсь и без всяких LDD3 (хотя его я регулярно почитываю), что так делать нельзя. Но вот хочется мне попробовать и спрашиваю может кто-то через это уже проходил.

yax123 ★★★★ ()
Ответ на: комментарий от yax123

Но вот хочется мне попробовать

Я так и не понял - чего тебе хочется попробовать - дышать через жопу ? Статическая линковка не поможет в случаях когда код в разных секциях (ага - макросы __init) - на этапе линковки получишь варнинг section missmatch но в целом ядро соберется. С модулями - оно или не соберется вообще или при загрузке модуля ядро не сможет разрулит зависимости и не загрузит твой говномодуль.

anonymous ()

А можно прописать зависимость того, который нужно дёргать, от того, кто дёргает?

С ядром дела не имел, но предполагаю, что можно сделать функцию, в которую пердать указатель на функцию.

Можно ещё, наверное, сделать третий модуль, от которого зависят эти два, в котором две функции, set_callback и get_callback.

xeiph ()
Ответ на: комментарий от anonymous

И что depmod? Я не могу написать модуль a.ko, который экспортирует функцию set_callback, и модуль b.ko, который зависит от a и эту функцию использует?

xeiph ()
Ответ на: комментарий от anonymous

Тебе так кажется от недостаточных знаний.

Ну конечно, эгоцентрик ты наш.

false ★★★★★ ()
Ответ на: комментарий от xeiph

Я не могу написать модуль a.ko, который экспортирует функцию set_callback, и модуль b.ko, который зависит от a и эту функцию использует?

Можешь, чож нет-то.

false ★★★★★ ()
Ответ на: комментарий от false

И модуль b может передать в set_callback указатель на какую-то свою внутреннюю функции, которую a потом когда-нибудь вызовет (ведь адресное пространство одно)?

xeiph ()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.