Linux kernel 划分内核模块

Linux kernel 划分内核模块,linux-kernel,linux-device-driver,Linux Kernel,Linux Device Driver,我正在从事一个由多个内核模块组成的项目。不同模块之间有一些共享功能,但我不想在每个模块中包含相同的代码。Linux内核是否有一个“共享对象库”,或者公共代码是否放入一个单独的模块中?通常,您会将模块的公共功能放入一个单独的模块中。一个很好的例子是其他SAS(串行连接scsi)设备驱动程序使用的驱动程序/scsi/libsas模块。如果您采用这种方法,请参阅文档/kbuild/modules.txt第6.3节中的内核文档,以了解有关引用其他外部模块符号的建议。通常,您会将模块的通用功能放在单独的模

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

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

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

如果您正在寻找在模块之间共享函数的方法,则应查看
导出符号
宏。一个简单的例子:

文件super.c

void call_me(){
   printk("Hello from super.\n");
}
EXPORT_SYMBOL(call_me);
文件super.h

extern void call_me();
文件base.c

#include "super.h"

void call_super(){
   call_me();
}
这里super.c和base.c是不同的模块

如果这是你要找的,让我知道。我可以给你发一个更复杂的例子,里面有makefile之类的东西。希望能有帮助

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


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

如果您想在模块之间共享函数,请查看
EXPORT\u SYMBOL
宏。一个简单的例子:

文件super.c

void call_me(){
   printk("Hello from super.\n");
}
EXPORT_SYMBOL(call_me);
文件super.h

extern void call_me();
文件base.c

#include "super.h"

void call_super(){
   call_me();
}
这里super.c和base.c是不同的模块

如果这是你要找的,让我知道。我可以给你发一个更复杂的例子,里面有makefile之类的东西。希望能有帮助

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


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

@amrzar 25%是他建议您更好的。StackOverflow之所以好,不是因为它充满了人们要求学习的问题,而是因为很多人花时间为这些问题写出好的答案。如果你得到了一个好的答案,你应该给它打上这样的标记,否则人们会认为回答和帮助你学习是不值得的。当你得到一个好的建议时说“拉你的屁股”之类的话可能不是获得更多帮助的一个非常聪明的方式。@Fredrik我想,我对“接受”这个词有不同的理解,人们总是问别人的意见,应该尊重别人,但尊重别人的意见并不意味着你应该“接受”它!如果我们只是为了“尊重”而接受每个人的意见,那么就不会有宗派暴力、政党和诸如此类的事情发生!对他人工作的尊重表现在文学上,通过写甜蜜的评论来感谢他们,并祝他们成功@弗雷德里克似乎你是对的,它的规则和本论坛的监管类型!我现在就这么做,谢谢你的时间@阿姆扎尔25%是他建议你更好的。StackOverflow之所以好,不是因为它充满了人们要求学习的问题,而是因为很多人花时间为这些问题写出好的答案。如果你得到了一个好的答案,你应该给它打上这样的标记,否则人们会认为回答和帮助你学习是不值得的。当你得到一个好的建议时说“拉你的屁股”之类的话可能不是获得更多帮助的一个非常聪明的方式。@Fredrik我想,我对“接受”这个词有不同的理解,人们总是问别人的意见,应该尊重别人,但尊重别人的意见并不意味着你应该“接受”它!如果我们只是为了“尊重”而接受每个人的意见,那么就不会有宗派暴力、政党和诸如此类的事情发生!对他人工作的尊重表现在文学上,通过写甜蜜的评论来感谢他们,并祝他们成功@弗雷德里克似乎你是对的,它的规则和本论坛的监管类型!我现在就这么做,谢谢你的时间!