Добавяне на драйвери на устройства - Разбиране на UNIX системите
![]() |
Драйвер на устройство е програма, която позволява на системата да взаимодейства с конкретен компонент на хардуерната среда. Драйверът изпълнява ролята на преводач на командите на конкретно устройство на "езика" на API функциите на ядрото. Драйверите осигуряват приемливо ниво на независимост на UNIX от външни устройства.
Драйверите са компоненти на ядрото, а не потребителски процеси. Въпреки това, драйверът може да бъде достъпен както от ядрото, така и от команди на ниво потребител. За последното се създават специални файлове на устройството в директорията/dev. Ядрото преобразува операциите, извършени върху тези файлове, в извиквания към кода на драйвера.
Във времена на хаос повечето хардуерни устройства изискваха интерфейсна платка и специален драйвер. След това, когато много системи започнаха да поддържат SCSI технологията като стандартен интерфейс за свързване на дискове, ленти и CD-ROM устройства и доставчиците интегрираха поддръжка за стандартни технологии в своите системи, по-специално Ethernet, имаше надежда за стабилност.
След това дойде ерата на компютъра, която отново донесе хаос в нашия красив свят на системни администратори. Патентованите интерфейси отново завладяха и имаше множество „стандарти“ и всякакви хардуерни устройства с различни нива на поддръжка от операционната система. И ето какво виждаме:
- Linux поддържа над 30 различниSCSI чипсети за персонални компютри, всеки продаван от два пъти повече доставчици;
- има повече от 200 мрежови интерфейса за персонални компютри; тези интерфейси се предлагат от различни доставчици под различни имена;
- нови, подобрени, по-евтини устройства се разработват и пускат през цялото време; всеки от тях се нуждае от различен драйвер, който работи с необходимата версия на UNIX.
Като се има предвид скоростта на новите устройства, е почти невъзможно да се пуснат дистрибуции на операционни системи, които интегрират поддръжка за всички нови продукти. Следователно, отново и отново, вие сами трябва да добавяте нови драйвери към ядрото.
Производителите на хардуер насочват все повече и повече внимание към пазара на UNIX и дори понякога създават UNIX версии на драйвери. Ако имате късмет, за съществуващо устройство в системата ще има както драйвер, така и инструкции за инсталирането му. Но най-вероятно драйверът, от който се нуждаете, може да бъде намерен само на някоя неофициална уеб страница.
Както и да е, по-долу ще опишем какво се случва в системата, когато се добави драйвер на устройство. Предполагаме, че читателят е запознат с горната процедура за основна конфигурация на ядрото.
Много устройства имат съответните специални файлове в директорията/dev ; единственото изключение в съвременните операционни системи са мрежовите устройства. Всеки от тези файлове има основен и второстепенен номер на устройство, свързани с него. Чрез тези номера ядрото преобразува достъпа до файлове в повиквания към правилния драйвер.
Основният номер на устройството показва драйвера, към който е присвоен този файл (с други думи, той показва типа на устройството). Малкият номер на устройството показва кое конкретно устройство от този тип трябва да бъдеадрес. Малкият номер на устройство често се нарича просто номер на устройство или екземпляр.
Можете да откриете номера на устройства с помощта на командатаls -1 :
%ls -1 /dev/sda
brw-rw 1 root диск 8, 0 3 март 1999 г. /dev/sda
Малкият номер понякога се използва от водача за избор на конкретна характеристика на устройството. Например лентовото устройство може да има няколко файла в директорията/dev, които предоставят различни комбинации от опции, като режим на плътност и пренавиване назад. Всъщност водачът е свободен да тълкува малкия номер на устройството, както намери за добре. Можете да научите повече за поведението на драйвера на съответнатаman страница.
Има два типа файлове на устройството: блоково-ориентирани и байт-ориентирани. Четенето от и записването на блоково ориентирано устройство се извършва по един блок (група от байтове, обикновено кратно на 512) наведнъж, докато четенето и записването на байтово ориентирано устройство може да се извършва един байт наведнъж. За някои устройства достъпът се предоставя както чрез блоково-ориентирани, така и чрез байт-ориентирани файлове. Например дисковете и лентите водят "двоен живот", за разлика от терминалите и принтерите.
Драйверите на устройства формират стандартен интерфейс към ядрото. Всеки драйвер има подпрограми, предназначени да изпълняват някои или всички от следните функции:
прикачете затваряне на дъмп ioctl отворена сонда
psize четене получаване нулиране изберете спиране
стратегия таймаут предаване запис
Удобно е да се изпълняват отделни системни функции с помощта на драйвер на устройство, дори ако свързаното с него устройство не е в системата. Такива "призрачни" устройства се наричатпсевдо устройства. Например, на потребител, влизащ в мрежата, се присвоява псевдо-терминал (PTY), който не се различава от нормален сериен порт по отношение на софтуер от високо ниво. Благодарение на този подход програмите, написани във време, когато всички потребители все още са работили с буквено-цифрови терминали, могат да продължат да функционират в света на прозорците и мрежите.
Когато дадена програма извърши операция върху файл на устройство, ядрото автоматично прихваща достъпа до файла, търси таблицата за прескачане за подходящо име на функция и прехвърля контрола върху него. За извършване на необичайни операции, които нямат преки аналози в модела на файловата система (като изваждане на флопи диск от устройството), се използва системното извикванеioctl, което предава потребителската команда директно на драйвера.
Драйверите и техните конфигурационни файлове обикновено са скрити, доколкото е възможно, така че някой прекалено любопитен потребител да не ги обърка случайно. В табл. 12.8 показва местоположението по подразбиране на драйверите и конфигурационните файлове на нашите тестови системи.
Таблица 12.8. Местоположение на драйверите и конфигурационните файлове