Метод show()
attr
, в буфер, на который указывает параметр buffer
. Размер буфера равен PAGE_SIZE
байт. Для аппаратной платформы значение PAGE_SIZE
равно 4096 байтов. Функция должна возвратить количество байтов данных, которые записаны в буфер в случае успешного завершения, и отрицательный код ошибки, если такая ошибка возникает.Метод store()
size
байт данных из буфера buffer
в атрибут attr
. Размер буфера всегда равен PAGE_SIZE
или меньше. Функция должна возвратить количество байтов данных, которые прочитаны из буфера при успешном выполнении, и отрицательный код ошибки в случае неудачного завершения.Так как этот набор функций должен выполнять операции ввода-вывода для всех атрибутов, то необходимо выполнить некоторые дополнительные действия, чтобы вызвать обработчик, специфичный для каждого атрибута.
Обычно атрибутов, которые используются по умолчанию и предоставляются типом ktype
kobject
, оказывается достаточно. Действительно, все объекты kobject
одного типа должны быть чём-то похожи друг на друга или даже быть идентичными по своей природе. Например, для всех разделов жестких дисков один и тот же набор атрибутов должен подходить для всех объектов kobject
. Это не просто упрощает жизнь, но и позволяет упорядочить код и получить одинаковый способ доступа ко всем каталогам файловой системы sysfs, связанным с родственными объектами.Тем не менее иногда требуется, чтобы определенный экземпляр объекта kobject
sysfs_create_file()
для добавления атрибута к существующему объекту.int sysfs_create_file(struct kobject *kobj, const struct attribute *attr);
Эта функция позволяет привязать структуру attribute, на которую указывает параметр attr
kobject
, на который указывает параметр kobj
. Перед тем как вызвать эту функцию, необходимо установить значение атрибута (заполнить поля структуры). Эта функция возвращает значение нуль в случае успеха и отрицательное значение в случае ошибки.Обратите внимание, что для обработки указанного атрибута используется структура sysfs_ops
ktype
объекта. Иными словами, существующие функции show()
и store()
, которые используются для объекта по умолчанию, должны иметь возможность обработать вновь созданный атрибут.Кроме того, существует возможность создавать символьные ссылки. Создать символьную ссылку на файловой системе sysfs можно с помощью вызова следующей функции.
int sysfs_create_link(struct kobject *kobj,
struct kobject *target, char *name);
Эта функция создает символьную ссылку с именем name
kobj
, на каталог, соответствующий параметру target
. Эта функция возвращает нулевое значение в случае успеха и отрицательный код ошибки в противном случае.Удаляется атрибут с помощью вызова функции sysfs_remove_file()
void sysfs_remove_file(struct kobject *kobj,
const struct attribute *attr);
После возврата из этой функции указанный атрибут больше не отображается в каталоге объекта.
Символьная ссылка, созданная с помощью функции sysfs_create_link()
sysfs_remove_link()
.void sysfs_remove_link(struct kobject *kobj, char *name);
После возврата из функции символьная ссылка с именем name удаляется из каталога, на который отображается объект kobj
Все эти четыре функции объявлены в файле
sysfs_create_file()
и sysfs_remove_file()
определены в файле fs/sysfs/file.c
, а функции sysfs_create_link()
и sysfs_remove_link()
— в файле fs/sysfs/symlink.c
.