在Linux内核模块构建期间,前缀被添加到许可证信息中

ars1skjm  于 2023-06-29  发布在  Linux
关注(0)|答案(1)|浏览(117)

我试图从多个源文件构建一个Linux内核模块。我使用以下Makefile:

obj-m := mymodule.o
mymodule-y := mymodule_a.o mymodule_b.o mymodule_c.o

all:
    $(MAKE) -C $(KERNELDIR) M=$(PWD) modules

clean:
    $(MAKE) -C $(KERNELDIR) M=$(PWD) clean

然而,即使构建成功,modinfo的输出也不是预期的那样。具体来说,许可证、作者、参数等。都有一个前缀(在本例中为“mymodule.”):

mymodule.description:  mymodule driver
mymodule.author:   myname
mymodule.license:  GPL

我期望的是:

description:  mymodule driver
author:   myname
license:  GPL

我注意到,在使用内核版本5.19构建模块时,不会出现这种前缀问题。但是,当使用内核版本5.4进行构建时,该问题确实会出现。我尝试了几种方法(不生成中间.o文件,直接添加到obj-m等),但没有一种方法可以解决这个问题。
有谁知道为什么这个前缀被添加到特定的内核版本,以及如何防止这种情况?

w8ntj3qf

w8ntj3qf1#

已通过向编译器添加-fno-pic标志解决此问题。这是通过将EXTRA_CFLAGS+=-fno-pic添加到Makefile来完成的。
位置无关代码(PIC)通常不需要用于内核模块。禁用PIC解决了我面临的modinfo前缀问题。

相关问题