linux设备驱动程序-对内核模块进行分区



我正在处理一个由多个内核模块组成的项目。不同的模块之间有一些共享的功能,但我不想在每个模块中包含相同的代码。Linux内核是否有一个"共享对象库",或者公共代码是否进入一个单独的模块?

通常,您会将模块的公共功能放在一个单独的模块中。一个很好的例子是其他SAS(串行连接SCSI)设备驱动程序使用的drivers/scsi/libsas模块。如果您采用这种方法,请参阅Documentation/kbuild/modules.txt第6.3节中的内核文档,以获取有关引用其他外部模块的符号的建议。

如果您正在寻找在模块之间共享函数的方法,您应该看看EXPORT_SYMBOL宏。一个简单的例子:

文件super.c

void call_me(){
   printk("Hello from super.n");
}
EXPORT_SYMBOL(call_me);

文件super.h

extern void call_me();

文件库.c

#include "super.h"
void call_super(){
   call_me();
}

这里super.c和base.c是不同的模块。

如果这是你想要的,请告诉我。我可以给你发一个更复杂的例子,里面有makefile之类的东西。希望能有所帮助。

注意:我在很多发行版中都用过这个。。。然而,每次我这样做时,我都需要将文件Modules.symvers复制到其他每个模块目录中。

假设您有一个模块a和一个模块B,模块B使用a中的函数。编译a后,将创建一个名为Modules.symvers的文件。在编译之前,我需要将该文件复制到B的文件夹中。复制Modules.symvers后,请不要在B的文件夹下发出make clean,否则它会被删除。

相关内容

  • 没有找到相关文章

最新更新