2014-03-01 116 views
0

我正在编写设备驱动程序。我有一个问题要问:Linux设备驱动程序中的内联函数

在.c文件中声明内联函数是否正确?

我说的是针对linux内核的设备驱动程序。我有一个函数,它在函数体中很短,并且从一个模块导出到另一个模块。你是否认为,我可以声明它是一个内联的.c文件,或者我需要将这个函数声明和EXPORT_SYMBOL行一起移动到.h文件,因为它是内联的?什么是标准的Linux内核练习?

For ex -> something like this? 
inline void hello_world() 
{............ 
return; 
} 
EXPORT_SYMBOL(hello_world); 

谢谢!

+0

这比编码约定更重要。询问http://kernelnewbies.org。并且您的代码将导出*非内联*函数。 –

+0

在设备驱动程序编程的情况下,如果您有多个模块可以调用或使用多个函数/函数,那么您只需创建一个“.c”文件并使用EXPORT_SYMBOL_GPL将所有函数导出到内核。然后这些导出的函数被识别为“内核符号”。在使用或调用这些导出的函数时,您不需要包含任何文件,也不需要定义其原型。只需导出它,然后从任何其他模块调用它。但请确保您要出口的“许可证”。 –

回答

2

只要您不声明函数为static,即使已声明为inline,非内联版本也会包含在编译代码中,正是为了使其他编译单元的代码能够调用该函数。

显然,除非启用了整体程序优化/链接时优化,否则从编译单元外部调用时,不会有任何跨函数调用的优化。

+1

如果静态内联函数出现在内联调用之外,它也会包含在编译代码中,例如,作为函数指针。 –

+0

@BasileStarynkevitch是的,我想说的是,如果你想让编译器省略内联函数(或从不调用的函数),你实际上必须为它工作。但是,如果函数被定义为'static',即使它没有被优化,你也不应该从编译单元之外调用它。 – EOF

相关问题