Як вже говорилося, однією з базових задач операційної системи є управління апаратною частиною. Ту програму або той шматок програмного коду, який призначений для управління конкретним пристроєм, і називають зазвичай драйвером пристрою. Необхідність драйверів пристроїв в операційній системі пояснюється тим, що кожне окреме пристрій сприймає тільки свій строго фіксований набір спеціалізованих команд, за допомогою яких цим пристроєм можна керувати. Причому команди ці частіше нд ?? його призначені для виконання якихось простих елементарних операцій. У випадку, якби кожен додаток змушене було використовувати тільки ці команди, писати програми було б дуже складно, та й розмір їх був би дуже великий. З цієї причини програми зазвичай використовують якісь команди високого рівня (типу "записати файл на диск"), а про перетворення цих команд в керуючі послідовності для конкретного пристрою піклується драйвер цього пристрою. З цієї причини кожне окреме пристрій, будь то дисковод, клавіатура або принтер, повинно мати свій програмний драйвер, який виконує роль транслятора або сполучної ланки між апаратною частиною пристрою і програмними додатками, що використовують цей пристрій.
В Linux драйвери пристроїв бувають трьох типів.
Драйвери другого типу представлені модулями ядра. Οʜᴎ оформлені у вигляді окремих файлів і для їх підключення (на етапі завантаження або згодом) вкрай важливо виконати окрему команду підключення модуля, після чого буде забезпечено управління відповідним пристроєм. У разі якщо вкрай важливо сть у використанні пристрої відпала, модуль можна вивантажити з пам'яті (відключити). З цієї причини використання модулів забезпечує більшу гнучкість, так як кожен такий драйвер повинна бути переконфігурувати без зупинки системи. Модулі часто використовуються для управління такими пристроями як SCSI-адаптери, звукові і мережеві карти.
Файли модулів ядра розташовуються в підкаталогах каталогу / lib / modules. Зазвичай при інсталяції системи задається перелік модулів, які будуть автоматично підключатися на етапі завантаження. Список завантажуваних модулів зберігається в файлі / etc / modules. А в файлі /etc/modules.conf знаходиться перелік опцій для таких модулів. Редагувати цей файл "вручну" не рекомендується, для цього існують спеціальні скрипти (типу update-modules).
Для підключення або відключення модулів в працюючій системі є спеціальні утиліти.
· Lsmod - видає список завантажених в даний момент модулів.
· Insmod - служить для завантаження або "установки" модуля з командного рядка.
· Rmmod - служить для вивантаження або "видалення" модуля.
· Modprobe - автоматично завантажує модулі. Для того, щоб відобразити поточну конфігурацію нд ?? ех модулів можна скористатися командою: modprobe -c.
Хоча файли модулів мають суфікс .o, при використанні цих команд посилання на модулі вказуються без згадки цього суфікса. Наприклад: при згадці модуля, файл якого прийнято називати "joystick.o", ви повинні використовувати в командному рядку просто "joystick".
І, нарешті, для третього типу драйверів пристроїв програмний код драйвера поділитися ?? ен між ядром і необхідні інструменти, призначеної для управління цим пристроєм. Наприклад, для драйвера принтера ядро відповідає за взаємодію з паралельним портом, а формування керуючих сигналів для принтера здійснює демон друку lpd (який використовує для цього спеціальну програму-фільтр).
Але потрібно спеціально відзначити, що у НД ?? ех трьох випадках безпосередню взаємодію з пристроєм здійснює ядро або якийсь модуль ядра. А призначені для користувача програми взаємодіють з драйверами пристроїв через спеціальні файли, розташовані в каталозі / dev і його підкаталогах. Тобто взаємодія прикладних програм з апаратною частиною комп'ютера в ОС Linux здійснюється за наступною схемою:
пристрій <-> ядро <-> спеціальний файл пристрою <-> програма користувача
Така схема забезпечує єдиний підхід до вс ?? їм пристроїв, які з точки зору додатків виглядають як звичайні файли.