Този сайт използва бисквитки (cookies). Ако желаете можете да научите повече тук. Разбрах

Новини Технологии

Ролята на драйверите в Embedded Linux

Embedded Linux позволява да успявате бързо да отговорите на изискванията на Интернет на нещата

от , 03 август 2018 0 695 прочитания,

Embedded Linux непрекъснато намира място сред най-добрите операционни системи, използващи вградени системи. И за това има причина. Бързият ръст на Интернет на нещата изисква отговарянето на различни потребности на ИоТ устройствата. Способността на програмистите да създават вградени Linux системи става ключова за развитието на бързи и надеждни системи. Embedded Linux дава на разработчиците точно такива възможности, за да се задържат на гребена на вълната в бурното развитие на ИоТ.

В книгата Mastering Embedded Linux Programming - Second Edition, авторът Крис Симъндс прави обстойно пътешествие из тази така важна операционна система. CIO.bg избра да ви запознае с 9. глава, в която авторът описва как драйверите на ядрото на устройството общуват със системния хардуер и как програмистите да разработват драйвери и да ги използват в своите приложения.

Драйверите на ядрото на устройството са механизъм, чрез който хардуерът е представен на останалата част от системата. Разработчиците на вградени системи трябва да осигурят напасването на тези драйвери към останалата част от архитектурата и достъпа до тях. В повечето случаи новите устройства, които биват въвеждани в системите, имат вече има готови драйвери и не се налага да пишете никакъв допълнителен код към ядрото. Например, когато работите с GPIO pins и LED-ове, използващи файлове в sysfs, можете да използвате библиотеки за достъп до серийните шини, като SPI (Serial Peripheral Interface) и I2C (Inter-Integrated Circuit).

Ролята на драйверите

Една от функциите на ядрото е да капсулира множеството хардуерни интерфейси и да ги представя по един постоянен начин на програмите от потребителското пространство. Ядрото има рамка, направена да улесни писането на драйвери, които представляват парче код, свързващо ядрото с хардуера. Драйверът може да бъде предназначен да контролира физически устройства като UART или MMC контролер, или виртуални устройства като null device (/dev/null) или ram диск. Един драйвер може да контролира различни устройства от един и същи вид.

Драйверът на ядрото е с приоритет и има пълен достъп до адресното пространство на процесора и хардуерните регистри. Може да използва сложната инфраструктура на ядрото за синхронизация и управление на паметта. Но трябва да сте наясно, че ако объркате нещо в кода на драйвера, можете да сринете цялата система. Като цяло има правило, че драйверите трябва да бъдат максимално опростени и сведени до това да осигуряват информация до приложенията, където се вече се вземат решенията. Затова често можете да чуете „Без политики в ядрото“ (no policy in the kernel). Отговорност на програмите в потребителското пространство е управлението на цялата система.

В Linux съществуват три основни типа драйвери: Character, block и network. Character се използва за небуфериран I/O с богат набор от функции и тънък слой между потребителския код и драйвера. Това е първият избор, когато се стигне до внедряване на потребителско устройство.

Block представлява интерфейс за блокиране на I/O за и от големи устройства за съхранение. При него има дебел слой буфериране, което кара диска чете и пише максимално бързо, затова и е неприложим в много случаи. Network е подобен на block, но се използва за предаване и получаване на мрежови пакети.

Съществува и четвърти тип, който се представя като група от файлове в псевдофайлова система. Например можете да достъпите GPIO драйвер чрез група от файлове в /sys/class/gpio.

Устройства с character драйвери

Character драйверите се идентифицират в потребителското пространство със специален файл, наречен device node. Той се преобразува в драйвер на устройството, като използва основни и второстепенни номера, свързани с него. Най-общо казано главният номер картографира device node до даден драйвер на устройството, а малкият номер показва на драйвера през кой интерфейс е осъществен достъп.

Device node може да се създаде по няколко начина.

  • devtmpfs: Създава се, когато драйверът регистрира нов интерфейс. Той използва базовото име (ttyAMA) и instance номер.

  • udev или mdev (без devtmpfs): Същият като предишния начин, с изключение на това, че daemon програмата в потребителското пространство трябва да извлече името от sysfs и да създаде нода.

  • mknod: Ако използвате статични device nodes, те се създават ръчно с mknod.

Когато отворите character device node, ядрото проверява дали основните и второстепенните номера попадат в диапазона от регистрирани драйвери. Ако ги намери, прехвърля действието на драйвера, ако не – драйверът извлича второстепенен номер, за да намери кой интерфейс да използва.

За да напишете програма за достъп до драйвер на устройство, трябва да знаете как работи той. Драйверът не е файл, използвате го, за да промените състоянието на устройството.

Block драйвери

Те също се асоциират с device node с основни и второстепенни номера, но за разлика от предишните, използват различни пространства за имената. Character драйвер с основен номер 4 по никакъв начин не е свързан с block драйвер с основен номер 4.

При block устройствата основният номер се използва, за да идентифицира драйвера, а второстепенният – за определяне на дела.

Потребителската програма може да оперира директно с block устройството чрез device node. Това не се прави твърде често и обикновено се използва за административни операции, като създаване на дялове и форматиране на дялове във файлови системи. След като е създадена файловата система, си взаимодействате индиректно с устройството чрез файловете в нея.

Network драйвери

Те не се достъпват през device nodes и нямат основни и второстепенни номера. Вместо това получават имена от ядрото, на базата на string и instance номер. Обикновен мрежовите имена се използват само при конфигуриране на мрежа с използване на ip и ifconfig. След това работите с мрежовия драйвер индиректно чрез отваряне на сокети и позволяване на мрежовото ниво да реши как да ги маршрутизира до правилния интерфейс.


    

КОМЕНТАРИ ОТ  

Полезни страници
    За нас | Аудитория | Реклама | Контакти | Общи условия | Декларация за поверителност | Политика за бисквитки |
    Действителни собственици на настоящото издание са Иво Георгиев Прокопиев и Теодор Иванов Захов