Chciałbym napisać sterownik urządzenia Linux dla jakiegoś prawdziwego urządzenia sprzętowego. Jakie urządzenia peryferyjne Raspberry Pi są dobrze dopasowane? Zasadniczo potrzebuję:
Musi być wystarczająco mały dla początkującego (najwyżej kilka miesięcy, lepiej kilka tygodni).
Arkusz danych musi być dostępny. Na początku myślałem o adapterze USB-Ethernet, ale wygląda na to, że ma bardzo ograniczony arkusz danych.
Jakieś pomysły? Czy może być coś w rodzaju pracy z konsolą szeregową w GPIO?
Odpowiedzi:
Nauka pisania sterowników może być trudna w przypadku łączenia ze skomplikowanymi urządzeniami i / lub skomplikowanymi magistralami. Z tego powodu poleciłbym albo użycie prostych i dobrze znanych urządzeń (ignorując istniejącą implementację ich sterowników w jądrze), takich jak urządzenia I²C / SPI, które są zwykle używane z mikrokontrolerami. Na przykład możesz znaleźć dowolne urządzenie, które jest „obsługiwane” przez społeczność Arduino (co oznacza, że jest dla niego biblioteka / dokumentacja) i spróbuj użyć go z RaspberryPi.
Jeśli to nie wystarczy lub nie chcesz kupować za dużo sprzętu, możesz sam go stworzyć. Po prostu zdobądź mikrokontroler (np. Atmega lub coś takiego), stwórz program, który stanie się jakimś urządzeniem, a następnie spróbuj połączyć się z nim za pomocą sterowników Linux. W ten sposób możesz łatwo tworzyć programy, które będą emulować różne klasy urządzeń. A ponieważ sam napiszesz swoje „oprogramowanie układowe”, pomoże ci to w debugowaniu problemów.
Potrzebujesz do tego pewnych umiejętności programowania mikrokontrolera, ale nie jest trudno nauczyć się programowania z Arduino i uważam, że i tak jest to przydatna wiedza dla programisty sterowników.
źródło
BCM2835 ARM Peripherals
dokumencie. Pamiętaj jednak, że aby go użyć, musisz najpierw wyłączyć istniejący sterownik w jądrze.Osobiście zacznę od bardzo prostego urządzenia, takiego jak jedna lub więcej diod LED podłączonych bezpośrednio do pinów GPIO.
Możesz albo kupić urządzenie gotowe do podłączenia, albo podłączyć własne.
Powodem, dla którego zasugerowałbym to, jest to, że debugowanie sterowników jest ogólnie znacznie trudniejsze niż normalny program, dlatego przydatne jest proste wyzwanie, aby rozpocząć, a także można użyć tego kodu jako metody debugowania dla bardziej skomplikowanych urządzeń (stan na pin GPIO do podłączenia do oscyloskopu), w którym ważne jest taktowanie.
Jeśli to jest przedmiotem zainteresowania istnieje sterownik jądra dla LedBorg dostępne tutaj , źródło powinno być rozsądnie prosty przykład za jazdę szpilki GPIO w regularnych odstępach czasu.
źródło
Najprostsze „urządzenie”, dla którego możesz napisać sterownik sprzętowy (jeśli Twoim celem jest opracowanie sterowników sprzętowych), może być tak proste jak LED (dodałem znaki cudzysłowu, ponieważ technicznie LED nie jest urządzeniem, ale nadal jest kawałkiem sprzęt), jak sugeruje @PiBorg.
Inne opcje to niektóre łatwe w obsłudze urządzenia / komponenty, takie jak fotorezystory, pasywne czujniki podczerwieni (krótkie: PIR), czujniki temperatury, wentylatory komputerowe (najlepiej wentylator 4-żyłowy, który pozwala nie tylko monitorować, ale także kontrolować RPM), matryce punktowe LED i tak dalej. Zasadniczo takie proste urządzenia pozwolą ci mieć minimum sprzętu (abyś mógł zobaczyć i dotknąć tego, co faktycznie osiągnąłeś), a jednocześnie możesz dowiedzieć się o wielu tematach, które są używane w przypadku znacznie bardziej złożonych urządzeń, w których złożoność wynika głównie z używanego protokołu.
Pamiętaj także, że nie musisz dokładać dodatkowych starań, aby wkopać się w moduły jądra. Oczywiście, jeśli chcesz to zrobić, nikt cię nie powstrzyma. :)
Oto przykład połączenia pasywnego czujnika podczerwieni (zamierzam go przetestować wkrótce po dostarczeniu mojego PIR: 3). Możesz wziąć to i zacząć zagłębiać się w świat jądra Linuksa, aby zobaczyć, jak możesz na przykład stworzyć sterownik jądra, który działa z PIR.
źródło