位域中的负宽度 '' 运行 'make' 时

位域中的负宽度 '' 运行 'make' 时

感谢您阅读这个问题。

我试图编译一个与 一起使用的内核模块sysfs,在执行时make我最终遇到了这个错误。有人可以帮我理解这个错误的含义吗?

/usr/src/linux-headers-4.19.0-9-common/include/linux/build_bug.h:29:45: error: negative width in bit-field ‘<anonymous>’
 #define BUILD_BUG_ON_ZERO(e) (sizeof(struct { int:(-!!(e)); }))

其次是

/usr/src/linux-headers-4.19.0-9-common/include/linux/kernel.h:1051:3: note: in expansion of macro ‘BUILD_BUG_ON_ZERO’
   BUILD_BUG_ON_ZERO((perms) & 2) +     \
   ^~~~~~~~~~~~~~~~~
/usr/src/linux-headers-4.19.0-9-common/include/linux/sysfs.h:103:12: note: in expansion of macro ‘VERIFY_OCTAL_PERMISSIONS’
    .mode = VERIFY_OCTAL_PERMISSIONS(_mode) },  \
            ^~~~~~~~~~~~~~~~~~~~~~~~
/home/bkkarthik/Workspace/tasks/task09/helloworld.c:76:45: note: in expansion of macro ‘__ATTR’
 static struct kobj_attribute id_attribute = __ATTR(id, 0666, id_show, id_store);

我对 Linux 内核编程比较陌生,我不知道你需要什么信息来评估这种情况。如果需要,请随时询问更多信息。提前致谢 :)

答案1

这个特定的错误并不是特别重要,它是一个“技巧”,用于在给定值被确定为零时破坏构建。要了解构建失败的原因,您需要查看下一条错误消息,其中应包括

注意:在宏“BUILD_BUG_ON_ZERO”的扩展中

后跟导致错误的表达式。

在您的情况下,构建失败,因为您指定了全局可写模式 0666;你最多应该设置0664

相关内容