0

我正在为设备驱动程序构建一个树外内核模块。总的来说,一切进展顺利,但我对使用 kbuild 和构建系统有一些疑问:

  1. 我发现了这篇很棒的帖子:Is it possible to set CFLAGS to a linux kernel module Makefile? ,它显示了如何修改编译器标志。结果,我现在将我的编译器标志设置为:ccflags-y := -O2 -Wall -Wextra -I $(DRIVER_INC_DIR)$(DRIVER_INC_DIR)我的驱动程序的各种头文件在哪里。请注意,我的驱动程序由几个 .o 文件组成,这些文件合并为一个 .ko。我想显示编译器为我自己的代码生成的警告,而不是 Linux 中的代码(例如 linux/module.h)。我怎样才能做到这一点?我知道在用户空间应用程序中有-isystem选项,但我想知道这将如何应用在这里(如果有的话)。
  2. modules_install编译后使用与仅复制 .ko 文件有什么区别吗?我问的原因是因为我认为手动复制对我来说更容易,因为我还需要支持“make uninstall”目标(并且没有modules_uninstall,只有 a clean,它似乎不会从 .ko 中删除安装位置)。

在此先感谢您的帮助。

4

1 回答 1

2

我已经能够回答#1。基本上,在 kbuild 内部,该LINUXINCLUDE变量-I用于从 Linux 头文件中提取所有源代码。结果,我将这一行添加到我的 Makefile 中:

LINUXINCLUDE := $(subst -I, -isystem, $(LINUXINCLUDE))

这会将所有-I标志替换为-isystem,因此警告将被忽略。

于 2017-12-21T21:57:16.707 回答