C 使用make在linux上编译驱动程序

C 使用make在linux上编译驱动程序,c,compilation,makefile,drivers,C,Compilation,Makefile,Drivers,这个错误消息是什么意思?我正在试着跑。似乎缺少配置。配置是内核源代码的一部分吗 make -C /lib/modules/4.2.0-19-generic/build SUBDIRS=/home/glochild/Downloads/AX88179_178A_LINUX_DRIVER_v1.10.0_SOURCE modules make[1]: Entering directory '/usr/src/linux-headers-4.2.0-19-generic' CC [M] /hom

这个错误消息是什么意思?我正在试着跑。似乎缺少配置。配置是内核源代码的一部分吗

make -C /lib/modules/4.2.0-19-generic/build SUBDIRS=/home/glochild/Downloads/AX88179_178A_LINUX_DRIVER_v1.10.0_SOURCE modules
make[1]: Entering directory '/usr/src/linux-headers-4.2.0-19-generic'
  CC [M]  /home/glochild/Downloads/AX88179_178A_LINUX_DRIVER_v1.10.0_SOURCE/ax88179_178a.o
/home/glochild/Downloads/AX88179_178A_LINUX_DRIVER_v1.10.0_SOURCE/ax88179_178a.c:55:6: error: macro "__TIME__" might prevent reproducible builds [-Werror=date-time]
  " " __TIME__ " " __DATE__ "\n"
      ^
/home/glochild/Downloads/AX88179_178A_LINUX_DRIVER_v1.10.0_SOURCE/ax88179_178a.c:55:19: error: macro "__DATE__" might prevent reproducible builds [-Werror=date-time]
  " " __TIME__ " " __DATE__ "\n"
                   ^
cc1: some warnings being treated as errors
scripts/Makefile.build:264: recipe for target '/home/glochild/Downloads/AX88179_178A_LINUX_DRIVER_v1.10.0_SOURCE/ax88179_178a.o' failed
make[2]: *** [/home/glochild/Downloads/AX88179_178A_LINUX_DRIVER_v1.10.0_SOURCE/ax88179_178a.o] Error 1
Makefile:1398: recipe for target '_module_/home/glochild/Downloads/AX88179_178A_LINUX_DRIVER_v1.10.0_SOURCE' failed
make[1]: *** [_module_/home/glochild/Downloads/AX88179_178A_LINUX_DRIVER_v1.10.0_SOURCE] Error 2
make[1]: Leaving directory '/usr/src/linux-headers-4.2.0-19-generic'
Makefile:30: recipe for target 'default' failed
make: *** [default] Error 2
在Makefile中,将其添加到
CFLAGS
变量中

-Wno日期时间

这将禁用警告,由于Makefile使用
CFLAGS
传递了
-Werror
,因此警告被视为错误,因此代码无法编译。

我理解这是由于警告被添加到了最新版本的GCC中,而GCC最初是使用eg-Wall编译的,但由于这一额外限制,现在不再这样做了

如果您不能使用上面的makefile mods修复它,我已经在我自己的驱动程序构建中修复了它,方法是将源代码中有问题的行括起来:

#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wdate-time"
... code with __DATE_ __TIME__
#pragma GCC diagnostic pop

这将仅对受影响的行关闭“新建”诊断。

修复makefile以删除
-Werror
-Wno date time
,我想是这样的。效果不错。我修改了源代码以删除日期代码。但是应该如何解决这个问题??我的意思是,GCC 4.9中添加了此警告是出于某种原因??该警告告诉您,如果您使用
\uuuuu日期\uuuuuuu
\uuuuu时间\uuuuuuuu
宏,则生成的二进制文件将根据生成它的时间/日期而有所不同。这意味着即使您没有更改任何代码或任何其他内容(也称为“可复制构建”),2个构建也不会产生完全相同的、100%相似的输出文件。您要么关心这一点并同意gcc 4.9,即这是一个合理的警告,并从代码中删除所有
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu和
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu时间
宏,要么不关心这一点,并使用
-Wno日期时间