Model sterownika urządzenia Linux

Model sterownika urządzenia Linux

Zasadniczo każdy system operacyjny potrzebuje oprogramowania specyficznego dla urządzenia. Ten oprogramowanie rozumie funkcjonalność urządzenia i jest środkową warstwą między systemem operacyjnym a sprzętem. Sterownik urządzenia to termin używany do tego oprogramowania. W tym artykule omówimy o tym, jak Linux obsługuje urządzenia i sterowniki urządzeń. Krótko mówiąc, zbadamy framework sterowników urządzenia Linux.

Opis

Zazwyczaj na dowolnej tablicy lub platformie obecnych jest wiele urządzeń, a urządzenia te są ze sobą połączone przez niektóre fizyczne linie lub protokoły. Te protokoły połączeń są znane jako autobusy. Dostępnych jest kilka protokołów autobusowych. Kilka przykładów to I2C, SPI, AHB, APB, PCI itp. Weźmy przykład urządzenia pamięci EEPROM. EEPROM jest połączony z systemem przez I2C Bus. CPU użyje protokołu I2C do odczytu/zapisu danych z EEPROM. Po stronie procesora ta obsługa protokołu zostanie wykonana przez kontroler protokołu I2C. Kontroler I2C w CPU działa jako urządzenie główne. EEPROM działa jak urządzenie niewolnicze. Wszystkie szczegóły I2C są dostępne w specyfikacji I2C.

W systemach ARM opartych na systemie Linux urządzenia EEPROM są wypełnione za pomocą drzewa urządzenia. Definiowanie EEPROM w drzewie urządzenia wystarczy, aby zadeklarować urządzenie w systemie. Z tymi instancją urządzenia wjazdu drzewa urządzenia zostanie utworzona przez jądro Linux podczas uruchamiania. Gdy Linux sięgnie, analizuje drzewo urządzenia i utworzył instancję urządzeń zdefiniowanych w drzewie urządzenia.

Z tym urządzeniem jest tworzone w Linux, ale Linux nie będzie w stanie zrozumieć urządzenia. W przypadku komunikacji/operacji urządzenia potrzebne jest specjalne oprogramowanie specyficzne dla urządzenia. Będzie to znane jako sterownik urządzenia dla urządzenia. Wracając do przykładu EEPROM, sterownik urządzenia EEPROM będzie potrzebny do odczytania/zapisu danych z EEPROM.

Aby powiązać sterownik urządzenia z określonym urządzeniem, potrzebny jest kompatybilny ciąg. Kompatybilny ciąg jest używany przez jądro Linux do zbadania określonego sterownika do urządzenia podczas uruchamiania. Kernel Linux zapewnia również elastyczność, że sterownik urządzenia może być załadowany w czasie wykonywania. Jedynym warunkiem jest to, że sterownik nie powinien być potrzebny do uruchomienia platformy. Sterownik urządzenia, który jest dodawany później do jądra, są kompilowane jako obiekty jądra. To są pliki obecne jako .Ko. Polecenie Insmod służy do dodawania obiektów jądra na bieżącym jądrze.

Po sondowaniu urządzenia z urządzeniem można użyć urządzenia do operacji. Urządzenie EEPROM można odczytać/zapisać po inicjowaniu sterownika EEPROM w jądrze Linux. Sterownik EEPROM inicjuje urządzenie i zapewnia możliwość jądra Linux do odczytu/zapisu EEPROM.

Weźmy przykład sterownika urządzenia EEPROM Jako AT24, kod źródłowy dla urządzenia można znaleźć pod linkiem: https: // github.com/torvalds/Linux/Blob/Master/Drivers/Misc/Eeprom/At24.C

Ten sterownik obsługuje bardzo szeroką liczbę urządzeń EEPROM, jak opisano w komentarzach kierowcy Atmel AT24C lub * MICROCHIP 24LC itp.

Poniżej znajduje się informacje o drzewie urządzenia, które należy dodać, aby utworzyć instancję urządzenia:

EEPROM@50
Compatible = "Atmel, 24c32";
Reg = <0x50>;
pagesize = <32>;

Należy to dodać do określonego węzła kontrolera I2C, w którym to urządzenie EEPROM jest podłączone.

Jak widzimy, istnieje kompatybilny ciąg. To są informacje używane przez jądro Linux do zlokalizowania sterownika urządzenia urządzenia EEPROM.

Aby uzyskać informacje na temat urządzeń i urządzeń obecnych w systemie Linux, wpisy SYSFS są najlepszym miejscem.

Dla każdego urządzenia i sterownika systemu SYSFS zostaną utworzone przez jądro. Użytkownik może odwołać te pliki SYSFS w celu zdiagnozowania systemu.

Jeśli widzimy zawartość katalogu SYS w jądrze Linux:


/sys/autobus: Wszystkie autobusy obecne w systemie są wymienione w tym.

Można również zobaczyć autobus I2C. Jak omawialiśmy przykład urządzenia I2C. W katalogu autobusowym mamy katalog autobusowy I2C.

W przypadku dowolnego autobusu w SYSFS będziemy mieć wszystkie urządzenia i kierowcy w tym autobusie. Zobaczmy treść autobusu I2C:

Jeśli dalej przeglądamy katalog urządzeń i sterowników, otrzymamy pełną listę urządzeń i sterowników znanych z jądra Linux.

Wewnątrz urządzeń widzimy, że w systemie występuje wiele autobusów I2C. I2C-0, I2C-1, I2C-5 itp., są różne autobusy I2C. 0-0018 i 0-001A to urządzenia niewolników na I2C-0. 1-0050 i 1-0068 to urządzenia niewolników I2C w autobusie. 1 i.mi. I2C-1.

W katalogu sterownika mamy listę wszystkich sterowników urządzeń niewolniczych I2C.

Wracając do naszego przykładu urządzenia EEPROM, 1-0050 to urządzenie Slave EEPROM. Jeśli dalej zanurzymy się w katalogu 1-0050, zobaczymy coś takiego poniżej:


Dało nam to wiedzę na temat sterownika, który kontroluje to urządzenie. W migawce możemy zobaczyć sterownik AT24 kontroluje EEPROM obecny w systemie. To jest sterownik powiązany z tym urządzeniem EEPROM.

Aby uzyskać dostęp do urządzenia EEPROM z miejsca użytkownika, sterownik utworzył plik „EEPROM”, który można również zobaczyć w migawce.

Aby odczytać dane 8K EEPROM i zrzucić do pliku, polecenie DD można użyć jak poniżej:

dd if =/sys/bus/i2c/devices/1-0050/eeprom of = eeprom_data.Bin BS = 1K liczba = 8

Jak widać z dzienników, że 8K bajtów są odczytywane z EEPROM i zapisane do EEPROM_DATA.plik bin. Ten plik pojemnika będzie miał dane EEPROM. Polecenie DD jest najbardziej popularne i powszechnie używane polecenie w Linux World.

Podobnie jak to urządzenie EEPROM, inne urządzenia I2C muszą również postępować zgodnie z wytycznymi dostarczonymi przez jądro Linux. Inne urządzenia I2C mogą to być RTC, ekran TOCH itp. Ogólnie rzecz biorąc, ten framework sterowników urządzenia ma zastosowanie nawet do urządzeń poza zakresem I2C.

Może to być urządzenie SPI lub dowolne inne urządzenie. Będzie jeden instancja urządzenia do utworzenia, a druga instancja sterownika. Zarówno urządzenie, jak i sterownik będą połączone/podłączone przez sterownik magistrali. To jest ogólna struktura sterowników urządzenia w Linux.

Wiązanie i rozpinanie sterownika

Wiązanie sterownika z urządzeniem to proces kojarzenia lub łączenia sterownika z urządzeniem, które może go kontrolować lub rozumieć. Rozpalanie jest procesem odwrotnym, gdy odłączamy sterownik za pomocą urządzenia.

Istnieją pliki SYSFS we wszystkich sterownikach. Nazwy plików są wiązane i rozplątujące. Są to pliki, które można użyć do wiązania i rozpasania. Poniżej znajduje się migawka sterownika EEPROM AT24:

Rozpalanie sterownika za pomocą urządzenia

Jak widzimy, instancja urządzenia jest obecna w AT24. Oznacza to, że urządzenie jest już połączone. Możemy powtórzyć nazwę urządzenia, aby odłączyć sterownik z urządzenia.

W migawce można rozpalić sterownik urządzeniem.

echo 1-0050>/sys/bus/i2c/sterowniki/at24/rozplącie; jest poleceniem, które wykonało rozplanie. Po tym poleceniu urządzenie nie jest obecne. Stąd urządzenie nie jest teraz powiązane z sterownikiem.

Wiązanie sterownika z urządzeniem

echo 1-0050>/sys/bus/i2c/sterowniki/at24/bind; jest poleceniem, które wykonuje wiązanie sterownika z urządzeniem.

Pierwsze polecenie LS pokazuje, że szczegóły urządzenia nie są obecne w katalogu AT24, co oznacza, że ​​urządzenie nie jest połączone z żadnym sterownikiem. Po drugie, wydaliśmy polecenie połączenia urządzenia z sterownikiem. W rezultacie widzieliśmy, jak informacje o urządzeniu są wypełnione w katalogu sterownika. Dlatego kierowca jest pomyślnie powiązany z urządzeniem.

Urządzenie można uzyskać dopiero po pomyślnym wiązaniu sterownika z urządzeniem.

Wniosek

Omówiliśmy strukturę sterowników urządzenia w jądrze Linux z przykładem urządzenia EEPROM I2C. Zbadaliśmy tworzenie urządzenia EEPROM w drzewie urządzeń i łączenie sterownika z urządzeniem. Pewne eksploracje dokonano w plikach SYSFS, które dostarczają bardzo dobrych informacji diagnostycznych na temat urządzeń i sterowników obecnych w jądrze Linux. Widzieliśmy przykład dostępu do EEPROM za pomocą polecenia DD. Rozumieliśmy również ogólne ramy obejmujące urządzenie, sterowniki i autobusy. W końcu odnieśliśmy się również do sposobów ręcznego wiązania sterowników i urządzeń do rozpasania.