2011-11-03 92 views
0

我是Linux内核的新手。用很多源文件编译外部内核模块

在编译内核模块,我encouter以下问题:

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

下来跟踪的问题,我看到的问题是连接(LD)模块时。 我的模块由很多文件组成,而模块源位于60个字符长度的路径下。我看到ld使用绝对路径来指定目标文件。

我对我的构建系统不太熟悉,但据我看到我们添加到obj-m * .c文件与相对路径。

任何想法?

+0

不确定这是关于什么,但如果问题是路径太长,一种解决方法是创建一个符号链接并使用它。 – Pithikos

+0

是否可以更改构建较小的静态库,然后将它们链接在一起以形成模块? –

+0

@Joachim Pileborg有可能与kbuild? – dimba

回答

4

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

回到问题,你可以把所有的参数gcc在一个文件中像my.args,只是调用gccgcc @my.args因为gcc手柄@明确。

您也可以重新编译您的内核,并适当地增加文件include/linux/limits.hARG_MAX#define。我经常将它定义为2兆(字节),即(2<<20)

+0

由kbuild文件支持的gcc @ my.args? – dimba

+0

你有链接到语法吗? – dimba

+0

它是gcc本身的一个特性,不是构建系统的特性。 –