Чи є драйвер пристрою в Linux програмою / процесом чи це просто бібліотека?


23

Це драйвер пристрою програма, яка працює самостійно, або це просто бібліотека (група функцій), завантажена в пам'ять, і програми можуть викликати одну з її функцій (тому вона не працює самостійно).

І якщо це програма, чи має вона ідентифікатор процесу, тож я можу, наприклад, припинити драйвер пристрою так само, як я можу припинити будь-який інший процес?


1
Ви можете "розвантажити" драйвер за допомогою rmmod, але тільки якщо він не використовується.
pjc50

Відповіді:


35

У Linux багато драйверів пристроїв є частиною ядра, а не бібліотеками чи процесами. Програми взаємодіють з ними за допомогою файлів пристроїв (як правило, в/dev ) і різних системних викликів , таких як open, read, write, ioctl...

Однак є винятки. Деякі драйвери пристроїв використовують суміш заглушок драйверів ядра та бібліотек простору користувача ( наприклад, використання UIO). Інші реалізовані повністю в просторі користувача, як правило, поверх якогось інтерфейсу розбиття бітів (UART або GPIO). В обох випадках вони зазвичай перебувають у процесі роботи, тому ви не побачите окремого процесу, а лише процесу, який використовує пристрій.

Щоб "припинити" драйвер пристрою, вам доведеться зупинити всі процеси його використання, потім видалити його модулі ядра (припускаючи, що він побудований як модулі), а також будь-які інші модулі, які він використовує і які більше не потрібні. Ви можете перелічити модулі у вашій системі за допомогою lsmodта вивантажити їх за допомогою rmmodабо modprobe -r, обидва вони працюватимуть лише за умови, lsmodщо в них немає користувачів.


2
Якщо ви достатньо сміливі, і ваше ядро ​​було складено CONFIG_MODULE_FORCE_UNLOAD, ви можете спробувати rmmod -fзмусити вивантажувати модулі, які використовуються / не призначені для видалення / тощо. Це, крім того, що просто призведе до ядра в ненадійному стані, також забарвити ядро.
Руслан

9

Спочатку потрібно визначити, що таке водій. Я визначу це як програму або підпрограму, яка керує пристроєм (наприклад, вашою камерою) або підсистемою (як файлова система). Незалежно від того, чи це буде це безпосередньо через системну програму або через сервери ядра чи процеси користування наземним користувачем, це не має головного значення для цього, по суті, семантичного питання.

У деяких випадках Linux надає лише загальний протокол, записаний у програмному забезпеченні, де фактичним "драйвером" є дерево пристроїв. Це конфігурація апаратних параметрів і яке програмне забезпечення використовувати для створення драйвера.

Взагалі інтерфейси і протоколи драйверів реалізуються за допомогою модулів ядра, які завантажуються у міру необхідності, визначених деревами пристроїв або правилами udev. Модуль ядра не є в найсуворішому сенсі процесом чи бібліотекою.

Бібліотека - це лише статичний набір коду, який можна завантажити в будь-який процес. Сучасні операційні системи завантажують ці бібліотеки у спільну пам'ять. Процес може сам посилатися на будь-яку кількість спільних бібліотек.

Процес - це запущена програма, в якій системна програма або ядро ​​виділили такі ресурси, як системна пам'ять і час процесора. Модулі ядра можуть або не можуть слідувати цій схемі самі, але незалежно не розглядаються як дефактотні процеси в Linux.

Отже, щоб відповісти на ваше запитання, драйвер не повинен бути обробленим, але він може бути. Незважаючи на те, що код може існувати в бібліотеці, драйвер все ще завантажується в пам'ять через програму, будь то ядро ​​у вигляді модулів ядра або процесів у користуванні.

Це стає більшою мірою смисловим аргументом, коли ми розглядаємо, яка насправді водій. Ви можете сказати, що драйвер - це завжди програма, але іноді це не так, як у випадку дерев пристроїв, а також насправді це може бути процес користувача, файл дерева пристроїв, правила udev та модуль ядра, де обидва процес і модуль використовують бібліотеки для складання логіка водія.


0

Драйвер пристрою Linux - це, по суті, бібліотека простору ядра . Його дзвінки ініціюються здебільшого драйверами вищого рівня або процесами користувацького простору, які використовують його.

З цього є лише кілька винятків:

  • Нитки ядра можуть бути запущені / зупинені також драйверами, це по суті процеси без частини простору користувача.
  • Обробники переривань ініціюються апаратними засобами, а не процесами простору користувача.

В інших системах, як у GNU Hurd, драйвери по суті є демонами, з якими процеси можуть взаємодіяти. У Linux драйвери - це бібліотеки. І те й інше має свої переваги та недоліки.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.