是否可以将CFLAGS设置为Linux内核模块Makefile?

大宝剑*_*大宝剑 22 makefile linux-device-driver linux-kernel

例如:通用设备模块的Makefile

obj-m:=jc.o

default:
    $(MAKE) -C /lib/modules/$(shell uname -r)/build M=$(shell pwd) modules
clean:
    $(MAKE) -C /lib/modules/$(shell uname -r)/build M=$(shell pwd) modules clean
Run Code Online (Sandbox Code Playgroud)

我考虑是否可以将CFLAGS设置为该文件.当我将默认部分更改为

$(MAKE) -O2 -C /lib/modules/$(shell uname -r)/build M=$(shell pwd) modules
Run Code Online (Sandbox Code Playgroud)

但它没有用.

有帮助吗?非常感谢.

eep*_*epp 26

-O2在您尝试的内容中make(或者$(MAKE),当您使用它时)是一个选项.显然,编译器(可能gcc)需要这个标志,而不是make.

Kbuild了解一个名为make变量的命令,CFLAGS_modulename.o用于在编译此单元时添加特定的C标志.在您的情况下,您的模块对象将是jc.o,因此您可以指定:

CFLAGS_jc.o := -O2
Run Code Online (Sandbox Code Playgroud)

它应该工作.添加V=1到您的$(MAKE)行以获得详细输出,您应该看到-O2何时jc.c编译.

您可以在官方文档中找到有关编译模块的更多信息.


Ben*_*ber 16

你也可以使用

ccflags-y := -O2
Run Code Online (Sandbox Code Playgroud)

这将应用于使用Makefile为您的模块编译的所有源文件.这在eepp在4.2节提供的链接中间接记录

  • `ccflags-y += -O2` 应该可以工作。它显示在“Documentation/kbuild/modules.txt”中。 (2认同)