Управление и манипуляции с объектами kobject
Управление и манипуляции с объектами kobject
Теперь, когда у нас уже есть представление о внутреннем устройстве объектов kobject и связанных с ними структурах данных, самое время рассмотреть экспортируемые интерфейсы, которые дают возможность управлять объектами kobject и выполнять с ними другие манипуляции. В основном, разработчикам драйверов непосредственно не приходится иметь дело с объектами kobject. Структуры kobject встраиваются в некоторые специальные структуры данных (как это было в примере структуры устройства посимвольного ввода-вывода) и управляются "за кадром" с помощью соответствующей подсистемы драйверов. Тем не менее, объекты kobject не всегда могут оставаться невидимыми, иногда с ними приходится иметь дело, как при разработке кода драйверов, так и при разработке кода управления подсистемами ядра.
Первый шаг при работе с объектами kobject — это их декларация и инициализация. Инициализируются объекты kobject с помощью функции kobject_init(), которая определена в файле <linux/kobject.h> следующим образом.
void kobject_init(struct kobject *kobj);
Единственным параметром этой функции является объект kobject, который необходимо проинициализировать. Перед вызовом этой функции область памяти, в которой хранится объект, должна быть заполнена нулевыми значениями. Обычно это делается при инициализации большой структуры данных, в которую встраивается объект kobject. В других случаях просто необходимо вызвать функцию memset().
memset(kobj, 0, sizeof(*kobj));
После заполнения нулями безопасным будет инициализация полей parent и kset, как показано в следующем примере.
kobj = kmalloc(sizeof(*kobj), GFP_KERNEL);
if (!kobj)
return -ENOMEM;
memset(kobj, 0, sizeof(*kobj));
kobj->kset = kset;
kobj->parent = parent_kobj;
kobject_init(kobj);
После инициализации необходимо установить имя объекта с помощью функции kobject_set_name(), которая имеет следующий прототип.
int kobject_set_name(struct kobject* kobj,
const char* fmt, ...);
Эта функция принимает переменное количество параметров, по аналогии с функциями printf() и printk(). Как уже было сказано, на имя объекта указывает поле k_name структуры kobject. Если это имя достаточно короткое, то оно хранится в статически выделенном массиве name, поэтому есть смысл без необходимости не указывать длинные имена.
После того как для объекта выделена память и объекту присвоено имя, нужно установить значение его поля kset, а также опционально поле ktype. Последнее необходимо делать только в том случае, если множество kset не предоставляет типа ktype для данного объекта, в противном случае значение поля ktype, которое указано в структуре kset, имеет преимущество. Если интересно, почему объекты kobject имеют свое поле ktype, то добро пожаловать в клуб!
Более 800 000 книг и аудиокниг! 📚
Получи 2 месяца Литрес Подписки в подарок и наслаждайся неограниченным чтением
ПОЛУЧИТЬ ПОДАРОКЧитайте также
Глава 17 Объекты kobject и файловая система sysfs
Глава 17 Объекты kobject и файловая система sysfs Унифицированная модель представления устройств — это существенно новая особенность, которая появилась в ядрах серии 2.6. Модель устройств — это единый механизм для представления устройств и описания их топологии в системе.
Объекты kobject
Объекты kobject Сердцем модели представления устройств являются объекты kobject, которые представляются с помощью структуры struct kobject, определенной в файле <linux/kobject.h>. Тип kobject аналогичен классу Object таких объектно-ориентированных языков программирования, как С# и Java. Этот тип
Кратко об объектах kobject и файловой системе sysfs
Кратко об объектах kobject и файловой системе sysfs В этой главе рассматривается модель представления устройств, файловая система sysfs, объекты kobject и уровень событий ядра. Описание материала главы было бы невозможно без рассмотрения родственных вещей: были также описаны
11.5. Манипуляции файловыми дескрипторами
11.5. Манипуляции файловыми дескрипторами Почти все связанные с файлами системные вызовы, о которых мы говорили, за исключением lseek(), манипулируют inode файлов, что позволяет разделять их результаты между процессами, в которых этот файл открыт. Есть несколько системных
Манипуляции с контентом
Манипуляции с контентом Метки: внимание, продвижение, web 2.0Создать такой большой проект не каждому под силу. Зато в любой блог можно вставить маленькие кнопки, чтобы записи из него быстрее расползались по интернету.Читатель, которому понравился ваш текст или фото из блога,
Глава 11 Работа с объектами
Глава 11 Работа с объектами Теперь, когда мы научились создавать объекты Adobe InDesign, поговорим о том, что с ними делать. Этот разговор вынесен в отдельную главу по очень простой причине: все операции по перемещению, трансформации, копированию выполняются, по сути, одинаково
Работа с MBV-объектами
Работа с MBV-объектами Наши первые приложения удаленного взаимодействия позволяли доступ клиентов к одному WKO-типу. Напомним, что WKO-типы (по определению) являются MBR-типами, поэтому доступ клиента к ним осуществляется через агента-посредника. В противоположность этому,
Работа с объектами соединения
Работа с объектами соединения Первым шагом в работе с поставщиком данных является создание соединения с источником данных, для чего мы используем объект соединения (который, как вы помните, получается из Disconnection). Типы соединения .NET получают на вход форматированную
ПРИЛОЖЕНИЕ Е. МАНИПУЛЯЦИИ РАЗРЯДАМИ: ОПЕРАЦИИ И ПОЛЯ
ПРИЛОЖЕНИЕ Е. МАНИПУЛЯЦИИ РАЗРЯДАМИ: ОПЕРАЦИИ И ПОЛЯ Для некоторых программ необходима (илн по крайней мере полезна) возможность манипулировать отдельными разрядами в байте или слове. Например, часто варианты режимов устройств ввода-вывода устанавливаются байтом, в
Операции с объектами
Операции с объектами Взглянем еще раз на нашу будущую визитку. Вы увидите, что каждый ее отдельный элемент заключен в пунктирную рамочку. А если вы щелкнете по нему, то на линиях рамки проявятся кружочки – по углам и в центре каждой линии. Эти рамки нужны лишь для того,
Что происходит с объектами
Что происходит с объектами ОО-программа создает объекты. Предыдущая лекция показала, как полезно полагаться на динамическое создание для получения гибких объектных структур, подстраивающихся автоматически к нуждам
Работа с утилизированными объектами
Работа с утилизированными объектами Для реализации fresh и recycle, можно среди других возможных вариантов представить available как стек: fresh будет удалять элемент из стека, а recycle будет помещать элемент в стек. Создадим класс STACK_OF_LINKABLES для этого случая и добавим следующие
6.3.6. Управляем объектами
6.3.6. Управляем объектами Для выполнения заданий нам понадобится материал разд. 5.3.3.Вспомним, какие действия будут происходить на слайде.? Звук начинает проигрываться с самого начала С самого же начала появляется текст с фоном.? Затем при чтении слова «Ивашка» появляется