Sensory i Linux

1. Sensory czynników środowiskowych
- Niska cena, zaskakująco dobre parametry oraz niewielkie rozmiary to główne czynniki decydujące o ich popularności. 
- Linux w krótkim czasie zaczyna oferować dla nich wsparcie w postaci dedykowanego podsystemu IIO (ang. Industrial Input/Output)...
  • Linux zyskuje nowe moce;
  • Sposoby dodawania sensorów do systemu;
  • Krótko o mechanizmie instancjonowania urządzeń w Linuksie;
  • Drzewo urządzeń;
  • Dodanie sensora I2C do drzewa urządzeń;
  • Dodanie sensora SPI do drzewa urządzeń;
  • Dodanie sensora 1wire do drzewa urządzeń;
  • Dodanie sensora I2C poprzez zapis do pliku w /sysfs;
  • Modyfikacja DT w locie;
  • IIO;
  • Podstawy;
  • Obsługa zdarzeń;
  • Wyzwalanie pomiaru;
  • Trigger loop;
  • Bufory;
  • Bezpośredni dostęp do rejestrów sensora.

LINUX ZYSKUJE NOWE MOCE 

- Prace nad IIO rozpoczynają się przed 2009 rokiem. Jest to spowodowane coraz większą ilością napływających sterowników dla sensorów, z których wiele oferowaną funkcjonalnością nie do końca pasuje do istniejących podsystemów. 
  *Dla przykładu w systemie Linux podsystem HWMON (ang. Hardware Monitoring) oferuje wsparcie oraz interfejs programistyczny dla sensorów związanych z szeroko pojętym monitorowaniem stanu zdrowia systemu, tj. pomiarem temperatur, panujących napięć czy prędkości obrotowych wentylatorów. 
  *Inny podsystem, znany jako Input oferuje z kolei wsparcie dla urządzeń wejściowych, czyli myszy, klawiatur oraz joysticków. Zatem urządzeń służących do interakcji z komputerem. 
  *Z kolei podsystem Misc to miejsce dla pojedynczych, unikalnych sterowników niepasujących nigdzie indziej. Z przykładowej trójki Misc wydaje się najlepszym miejscem dla nowych sensorów. Niestety ten pomysł nie znajduje uznania wśród wielu programistów. Jeśli bowiem do Misc trafiłoby kilka sterowników z podobną semantyką, to kłóciłoby się to z założeniem o unikalności sterownika. 
    

-> Zapadła więc decyzja o stworzeniu dedykowanego podsystemu dla czujników, który będzie oferował spójny interfejs dla twórców sterowników urządzeń oraz przestrzeni użytkownika. W artykule położono duży nacisk na praktykę, dlatego warto zaopatrzyć się wcześniej w jakiś zestaw developerski. Najlepiej w platformę Orange Pi Zero, rekomendowany ze względu na oferowane możliwości oraz niską cenę. Warto również zajrzeć na stronę https://github.com/tduszynski/iio, gdzie czytelnik odnajdzie garść informacji na temat przygotowania odpowiedniego kernela oraz narzędzi wykorzystanych w artykule. 


SPOSOBY DODAWANIA SENSORÓW DO SYSTEMU 

Komunikacja z sensorami odbywa się najczęściej przy użyciu jednego z trzech interfejsów szeregowych SPI, I2C lub 1wire. 

a) SPI do komunikacji wymaga trzech linii sygnałowych i jest na ogół wykorzystywany w szybkich sensorach, np. akcelerometrach czy żyroskopach. 
b) Z kolei bardzo wolny 1wire (transfery z prędkością do 160 kbps w trybie overdrive) do komunikacji (i opcjonalnie do zasilania sensora) wymaga tylko jednej linii sygnałowej, ale za to pozwala na podłączenie do niej wielu sensorów. Zastosowanie znajduje często w czujnikach temperatury. 
c) Kompromis stanowi interfejs I2C używający do komunikacji dwóch linii sygnałowych, z reguły wolniejszy od SPI, ale też znacznie szybszy od 1wire. Często stosowany w sensorach TOF (ang. time-of-flight), mierzących odległość, czy w sensorach wilgotności. 

Należy podkreślić, że nie jest to reguła, a raczej fakt wynikający z obserwacji. 

Żaden z wymienionych interfejsów nie jest wyposażony w mechanizm enumeracji. Oznacza to, że system musi z góry wiedzieć, jakie urządzenia są podłączone do magistrali. 

Istnieje kilka sposobów na poinformowanie Linuksa o podłączonym sensorze. 

- modyfikując drzewo urządzeń (ang. Device Tree) w sposób statyczny, 
- modyfikując drzewo urządzeń w trakcie działania systemu (mechanizm Device Tree Overlays), 
- za pomocą pliku /sys/bus/i2c/devices/i2c-X/new_device, gdzie X to numer magistrali I2C, 
- wprowadzając informacje o sensorze do tzw. „board file”, który jest plikiem źródłowym C jądra Linuksa, Zapis informacji w „board file” to era sprzed DT, więc nie warto do niej wracać. 
- dodając wpis w tablicy ACPI. Innym rozwiązaniem jest po prostu zrezygnowanie z używania sterownika dostępnego w Linuksie i napisanie własnej aplikacji, która wykorzysta dostępne API dla przestrzeni użytkownika (np. poprzez skrypt w języku Python). ACPI natomiast jest przeznaczone dla dużych systemów, np. serwerów, dlatego nie jest stosowane w popularnych, amatorskich systemach developerskich. 


instancjonowania urządzeń w Linuksie -jak przebiega proces dopasowania urządzenia i sterownika (ang. binding)

Bez straty ogólności przyjmijmy, że sterownik jest wbudowany w jądro. Podczas startu Linux przegląda dostępne sterowniki i dodaje je do listy sterowników odpowiedniej magistrali. W każdy sterownik wbudowana jest tablica ID wspieranych urządzeń, zapisana w specyficzny dla magistrali sposób. Z każdym urządzeniem dostępnym w systemie związane są jakieś informacje pozwalające je jednoznacznie zidentyfikować. Pochodzenie tych informacji zależy w dużej mierze od używanej magistrali. 

Komentarze

Popularne posty z tego bloga

Kubernetes

Helm

Ansible Tower / AWX