我可以使用<;标准经济学h>;从C11的Linux驱动程序,还是我必须使用Linux的内存屏障功能?

我可以使用<;标准经济学h>;从C11的Linux驱动程序,还是我必须使用Linux的内存屏障功能?,c,gcc,linux-kernel,kernel,driver,C,Gcc,Linux Kernel,Kernel,Driver,我可以在Linux驱动程序(内核空间)中使用和从C11开始,还是必须使用内存屏障的Linux函数: 使用: Linux内核2.6.18或更高版本 GCC 4.7.2或更高版本 如果您正在编写内核代码,则应使用C语言编写,并使用当前内核所需的C语言版本编写(附带gcc)。如果您想让它被接受到主线中(或者像它将被接受一样编写它),您应该使用Linux函数。您还将发现它们在没有意外的情况下工作,并且您将获得更好的调试帮助 概述:使用linux功能。编辑: 这似乎不起作用。 有没有都没有区别。

我可以在Linux驱动程序(内核空间)中使用和从C11开始,还是必须使用内存屏障的Linux函数:

使用:

  • Linux内核2.6.18或更高版本
  • GCC 4.7.2或更高版本

如果您正在编写内核代码,则应使用C语言编写,并使用当前内核所需的C语言版本编写(附带gcc)。如果您想让它被接受到主线中(或者像它将被接受一样编写它),您应该使用Linux函数。您还将发现它们在没有意外的情况下工作,并且您将获得更好的调试帮助

概述:使用linux功能。

编辑: 这似乎不起作用。 有没有都没有区别。 驱动程序可以编译,但lib将退回到纯整数或NOP


它似乎起作用了

atomic_store()
atomic_load()
提供内核模块驱动程序和用户程序之间所需的线程同步。 不确定的是,如果使用回退方法,我的意思是,编译器使用标准整数和常规汇编指令

请随便看一看 在功能方面:
intelfreq.c/Core\u Cycle()

corefred.c/Core\u Cycle()

您不想链接到cppreference,C11还很年轻,人们不知道它有
stdatomic.h
。仅供参考,它是在7.17中指定的。@cnicutar在我的问题中:include、function和enum是可单击的,或者7.17是什么意思?谢谢。你的意思是说,因为驱动程序不能跨不同的操作系统跨平台运行,所以使用跨平台原子函数是没有意义的,最好使用特定于平台的函数?理论上,驱动程序可以共享跨平台元素,然而,它们通常会抽象操作系统/内核原语,像互斥和原子访问一样;然而,这样编写的驱动程序不太可能被内核接受。我想说的是,您应该编写驱动程序,就好像它应该被主线所接受一样(最不奇怪的是,社区提供了更多的调试支持),这意味着使用内核自己的东西来完成类似的事情。