Об’єкти kobjec t

Серцем моделі представлення пристроїв є обєкти kobject, які представляються за допомогою структури struc t kobject, визначеної у файлі

Тип kobjec t аналогічний класу Objec t таких обєктно-орієнтованих мов програмування, як С # і Java Цей тип визначає загальну функціональність, таку як лічильник посилань, імя, покажчик на батьківський обєкт, що дозволяє створювати обєктну ієрархію

Структура, за допомогою якої реалізовані обєкти kobject, має наступний вигляд

struct kobject {

char              *k_name

char              name[KOBJ_NAME_LEN]

struct kref       kref struct list_head  entry struct kobject    *parent struct kset       *kset struct kobj_type  *ktype

struct dentry     *dentry

}

Поле k_name містить покажчик на імя обєкта Якщо довжина імені менше KOBJ_NAME_LEN, що зараз складає 20 байт, то імя зберігається в масиві name, a нулі knam e вказує на перший елемент цього масиву Якщо довжина імені більше KOBJ_NAME_LEN байт, то динамічно виділяється буфер, розмір якого достатній для зберігання рядка символів імені, імя записується в цей буфер, а поле k_name вказує на нього

Покажчик paren t вказує на батьківський обєкт даного обєкта kobject Таким чином, за допомогою структур kobjec t може бути створена ієрархія обєктів в ядрі, яка дозволяє встановлювати співвідношення спорідненості між різними обєктами Як буде видно далі, за допомогою файлової системи sysfs здійснюється уявлення в просторі користувача тій ієрархії обєктів kobject, яка існує в ядрі

Покажчик dentr y містить адресу структури struc t dentry, яка представляє цей обєкт в файлової системі sysfs

Поля kref, ktype і kse t вказують на екземпляри структур, які використовуються для підтримки обєктів kobject Поле entr y використовується спільно з полем kset Самі ці структури і їх використання обговорюватимуться нижче

Зазвичай структури kobjec t вбудовуються в інші структури даних і самі по собі не використовуються Наприклад, така важлива структура, як struc t cdev, має поле kobj

/ * Структура cdev обєкт для представлення символьних пристроїв * /

struct cdev {

struct kobject           kobj struct module             *owner struct file_operations    *ops struct list_head          list dev_t                     dev

unsigned int             count

}

Коли структури kobject вбудовуються в інші структури даних, то останні отримують ті стандартизовані можливості, які забезпечуються структурами kobject Ще більш важливо, що структури, які містять в собі обєкти kobject, стають частиною обєктної ієрархії Наприклад, структура cdev представляється в обєктній ієрархії за допомогою покажчика на батьківський обєкт cdev-> kobj-> parent і списку cdev-> kobj-> entry

Джерело: Лав, Роберт Розробка ядра Linux, 2-е видання : Пер з англ – М: ТОВ «ІД Вільямс »2006 – 448 с : Ил – Парал тит англ

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*