Я работаю с sysfs, и мне нужно создать файл под sysfs, файл должен быть доступен для чтения и записи всем пользователям, для которых я установил разрешения в '__ATTR'
на 0666
. Но модуль не компилируется, как только я изменяю разрешения на 0660
, он компилируется правильно.Не удается установить права доступа к атрибутам 0666 в sysfs
Сообщение об ошибке, что я получаю с 0666 разрешений выглядит следующим образом
`/home/rishabh/kernel_modules/Task09/task9.c: At top level:
include/linux/bug.h:33:45: error: negative width in bit-field ‘<anonymous>’
#define BUILD_BUG_ON_ZERO(e) (sizeof(struct { int:-!!(e); }))
^
include/linux/kernel.h:859:3: note: in expansion of macro ‘BUILD_BUG_ON_ZERO’
BUILD_BUG_ON_ZERO((perms) & 2) + \
^
include/linux/sysfs.h:102:12: note: in expansion of macro ‘VERIFY_OCTAL_PERMISSIONS’
.mode = VERIFY_OCTAL_PERMISSIONS(_mode) }, \
^
/home/rishabh/kernel_modules/Task09/task9.c:65:2: note: in expansion of macro ‘__ATTR’
__ATTR(id, 0666, id_show, id_store);
^
include/linux/bug.h:33:45: warning: initialization from incompatible pointer type [enabled by default]
#define BUILD_BUG_ON_ZERO(e) (sizeof(struct { int:-!!(e); }))
^
include/linux/kernel.h:859:3: note: in expansion of macro ‘BUILD_BUG_ON_ZERO’
BUILD_BUG_ON_ZERO((perms) & 2) + \
^
include/linux/sysfs.h:102:12: note: in expansion of macro ‘VERIFY_OCTAL_PERMISSIONS’
.mode = VERIFY_OCTAL_PERMISSIONS(_mode) }, \
^
/home/rishabh/kernel_modules/Task09/task9.c:65:2: note: in expansion of macro ‘__ATTR’
__ATTR(id, 0666, id_show, id_store);
^
include/linux/bug.h:33:45: warning: (near initialization for ‘id_attribute.show’) [enabled by default]
#define BUILD_BUG_ON_ZERO(e) (sizeof(struct { int:-!!(e); }))
^
include/linux/kernel.h:859:3: note: in expansion of macro ‘BUILD_BUG_ON_ZERO’
BUILD_BUG_ON_ZERO((perms) & 2) + \
^
include/linux/sysfs.h:102:12: note: in expansion of macro ‘VERIFY_OCTAL_PERMISSIONS’
.mode = VERIFY_OCTAL_PERMISSIONS(_mode) }, \
^
/home/rishabh/kernel_modules/Task09/task9.c:65:2: note: in expansion of macro ‘__ATTR’
__ATTR(id, 0666, id_show, id_store);
^
`
Я также попытался с помощью __ATTR_RW(_name)
макросов, но это дает разрешения на чтение-запись только корень, а все остальные остались с разрешением на чтение.
Нам нужно больше контекста. Кто-то поставил чек, чтобы во время компиляции было обнаружено недопустимое значение, аналогично тому, как 'assert' используется для отображения ошибок во время выполнения. Высказывание чего-то, остановленного в 'assert', говорит нам, что кто-то подумал о том, чтобы поставить чек, но не говорит нам, что такое чек. –
Это касается задачи вызова eudyptula 09. Я редактирую свой вопрос, добавляя фрагмент вывода make – RishabhHardas