Управління та маніпуляції з об’єктами kobjec t

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

Перший крок при роботі з обєктами kobjec t це їх декларація та ініціалізація Инициализируются обєкти kobjec t за допомогою функції kobject_ini t (), яка визначена у файлі таким чином

void kobject_init(struct kobject *kobj)

Єдиним параметром цієї функції є обєкт kobject, який необхідно проініціалізувати Перед викликом цієї функції область памяті, в якій зберігається обєкт, повинна бути заповнена нульовими значеннями Зазвичай це робиться при ініціалізації великий структури даних, в яку вбудовується обєкт kobject В інших випадках просто необхідно викликати функцію memset ()

memset(kobj, 0, sizeof (*kobj))

Після заповнення нулями безпечним буде ініціалізація полів paren t і kset, як показано в наступному прикладі

kobj = kmalloc(sizeof (*kobj), GFP_KERNEL)

if (kobj)

return -ENOMEM memset(kobj, 0, sizeof (*kobj)) kobj-&gtksct kset

kobj-&gtparent = parent_kobj

kobject_init (kobj)

Після ініціалізації необхідно встановити імя обєкту за допомогою функції kobject_set_name (), яка має наступний прототип

intkobject_set_name(structkobject*kobj,constchar*fmt,,..)

Ця функція приймає змінна кількість параметрів, за аналогією з функціями print f () і print k () Як вже було сказано, на імя обєкта вказує поле k_name структури kobject Якщо це імя досить короткий, то воно зберігається в статично виділеному масиві name, тому є сенс без необхідності не вказувати довгі імена

Після того як для обєкта виділена память і обєкту присвоєно імя, потрібно встановити значення його поля kset, а також опціонально поле ktype Останнє необхідно робити тільки в тому випадку, якщо безліч kse t не надає типу ktyp e для даного обєкта, в іншому випадку значення поля ktype, яке зазначено в структурі kset, має перевагу Якщо цікаво, чому обєкти kobjec t мають своє поле ktype, то ласкаво просимо в клуб

Джерело: Лав, Роберт Розробка ядра 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>

*

*