Как системный вызов находится в Linux? - PullRequest
1 голос
/ 02 ноября 2009

Я пытаюсь добавить новый системный вызов в Red Hat 8.0, и я запутался в некоторых аспектах этого механизма. Я следовал этому руководству: http://www.linuxjournal.com/article/3326, в котором подробно описаны шаги по обновлению таблицы системных вызовов в entry.S и unistd.h.

Однако я не могу понять, как компилятор на самом деле находит, где реализован системный вызов, на основе этой информации. Очевидно, что есть что-то, что включает #include s, но я не могу найти никаких указаний на то, что были сделаны включения, и не могу найти многие системные вызовы в коде. Что мне нужно сделать, чтобы мой системный вызов был найден?

1 Ответ

5 голосов
/ 03 ноября 2009

Библиотека C предоставляет функции, которые выглядят как системные вызовы. На самом деле происходит то, что вызывается функция библиотеки C, а затем выполняется системный вызов.

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

Или вы можете использовать функцию syscall и макросы, предоставляемые библиотекой C: syscall и _syscall.

Попробуйте man syscall и man _syscall, чтобы увидеть детали.

...