Как сделать системный вызов из другого системного вызова в пространстве ядра - PullRequest
1 голос
/ 25 октября 2011

Я новичок в разработке ядра Linux. Я реализовал системный вызов скажем my_pid в ядре Linux 2.6. Я хочу вызвать системный вызов getpid из моего системного вызова. Как я могу это сделать?

Я хочу что-то вроде:

pid_t my_pid () { вернуть getpid (); }

Также из C в пользовательском пространстве я могу вызвать любой системный вызов, используя: syscall (); Каков общий способ сделать это в режиме ядра?

1 Ответ

9 голосов
/ 26 октября 2011

Там - это нет общего способа сделать это.

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

Для конкретного случая getpid() вы можете просто использовать current->pid.

Имя ядра current всегда является указателем на текущий task_struct, который определяется через <linux/sched.h> (поиск struct task_struct). Код, который обращается к членам этого, обычно встроен, т. Е. Даже вызов функции (и тем более системный вызов) не требуется, чтобы получить их, когда ваш код работает как часть ядра.

...