我是Linux内核的新手。
编译内核模块时,我遇到了以下问题:
make[3]: execvp: /bin/sh: Argument list too long
跟踪问题,我发现问题在于链接( ld )模块。 我的模块包含许多文件,而模块源位于60个字符长度的路径下。我看到 ld 使用对象文件的绝对路径。
我不太熟悉我的构建系统,但据我所知,我们添加了具有相对路径的 obj-m * .c文件。
有什么想法吗?
答案 0 :(得分:4)
很奇怪你的内核模块太大而且由很多文件组成。传统的观点是拥有小内核模块(可能与外部用户空间帮助程序通信)。您确定您的软件架构设计吗?
回到问题,您可以将gcc
的所有参数放在my.args
这样的文件中,然后只使用gcc
调用gcc @my.args
,因为gcc
处理@
具体而言。
您还可以重新编译内核,并适当增加文件#define
中ARG_MAX
的{{1}}。我经常将其定义为2兆(字节),即include/linux/limits.h