Как сделать системный вызов из другого системного вызова в пространстве ядра

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

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

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

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


person max    schedule 25.10.2011    source источник


Ответы (1)


нет универсального способа сделать это.

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

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

Имя ядра current всегда является указателем на текущий task_struct, который определяется через _ 6_ (найдите struct task_struct). Код, который обращается к его членам, обычно становится встроенным, т.е. нет даже вызова функции (и тем более системного вызова), необходимого для их получения, когда ваш код работает как часть ядра.

person FrankH.    schedule 26.10.2011