Специфікація BTRON3 (Український переклад) | Розділ 5: Ядро операційної системи (Kernel)
Повернутися до змісту розділу Ядра
Попередня сторінка: 1.7 Менеджер подій (Повернутися)
Наступна сторінка: 1.9 Системний годинник (Перейти)

1.8 Менеджер пристроїв та драйверів (Device Management)

1.8.1 Загальні відомості

Підсистема управління пристроями ядра BTRON забезпечує уніфікований асинхронний та синхронний ввід/вивід для блокових (Block), символьних (Character) та спеціальних системних пристроїв.

Доступ до пристроїв здійснюється за допомогою унікальних логічних дескрипторів пристрою (DID — Device ID), які видаються системним викликом opn_dev().

1.8.2 Іменування та класифікація пристроїв

Пристрої ідентифікуються символьними назвами у кодуванні TRON Code (наприклад, "fdd0", "hdd0", "com1", "kbd", "display").

1.8.3 Структури даних та константи

□ Режими відкриття пристрою (Open Mode)

#define TD_READ     0x0001  /* Дозвіл на читання (Read Mode) */
#define TD_WRITE    0x0002  /* Дозвіл на запис (Write Mode) */
#define TD_UPDATE   0x0003  /* Дозвіл на читання та запис (Read/Write) */
#define TD_EXCL     0x0100  /* Монопольний ексклюзивний доступ (Exclusive) */
#define TD_WAIT     0x0200  /* Очікування вивільнення заблокованого пристрою */

□ Атрибути пристроїв (Device Attributes)

#define TDA_BLK     0x0001  /* Блоковий пристрій (Block Device) */
#define TDA_CHR     0x0002  /* Символьний пристрій (Character Device) */
#define TDA_REMOV   0x0010  /* Знімний носій (Removable Media - FD/Flash/CD) */
#define TDA_RO      0x0020  /* Носій лише для читання (Read-Only) */

□ Команди управління пристроєм (Device Control Requests for dev_sts)

#define TD_GSTAT    ( 1)    /* Отримання поточного статусу та параметрів пристрою */
#define TD_SSTAT    ( 2)    /* Встановлення режимів та параметрів пристрою */
#define TD_EJECT    ( 3)    /* Програмне вилучення / виштовхування носія (Eject) */
#define TD_FORMAT   ( 4)    /* Низькорівневе форматування диска/треку */
#define TD_FLUSH    ( 5)    /* Скидання незбережених буферів запису на диск (Flush Cache) */

□ Інформація про пристрій (DEV_INFO)

typedef struct {
    TC      name[32];       /* Логічна символьна назва пристрою */
    UW      attr;           /* Атрибути пристрою (TDA_BLK, TDA_CHR, TDA_REMOV) */
    W       blksz;          /* Розмір дискового блоку/сектора у байтах */
    W       nblk;           /* Загальна кількість блоків у пристрої */
} DEV_INFO;

1.8.4 Системні виклики Менеджера пристроїв

opn_dev
Open Device
Відкриття пристрою та отримання дескриптора DID (Open Device)

【Синтаксис / Прототип】

DID opn_dev(TC *devnm, W mode)

【Параметри】

TC *devnm   Логічна назва пристрою у кодуванні TRON Code (наприклад, "fdd0")
W   mode    Режим відкриття (TD_READ, TD_WRITE, TD_EXCL, TD_WAIT)

【Значення, що повертається】

> 0     Успішне відкриття: логічний дескриптор пристрою (DID)
< 0     Помилка (Код помилки)

【Детальний опис】

Шукає зареєстрований пристрій за ім'ям devnm, ініціалізує сесію доступу відповідно до режиму mode та повертає дескриптор DID. Якщо пристрій уже відкритий у режимі монопольного доступу TD_EXCL, виклик блокується (при TD_WAIT) або повертає помилку ER_BUSY.

【Коди помилок】

ER_NOEXS : Пристрій із вказаною назвою devnm не зареєстрований у системі.
ER_BUSY  : Пристрій вже заблокований іншим процесом у режимі TD_EXCL.
ER_NOSPC : Переповнено системну таблицю відкритих дескрипторів пристроїв.
ER_PAR   : Некоректний режим відкриття mode або адреса devnm.
cls_dev
Close Device
Закриття пристрою (Close Device)

【Синтаксис / Прототип】

ERR cls_dev(DID did)

【Параметри】

DID did     Дескриптор відкритого пристрою

【Значення, що повертається】

= 0     Успішне закриття пристрою (E_OK)
< 0     Помилка (Код помилки)

【Детальний опис】

Завершує сесію роботи з пристроєм did, скидає кешовані буфери на носій та вивільняє дескриптор пристрою у системній таблиці.

【Коди помилок】

ER_DID : Недійсний або закритий дескриптор пристрою did.
rea_dev
Read Device
Зчитування даних з пристрою (Read Device)

【Синтаксис / Прототип】

WERR rea_dev(DID did, W start, VP buf, W size, TMO tmout)

【Параметри】

DID   did   Дескриптор пристрою
W     start Початковий номер блоку (для блокових) або 0 (для символьних)
VP    buf   Буфер у віртуальній пам'яті для збереження даних
W     size  Кількість байтів для зчитування
TMO   tmout Таймаут очікування у мілісекундах (TMO_FEVR, TMO_POL)

【Значення, що повертається】

>= 0    Кількість фактично зчитаних байтів
< 0     Помилка (Код помилки)

【Детальний опис】

Зчитує size байтів даних із пристрою did, починаючи з блоку start, і записує їх у буфер пам'яті buf.

【Коди помилок】

ER_DID   : Недійсний дескриптор пристрою did.
ER_IO    : Апаратна помилка зчитування вводу/виводу.
ER_TMOUT : Перевищено час очікування готовності пристрою.
ER_ADR   : Неприпустима адреса буфера buf у пам'яті.
wri_dev
Write Device
Запис даних на пристрій (Write Device)

【Синтаксис / Прототип】

WERR wri_dev(DID did, W start, VP buf, W size, TMO tmout)

【Параметри】

DID   did   Дескриптор пристрою
W     start Початковий номер блоку (для блокових) або 0 (для символьних)
VP    buf   Буфер у віртуальній пам'яті з даними для запису
W     size  Кількість байтів для запису
TMO   tmout Таймаут очікування у мілісекундах

【Значення, що повертається】

>= 0    Кількість фактично записаних байтів
< 0     Помилка (Код помилки)

【Детальний опис】

Записує size байтів із буфера пам'яті buf на пристрій did, починаючи з блоку start.

【Коди помилок】

ER_DID   : Недійсний дескриптор пристрою did.
ER_ROVR  : Спроба запису на носій, захищений від запису (Read-Only).
ER_IO    : Апаратна помилка запису на пристрій.
ER_TMOUT : Перевищено час очікування операції запису.
chg_dmd
Change Device Mode
Зміна режимів доступу до пристрою (Change Device Mode)

【Синтаксис / Прототип】

ERR chg_dmd(DID did, W mode)

【Параметри】

DID did     Дескриптор відкритого пристрою
W   mode    Нові маски режимів відкриття (TD_READ, TD_WRITE, TD_EXCL)

【Значення, що повертається】

= 0     Успішна зміна режиму (E_OK)
< 0     Помилка (Код помилки)

【Детальний опис】

Динамічно змінює права доступу або режим ексклюзивного заблокування для вже відкритого дескриптора пристрою did.

dev_sts
Device Status / Control (ioctl)
Отримання статусу та прямого керування пристроєм (Device Control)

【Синтаксис / Прототип】

WERR dev_sts(DID did, W req, VP buf)

【Параметри】

DID did     Дескриптор пристрою
W   req     Команда керування (TD_GSTAT, TD_SSTAT, TD_EJECT, TD_FORMAT, TD_FLUSH)
VP  buf     Буфер передачі параметрів або отримання результатів

【Значення, що повертається】

>= 0    Успішне виконання команди
< 0     Помилка (Код помилки)

【Детальний опис】

Виконує низькорівневі виклики управління драйвером пристрою (аналог ioctl): форматування носіїв, виштовхування дискет/дисків, очищення внутрішніх кеш-буферів драйвера.

get_dev
Get Device Information
Отримання конфігураційної інформації про пристрій (Get Device Info)

【Синтаксис / Прототип】

ERR get_dev(TC *devnm, DEV_INFO *info)

【Параметри】

TC       *devnm Символьна логічна назва пристрою
DEV_INFO *info  Буфер у віртуальній пам'яті для збереження метиданих DEV_INFO

【Значення, що повертається】

= 0     Успішне зчитування інформації (E_OK)
< 0     Помилка (Код помилки)

【Детальний опис】

Зчитує глобальні параметри зареєстрованого пристрою (розмір дискового сектора, кількість блоків, прапорці блокового/символьного пристрою) без необхідності попереднього відкриття його дескриптора.

lst_dev
List Registered Devices
Отримання переліку зареєстрованих у системі пристроїв (List Devices)

【Синтаксис / Прототип】

WERR lst_dev(DEV_INFO *info, W cnt)

【Параметри】

DEV_INFO *info  Масив структур DEV_INFO для збереження списку пристроїв
W         cnt   Максимальна кількість елементів масиву info

【Значення, що повертається】

>= 0    Фактична кількість зареєстрованих у системі пристроїв
< 0     Помилка (Код помилки)

【Детальний опис】

Заповнює масив info переліком усіх активних пристроїв та драйверів, які наразі зареєстровані в ядрі ОС BTRON.

sus_dev
Suspend Device
Переведення пристрою у стан енергозбереження / зупинки (Suspend Device)

【Синтаксис / Прототип】

ERR sus_dev(DID did, W mode)

【Параметри】

DID did     Дескриптор пристрою
W   mode    Режим зупинки / сну (0 = активний, 1 = Standby, 2 = Suspend/Power Off)

【Значення, що повертається】

= 0     Успішне переведення стану пристрою (E_OK)
< 0     Помилка (Код помилки)

【Детальний опис】

Управляє станом живлення периферійного пристрою для підсистеми Power Management (зупинка обертання шпинделя жорсткого диска, переведення у режим сну контролера тощо).


Повернутися до змісту цього розділу
Попередня сторінка: 1.7 Менеджер подій (Повернутися)
Наступна сторінка: 1.9 Системний годинник (Перейти)