История системных вызовов добавлена ​​в Linux? - PullRequest
28 голосов
/ 23 июля 2011

Где я могу получить полный список минимальной версии Linux, необходимой для каждого системного вызова? Я ищу общий ответ на вопросы вида «Если я использую syscall X, какая минимальная версия Linux, на которой мой код может работать?»

Ответы [ 4 ]

30 голосов
/ 10 февраля 2012

Эту информацию можно найти на странице справки syscalls(2). Для тех системных вызовов, в которых не указана версия ядра, системный вызов появился в ядре 1.0 или более ранней версии.

9 голосов
/ 23 июля 2011

Линус долго критиковал проверку пространства пользователей на наличие определенных версий ядра, чтобы узнать, доступна ли эта функция - вместо этого рекомендуется проверять нужную функцию (не реализованные системные вызовы возвращают ENOSYS).

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

4 голосов
/ 23 июля 2011

Это можно найти при использовании сайтов, таких как http://linux.die.net/, рядом с нижними частями страниц для вызовов API, в разделе «Версия».Например, inotify был добавлен в Linux 2.6.13.

Для вызовов posix это неприменимо, поскольку они собраны в соответствии со спецификациями Posix, например, read имеет раздел «Соответствие» с упоминанием POSIX.1-2001.

2 голосов
/ 11 февраля 2012

В файле include / asm-generic / unistd.h содержится список системных вызовов. Вы можете проверить историю этого файла по адресу:

http://git.kernel.org/?p=linux/kernel/git/torvalds/linux.git;a=history;f=include/asm-generic/unistd.h;h=2292d1af9d705f129ae523ce00a6b7794fb1648c;hb=8df54d622a120058ee8bec38743c9b8f091c8e58

Я не уверен насчет системных вызовов для другой арки, кроме x86. Там могут быть детали.

...