使用大量源文件编译外部内核模块

时间:2011-11-03 12:43:46

标签: compilation linux-kernel

我是Linux内核的新手。

编译内核模块时,我遇到了以下问题:

make[3]: execvp: /bin/sh: Argument list too long

跟踪问题,我发现问题在于链接( ld )模块。 我的模块包含许多文件,而模块源位于60个字符长度的路径下。我看到 ld 使用对象文件的绝对路径。

我不太熟悉我的构建系统,但据我所知,我们添加了具有相对路径的 obj-m * .c文件。

有什么想法吗?

1 个答案:

答案 0 :(得分:4)

很奇怪你的内核模块太大而且由很多文件组成。传统的观点是拥有小内核模块(可能与外部用户空间帮助程序通信)。您确定您的软件架构设计吗?

回到问题,您可以将gcc的所有参数放在my.args这样的文件中,然后只使用gcc调用gcc @my.args,因为gcc处理@具体而言。

您还可以重新编译内核,并适当增加文件#defineARG_MAX的{​​{1}}。我经常将其定义为2兆(字节),即include/linux/limits.h