内核版本:3.14.33
在我添加任何系统调用之前,x86(32位)编号最高的是352.然后我通过简单地向arch / x86 / syscall / syscall_32.tbl添加一行然后使用SYSCALL_DEFINEx添加了353-357适用于kernel /*.
问题在于编号为355的系统调用。它在启动时重复运行,当它没有直接返回-ENOSYS时,它会在启动时使用systemd中的失败断言使内核崩溃(sd_id128_randomize()返回< 0) 。当355直接返回-ENOSYS时,系统启动正常。
我需要采取另一个步骤来“正式”安装系统调用吗?像增加一些最大数量?是355保留用于我完全搞砸的东西吗?
我设法通过简单地跳过355来解决,所以我非常确定它不是我的系统调用实现中的错误
答案 0 :(得分:2)
似乎更新版本的内核包含额外的系统调用,其中355为getrandom()
。 systemd戳这个系统调用号以查看正在运行的内核是否有内置随机函数,如果返回不是ENOSYS,它认为系统调用是getrandom(),可能会出错。
参考文献: http://lxr.free-electrons.com/source/arch/x86/syscalls/syscall_32.tbl http://lwn.net/Articles/606141/