Как вызвать любую функцию ядра?

Я знаю, что Kprobes можно использовать для проверки любой функции ядра. Но после просмотра его документов я понимаю, что это в основном некая пассивная сущность. Он просто помещает зонд в середину последовательности выполнения.

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

Как я могу этого достичь?

Обновлено:

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

2 ответа

Решение

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

Не все функции могут быть использованы по крайней мере напрямую.

Учитывайте следующие моменты при вызове функции ядра в вашем случае.

  • Функция ядра из другого модуля может быть использована только в том случае, если она экспортируется с помощью макроса семейства EXPORT_SYMBOL.
  • статические функции нельзя использовать непосредственно за пределами этого файла.

пример

Определение функции (i2c_smbus_read_byte_data)
http://lxr.free-electrons.com/source/drivers/i2c/i2c-core.c#L2689

Используется здесь
http://lxr.free-electrons.com/source/drivers/i2c/i2c-core.c#L350

Функции ядра не могут быть просто вызваны из приложений, которые живут в пространстве пользователя. Системные вызовы - единственные функции в пространстве пользователя, которые могут запрашивать службы ядра.

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

РЕДАКТИРОВАТЬ


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

Другие вопросы по тегам