我是Linux内核的新手。用很多源文件编译外部内核模块
在编译内核模块,我encouter以下问题:
make[3]: execvp: /bin/sh: Argument list too long
下来跟踪的问题,我看到的问题是连接(LD)模块时。 我的模块由很多文件组成,而模块源位于60个字符长度的路径下。我看到ld使用绝对路径来指定目标文件。
我对我的构建系统不太熟悉,但据我看到我们添加到obj-m * .c文件与相对路径。
任何想法?
我是Linux内核的新手。用很多源文件编译外部内核模块
在编译内核模块,我encouter以下问题:
make[3]: execvp: /bin/sh: Argument list too long
下来跟踪的问题,我看到的问题是连接(LD)模块时。 我的模块由很多文件组成,而模块源位于60个字符长度的路径下。我看到ld使用绝对路径来指定目标文件。
我对我的构建系统不太熟悉,但据我看到我们添加到obj-m * .c文件与相对路径。
任何想法?
很奇怪你的内核模块非常大,并且由很多文件组成。传统的看法是有小的内核模块(可能与外部用户空间帮助程序通信)。你确定你的软件架构设计吗?
回到问题,你可以把所有的参数gcc
在一个文件中像my.args
,只是调用gcc
与gcc @my.args
因为gcc
手柄@
明确。
您也可以重新编译您的内核,并适当地增加文件include/linux/limits.h
中ARG_MAX
的#define
。我经常将它定义为2兆(字节),即(2<<20)
不确定这是关于什么,但如果问题是路径太长,一种解决方法是创建一个符号链接并使用它。 – Pithikos
是否可以更改构建较小的静态库,然后将它们链接在一起以形成模块? –
@Joachim Pileborg有可能与kbuild? – dimba