大宝剑*_*大宝剑 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节提供的链接中间接记录