Linux 中添加系统调用的历史?
我可以在哪里获得每个系统调用所需的最低 Linux 版本的完整列表吗?我正在寻找“如果我使用系统调用 X,我的代码可以运行的最低 Linux 版本是什么?”形式的问题的一般答案。
Is there anywhere I can get a complete list of the minimum version of Linux needed for each syscall? I'm looking for a general answer to questions of the form "If I use syscall X, what is the minimum version of Linux on which my code can run?"
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
此信息可以在
syscalls(2)
手册页。对于那些没有指示内核版本的系统调用,该系统调用出现在内核 1.0 或更早版本中。This information can be found in the
syscalls(2)
manual page. For those system calls where no kernel version is indicated, the system call appeared in kernel 1.0 or earlier.Linus 长期以来一直批评用户空间检查特定内核版本以了解某个功能是否可用 - 推荐的方法是测试您想要的功能(未实现的系统调用确实返回 ENOSYS)。
原因之一是版本号并不像看上去那么重要——大多数用户实际运行的分发内核通常具有从较新内核版本向后移植的功能。从这方面来说,其中一些是真正的弗兰肯斯坦怪物。
Linus has long criticised userspace checking for particular kernel versions to know if a feature is available - the recommended approach is instead to test for the feature you want (unimplemented syscalls do return
ENOSYS
).One reason for this is that version numbers simply don't mean as much as they seem to - distributor kernels, which most users are actually running, often have features backported from newer kernel versions. Some of them are real Frankenstein's monsters in this respect.
您可以在使用诸如 http://linux.die.net/ 之类的网站时找到它。 API 调用的页面,位于“版本”部分。例如 inotify 是在 Linux 2.6.13 中添加的。
对于 posix 调用,这不适用,因为它们是根据 Posix 规范收集的,例如 read 有一个提及 POSIX.1-2001 的“符合”部分。
You can find this when using sites such as http://linux.die.net/ near the bottoms of the pages for the API calls, in the 'Version' section. For example inotify was added at Linux 2.6.13.
For posix calls this wont apply because they are gathered under Posix specifications, e.g. read has a 'Conforming' section mentioning POSIX.1-2001.
文件 include/asm-generic/unistd.h 中有一个系统调用列表。您可以在以下位置检查该文件的历史记录:
http://git.kernel.org/?p=linux/kernel/git/torvalds/linux.git;a=history;f=include/asm-gen埃里克/unistd.h;h=2292d1af9d705f129ae523ce00a6b7794fb1648c;hb=8df54d622a120058ee8bec38743c9b8f091c8e58
我不确定除 x86 之外的其他架构的系统调用。可能有细节。
There is a list of syscalls at the file include/asm-generic/unistd.h. You can check the history of that file at:
http://git.kernel.org/?p=linux/kernel/git/torvalds/linux.git;a=history;f=include/asm-generic/unistd.h;h=2292d1af9d705f129ae523ce00a6b7794fb1648c;hb=8df54d622a120058ee8bec38743c9b8f091c8e58
I'm not sure about syscalls for other arch than x86. There may be details.