Czy są dostępne zasoby do nauki pisania sterowników?


26

Mam spore doświadczenie w projektowaniu sprzętu i systemów wbudowanych, ale nigdy nie napisałem sterownika dla systemu operacyjnego.

Chciałbym wiedzieć, czy są jakieś dobre przewodniki, najlepiej online, chociaż zainteresują mnie dobre książki, które dadzą mi dobry początek w tym, co muszę wiedzieć, aby zaprojektować i wdrożyć sterowniki dla systemu operacyjnego.

Prawdopodobnie ludzie będą do mnie strzelać i chociaż chciałbym zobaczyć dobrego przewodnika bez względu na to, na jakim systemie jest oparty, chciałbym zobaczyć przewodnik oparty na systemie Windows, głównie z powodu faktu, że większość ludzi Sprzedałbym produkt, który miałby okna.

Daj mi znać, jeśli mogę dodać jakieś dodatkowe informacje, aby to wyjaśnić.


1
Świetne pytanie, interesuje mnie również to.
Pan Jeż

Przyjąłem najszerszą odpowiedź. Aby uzyskać informacje dla każdego systemu operacyjnego, podobała mi się odpowiedź. Odpowiedź Joby'ego była doskonale specyficzna dla Linuksa. Trudno mi było zdecydować.
Kortuk,

Odpowiedzi:


10

Większość mojego ostatniego doświadczenia w pisaniu rzeczywistych sterowników dla systemu operacyjnego dotyczy Linuksa, a najlepszym referencją dla IMO jest Linux Device Drivers, wydanie trzecie autorstwa Jonathana Corbeta, Alessandro Rubini i Grega Kroah-Hartmana (2005), o którym już wspomniano. Jest dostępny na Amazon , Safari Books On-Line , a także do pobrania za darmo .

Kilka innych książek na ten sam temat to Essential Linux Device Drivers , autor: Sreekrishnan Venkateswaran (2008) (dostępny również w Safari Books Online ) i Pisanie Linux Device Drivers: przewodnik z ćwiczeniami (tom 3) dr Jerry Cooperstein (2009).

W przypadku sterowników urządzeń z systemem Windows najnowszą książką na ten temat (opublikowaną dwa tygodnie temu) wydaje się być Sterownik urządzenia dla systemu Windows 7 , autor: dr Ronald D. Reeves (2010). Jest również dostępny w Safari Books Online .

Starsza książka, która obejmowałaby system Windows XP, to: Programowanie modelu sterownika Microsoft Windows, wydanie drugie , Walter Oney (2002). Jest również dostępny w Safari Books Online .

Inną książką, która wydaje się być wyczerpana, ale dostępna w Safari Books Online, jest Opracowywanie sterowników za pomocą Windows Driver Foundation , autorstwa Penny Orwick i Guy Smith (2007). Zakładam, że obejmie system Windows Vista.

Wreszcie, Microsoft ma wskaźniki do wielu blogów itp. Omawiających rozwój sterowników.


Dzięki, sugeruję, aby twój post zawierał również link do „Sterowników urządzeń Linux”. W przeciwnym razie bardzo dokładny.
Kortuk

11

Dobry sterownik hermetyzuje możliwości sprzętu i udostępnia je OS / aplikacjom w naturalny sposób.

To, jak najlepiej to zrobić, zależy w dużej mierze od systemu operacyjnego, na który celujesz, oraz od jakiego sprzętu jest przeznaczony sterownik.

Całe moje doświadczenie dotyczy Linuksa i niewielkiego niestandardowego OSen w czasie rzeczywistym.

W przypadku systemu Linux polecam przeczytanie sterowników urządzeń systemu Linux . To dobre wprowadzenie do różnych smaków sterowników Linuksa i abstrakcji, jakie zapewnia im system operacyjny.

Urządzenia takie jak porty szeregowe, w których dane są odczytywane sekwencyjnie, są zwykle obsługiwane przez sterowniki urządzeń znakowych z węzłem urządzenia w przestrzeni użytkownika, z którego aplikacje mogą czytać. catmogę przeczytać z nich.

Urządzenia o dostępie swobodnym, takie jak pamięć flash i dyski twarde, są obsługiwane przez urządzenia blokowe. ddmoże uzyskać do nich dostęp. Dla dobrego przykładu spójrz na system Linux MTD .

Sterowniki, które majstrują przy sprzęcie na niskim poziomie, prawie na pewno będą musiały zostać zaimplementowane w przestrzeni jądra. Możesz zrobić moduł jądra do ładowania w środowisku wykonawczym lub umieścić kod statycznie w jądrze Linuksa.

Sterowniki oparte na istniejących sterownikach ogólnych, takich jak USB, mogą być zapisywane w przestrzeni użytkownika. Używając na przykład libusb .


4
Linux Device Drivers to dobra książka. Niestety, te rzeczy są bardzo specyficzne dla systemu operacyjnego. Linux jest prawdopodobnie najłatwiejszy do napisania, ponieważ w drzewie źródłowym jest już tak wiele sterowników dla odniesienia. Jeśli napisałeś kod osadzony do sterowania urządzeniami peryferyjnymi mikroprocesora, prawdopodobnie dobrze znasz podstawy sterownika urządzenia.
markrages

tak, usuwam moje komentarze. mój błąd.
Kortuk

1
Jak wspomniano znaczniki, wnętrzności sterownika, który kontroluje rzeczywisty sprzęt, będą takie same, niezależnie od tego, czy masz system operacyjny, czy nie. Główne różnice przy pisaniu sterowników to 1) interfejsy muszą pasować do standardowego modelu (np. Otwieranie, zamykanie, odczyt, zapis, ioctl) dla systemu operacyjnego, oraz 2) metoda, w której sterownik jest instalowany i aktywowany.
tcrosley,

1
@ tcrosley, Jeśli masz dużo informacji na temat tych szczegółów, chciałbym zobaczyć odpowiedź na ten temat.
Kortuk

3

Nie mam żadnego doświadczenia w tej kwestii, ale dam dwa centy.

Możesz zacząć tutaj http://www.osr.com/index.html lub tutaj https://www.osronline.com/index.cfm

Tutaj w Brazylii mamy dobry blog na ten temat. Jest napisany w języku portugalskim i angielskim. Niestety większość artykułów jest po portugalsku.

W języku portugalskim jest post dotyczący książek na tym blogu: http://translate.google.com.br/translate?hl=pt-BR&ie=UTF-8&sl=pt&tl=en&u=http://driverentry.com.br/ blog /% 3Fp% 3D825 & twu = 1

Mam nadzieję, że trochę pomogłem


Pomoże to w znacznym stopniu, jeśli zadam pytanie: „Gdzie mogę nauczyć się portugalskiego online na czas, aby nauczyć się pisać sterowniki?” Dzięki za pomoc.
Kortuk

2
Nie martw się o naukę portugalskiego. Łącza dotyczące rozwoju dysków, które przekazałem, są w języku angielskim. Nawet DriveEntry jest również napisane w języku angielskim. Niestety post o książkach jest po portugalsku, ale książki po angielsku. Najważniejsze są książki, a nie poczta.
Daniel Grillo
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.