void kobject_del(struct kobject *kobj);
Функция kobject_unregister()сочетает в себе выполнение функций kobject_del()и kobject_put().
void kobject_unregister(struct kobject* kobj);
Все эти четыре функции определены в файле lib/kobject.cи объявлены в файле .
Добавление файлов на файловой системе sysfs
Объекты kobjectотображаются на каталоги, и такое отображение выполняется естественным образом. А как насчет создания файлов? Файловая система sysfs — это не что иное, как дерево каталогов без файлов.
Атрибуты, используемые по умолчанию
Набор файлов, которые создаются в каталоге по умолчанию, определяется с помощью поля ktypeобъектов kobjectи множеств kset. Следовательно, все объекты kobjectодного типа имеют один и тот же набор файлов в каталогах, которые этим объектам соответствуют. Структура kobject_typeсодержит поле default_attrs, которое представляет собой массив структур attribute. Атрибуты отображают данные ядра на файлы в файловой системе sysfs.
Структура attributesопределена в файле .
/* структура attribute - атрибуты позволяют отобразить данные ядра
на файлы файловой системы sysfs */
struct attribute {
char *name; /* имя атрибута */
struct module *owner; /* модуль, если есть, которому
принадлежат данные */
mode_t mode; /* права доступа к файлу */
};
Поле nameсодержит имя атрибута. Такое же имя будет иметь и соответствующий файл на файловой системе sysfs. Поле owner — это указатель на структуру module, которая представляет загружаемый модуль, содержащий соответствующие данные. Если такого модуля не существует, то значение поля равно NULL. Поле modeимеет тип mode_tи указывает права доступа к файлу на файловой системе sysfs. Если атрибут предназначен для чтения всеми, то флаг прав доступа должен быть установлен в значение S_IRUGO, если атрибут имеет право на чтение только для владельца, то права доступа устанавливаются в значение S_IRUSR. Атрибуты с правом на запись, скорее всего, будут иметь права доступа S_IRUGO | S_IWUSR. Все файлы и каталоги на файловой системе sysfs принадлежат пользователю с идентификаторами пользователя и группы равными нулю.
Структура attributeиспользуется для представления атрибутов, а структура sysfs_opsописывает, как эти атрибуты использовать. Поле sysfs_ops— это указатель на одноименную структуру, которая определена в файле следующим образом.
struct sysfs_ops {
/* метод вызывается при чтении файла на файловой системе sysfs */
ssize_t (*show)(struct kobject *kobj,
struct attribute *attr, char *buffer);
/* метод вызывается при записи файла на файловой системе sysfs */
ssize_t (*store)(struct kobject *kobj,
struct attribute *attr, const char *buffer, size_t size);
};
Метод show()вызывается при чтении файла. Он должен выполнить копирование значения атрибута, который передается в качестве параметра attr, в буфер, на который указывает параметр buffer. Размер буфера равен PAGE_SIZEбайт. Для аппаратной платформы значение PAGE_SIZEравно 4096 байтов. Функция должна возвратить количество байтов данных, которые записаны в буфер в случае успешного завершения, и отрицательный код ошибки, если такая ошибка возникает.
Метод store()вызывается при записи. Он должен скопировать sizeбайт данных из буфера bufferв атрибут attr. Размер буфера всегда равен PAGE_SIZEили меньше. Функция должна возвратить количество байтов данных, которые прочитаны из буфера при успешном выполнении, и отрицательный код ошибки в случае неудачного завершения.
Так как этот набор функций должен выполнять операции ввода-вывода для всех атрибутов, то необходимо выполнить некоторые дополнительные действия, чтобы вызвать обработчик, специфичный для каждого атрибута.
Создание нового атрибута
Обычно атрибутов, которые используются по умолчанию и предоставляются типом ktype, связанным с объектом kobject, оказывается достаточно. Действительно, все объекты kobjectодного типа должны быть чём-то похожи друг на друга или даже быть идентичными по своей природе. Например, для всех разделов жестких дисков один и тот же набор атрибутов должен подходить для всех объектов kobject. Это не просто упрощает жизнь, но и позволяет упорядочить код и получить одинаковый способ доступа ко всем каталогам файловой системы sysfs, связанным с родственными объектами.
Читать дальше