C - 'getnstimeofday' 是包含 <linux/time.h> 时系统调用中的隐式声明



Anwser

解决!!感谢@IanAbbott

标题应为:

#include <linux/ktime.h>
#include <linux/timekeeping.h>

而不是<linux/time.h>.

更多详细信息请参阅讨论。


原始问题

我正在编写一个系统调用名称sys_my_time.c,它将使用getnstimeofday()。我已经导入了<linux/time.h>.代码是这样的:

#include <linux/kernel.h>
#include <linux/linkage.h>
#include <linux/time.h>
asmlinkage int sys_my_time() {
struct timespec t;
getnstimeofday(&t);
// ...
return 0;
}

但在编译时,错误显示:

CC      kernel/sys_my_time.o
kernel/sys_my_time.c: In function ‘sys_my_time’:
kernel/sys_my_time.c:8:3: error: implicit declaration of function ‘getnstimeofday’ [-Werror=implicit-function-declaration]
getnstimeofday(&t);
^
cc1: some warnings being treated as errors
scripts/Makefile.build:320: recipe for target 'kernel/sys_my_time.o' failed
make[1]: *** [kernel/sys_my_time.o] Error 1
Makefile:1029: recipe for target 'kernel' failed
make: *** [kernel] Error 2

我不知道为什么会发生错误。

附言在 Ubuntu 16.04 中编译内核 V4.14.25

从内核版本 3.17.x 开始,#include <linux/time.h>不再声明getnstimeofday。解决方案是添加:

#include <linux/ktime.h>

根据内核版本,#include <linux/ktime.h>将从<linux/time.h>(3.17.x 之前(或<linux/timekeeping.h>(3.17.x 及更高版本(提取getnstimeofday声明。无需直接包含<linux/timekeeping.h>

请注意,<linux/ktime.h>从 Linux 内核 2.6.16 开始就可用了。

如果其中没有其他需要使用的内容,您可以删除#include <linux/time.h>。通过删除该行并为任何内核 3.17.x 或更高版本构建代码来测试这一点。

相关内容

  • 没有找到相关文章

最新更新