Есть ли где-нибудь я могу получить полный список минимальной версии Linux, необходимой для каждого syscall? Я ищу общий ответ на вопросы формы "Если я использую syscall X, какова минимальная версия Linux, на которой может работать мой код?"
История системных вызовов, добавленных в Linux?
Ответ 1
Эта информация находится на странице руководства syscalls(2)
. Для тех системных вызовов, где не указана версия ядра, системный вызов появился в ядре 1.0 или ранее.
Ответ 2
Linus долго критиковал проверку пользователей для определенных версий ядра, чтобы узнать, доступна ли функция. Рекомендуемый подход - вместо этого проверить тестовую функцию (невыполненные syscalls возвращают ENOSYS
).
Одной из причин этого является то, что номера версий просто не означают столько, сколько они кажутся - ядра дистрибьютора, которые большинство пользователей фактически работают, часто имеют функции, поддерживаемые более новыми версиями ядра. Некоторые из них - настоящие монстры Франкенштейна в этом отношении.
Ответ 3
Это можно найти при использовании сайтов http://linux.die.net/ рядом с нижней частью страниц для вызовов API в разделе "Версия", раздел. Например, inotify был добавлен в Linux 2.6.13.
Для вызовов posix это не применяется, потому что они собраны в соответствии с параметрами Posix, например. read имеет раздел "Соответствие", в котором упоминается POSIX.1-2001.
Ответ 4
Существует список системных вызовов в файле include/asm-generic/unistd.h. Вы можете проверить историю этого файла по адресу:
Я не уверен в syscalls для другой арки, чем x86. Могут быть детали.