Compilation 使用大量源文件编译外部内核模块
我是Linux内核的新手 编译内核模块时,我遇到以下问题:Compilation 使用大量源文件编译外部内核模块,compilation,linux-kernel,Compilation,Linux Kernel,我是Linux内核的新手 编译内核模块时,我遇到以下问题: make[3]: execvp: /bin/sh: Argument list too long 追踪问题,我发现问题在于链接(ld)模块时。 我的模块由许多文件组成,而模块源位于长度为60个字符的路径下。我看到ld使用对象文件的绝对路径 我不太熟悉我的构建系统,但据我所知,我们使用相对路径添加到了obj-m*.c文件 有什么想法吗?很奇怪,你的内核模块这么大,由这么多文件组成。传统智慧是使用小型内核模块(可能与外部用户空间助手程序通
make[3]: execvp: /bin/sh: Argument list too long
追踪问题,我发现问题在于链接(ld)模块时。
我的模块由许多文件组成,而模块源位于长度为60个字符的路径下。我看到ld使用对象文件的绝对路径
我不太熟悉我的构建系统,但据我所知,我们使用相对路径添加到了obj-m*.c文件
有什么想法吗?很奇怪,你的内核模块这么大,由这么多文件组成。传统智慧是使用小型内核模块(可能与外部用户空间助手程序通信)。你确定你的软件架构设计吗 回到问题,您可以将
gcc
的所有参数放在一个类似my.args
的文件中,只需使用gcc@my.args
调用gcc
,因为gcc
专门处理@
您还可以重新编译内核,并适当增加文件
include/linux/limits.h
中ARG\u MAX
的\define
。我经常将其定义为2兆字节,即(2很奇怪,您的内核模块如此之大,由如此多的文件组成。传统的做法是使用小型内核模块(可能与外部用户空间帮助程序通信)。您确定您的软件体系结构设计吗
回到问题,您可以将gcc
的所有参数放在一个类似my.args
的文件中,只需使用gcc@my.args
调用gcc
,因为gcc
专门处理@
您还可以重新编译内核,并适当地增加文件include/linux/limits.h中ARG_MAX
的#define
。我通常将其定义为2兆字节(即(2不确定这是怎么回事,但如果问题是路径太长,一个解决方案是制作一个符号链接并使用它。是否可以将构建更改为更小的静态库,然后将它们链接在一起形成模块?@Joachim Pileborg是否可以使用kbuild?@Pithikos符号链接也没有帮助-我看到ld仍然是uses绝对路径。不确定这是关于什么的,但如果问题是路径太长,一个解决方案是制作一个符号链接并使用它。是否可以将构建更改为更小的静态库,然后将它们链接在一起形成模块?@Joachim Pileborg是否可以使用kbuild?@Pithikos符号链接也没有帮助-我看到ld仍然使用kbuild文件支持的绝对路径.gcc@my.args?这是gcc
本身的一个功能,而不是构建系统的一个功能。这是一个不错的功能,但我需要一个kbuild的解决方案。我担心增加ARG_MAX不是一个选项。kbuild文件支持的gcc@my.args?这是gcc
本身的一个功能,而不是构建系统的一个功能。很好功能,但我需要一个用于kbuild的解决方案。恐怕不能增加ARG_MAX。