【问题标题】:Is it possible to set CFLAGS to a linux kernel module Makefile?是否可以将 CFLAGS 设置为 linux 内核模块 Makefile?
【发布时间】:2013-08-30 23:49:49
【问题描述】:

例如:普通设备模块的 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

我考虑是否可以将 CFLAGS 设置为文件。当我将 default 部分更改为

$(MAKE) -O2 -C /lib/modules/$(shell uname -r)/build M=$(shell pwd) modules

但它没有用。

有什么帮助吗?非常感谢。

【问题讨论】:

  • $$PWD可以替换$(shell pwd)

标签: makefile linux-kernel linux-device-driver


【解决方案1】:

你也可以使用

ccflags-y := -O2

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

【讨论】:

  • 这将覆盖一些内部Makefiles 中的ccflags-y 设置,因此会破坏.h 文件查找。
  • 对我来说,使用EXTRA_CFLAGS 会有所帮助。它在scripts/Makefile.lib 中被引用为“向后兼容性”,它被添加到ccflags-y,因此不会破坏任何东西。
  • ccflags-y += -O2 应该可以工作。它显示在Documentation/kbuild/modules.txt。
  • 这应该是公认的答案吗?
【解决方案2】:

-O2 将是您尝试过的make(或$(MAKE),因为您正在使用它)的一个选项。显然,编译器(可能是gcc)需要这个标志,而不是make。

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

CFLAGS_jc.o := -O2

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

你可以在the official documentation找到更多关于编译模块的信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-24
    • 1970-01-01
    • 1970-01-01
    • 2023-04-08
    相关资源
    最近更新 更多