Можно ли добавить системный вызов через LKM? - PullRequest
9 голосов
/ 21 января 2009

Я хотел бы добавить новый системный вызов через LKM, но я не уверен, как это сделать. То есть я знаю, что если я хочу добавить совершенно новый системный вызов, я могу просмотреть таблицу sys_call_table и найти sys_ni_syscall и просто заменить его, но мне было любопытно, можно ли на самом деле добавить до sys_call_table. Я понимаю, что возможно не возможно, учитывая, что это массив фиксированного размера, но мне было интересно, есть ли какие-нибудь другие умные способы добавления системных вызовов без переопределения неиспользованного номера системного вызова.

Ответы [ 3 ]

4 голосов
/ 21 января 2009

Вот пример
системные вызовы Linux

редактирование:
В приведенном выше примере показано, как реализовать системный вызов, насколько он реализован из загружаемого модуля; AFAIK, это невозможно, если только вы не перезаписали существующий, потому что размер массива равен # define.

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

2 голосов
/ 13 ноября 2013

Это старый вопрос, но, тем не менее, я хочу предложить свое решение. Самый простой способ реализовать среду, похожую на системный вызов, - это использовать поддельное устройство. В частности, вы можете создать новый драйвер устройства, который на самом деле ничего не управляет. Тем не менее, запись на нем, может заставить установленный модуль выполнить необходимые действия. Кроме того, если вы хотите предложить несколько услуг, вы можете сопоставить их с ioctl операциями.

1 голос
/ 21 января 2009

Проверьте на сайте Linux Documentation Project «Руководство по программированию модуля ядра Linux» (http://www.tldp.org/LDP/lkmpg/2.6/html/index.html). В частности, ищите здесь системные вызовы: http://www.tldp.org/LDP/lkmpg/2.6/html/x978.html. Это должно дать вам старт, по крайней мере.

...