[ Pobierz całość w formacie PDF ]
.Najpierw identyfikowany jest podprogram obs³ugi przerwania, a nastêpniepunkty wejœcia do programu sterownika (na przyk³ad adres procedury open) s¹dodawane do tabeli punktów wejœcia sterownika.Ca³y sterownik jest kompilowanyi do³¹czany do j¹dra systemu, a nastêpnie umieszczany w katalogu /dev (wrozdziale 57.„J¹dro systemu” znajdziesz dodatkowe informacje dotycz¹cedodawania sterowników do j¹dra systemu).Na koniec system musi zostaæzrestartowany, po czym mo¿na przetestowaæ dzia³anie nowego sterownika.Oczywiœcie wprowadzenie modyfikacji do kodu sterownika wymaga powtórzeniaca³ego procesu, wiêc usuwanie b³êdów mo¿e byæ doœæ mêcz¹ce i prawdziw¹ sztuk¹jest osi¹gniêcie jak najmniejszej liczby restartów.Przy tworzeniu sterowników urz¹dzeñ nie nale¿y u¿ywaæ funkcji sleep() iseterror() oraz operacji zmiennoprzecinkowych we fragmentach, podczaswykonywania których zawieszona jest obs³uga przerwañ.Czas, na jaki wstrzymywane s¹ przerwania, powinien byæ jak najkrótszy; nale¿yrównie¿ uwa¿aæ, by nie uszkodziæ danych przechowywanych w buforze.Bardzo wa¿nejest tak¿e wykorzystanie jak najmniejszej liczby komórek stosu.Mo¿na u³atwiæ sobie proces usuwania b³êdów ze sterowników urz¹dzeñ,umieszczaj¹c w kodzie Ÿród³owym wywo³ania funkcji printf czy getchar wodniesieniu do innego urz¹dzenia, na przyk³ad konsoli.Takie rozwi¹zaniepozwala na pozostawienie œladu wykonania sterownika.Jeœli testujesz sterownikjako root, mo¿esz równie¿ wykorzystaæ debuger adb, pozwalaj¹cy na obserwacjêpamiêci u¿ywanej przez j¹dro systemu w czasie pracy sterownika.Ostro¿nekorzystanie z tego programu pozwala na bezpoœrednie œledzenie zmian wartoœcizmiennych czy zawartoœci komórek pamiêci; b¹dŸ jednak uwa¿ny, poniewa¿nieprawid³owe u¿ycie debugera adb mo¿e prowadziæ do za³amania siê systemu.Jednym z najczêstszych problemów wystêpuj¹cych przy tworzeniu sterowników(prócz oczywiœcie b³êdów w kodzie Ÿród³owym) jest „gubienie” przerwania lubuœpienie urz¹dzenia podczas jego obs³ugi.Takie sytuacje powoduj¹, ¿eurz¹dzenie siê zawiesza.W wiêkszoœci przypadków do sterowników urz¹dzeñdo³¹cza siê procedurê ograniczaj¹c¹ czas, przez jaki nale¿y oczekiwaæ naodpowiedŸ urz¹dzenia, dziêki czemu unika siê zawieszania urz¹dzenia.Jeœlispodziewane przerwanie nie zostanie zg³oszone w okreœlonym czasie, urz¹dzeniejest sprawdzane bezpoœrednio, aby upewniæ siê, ¿e przerwanie nie zosta³o„zgubione”.Jeœli oka¿e siê, ¿e przerwanie zosta³o zgubione, mo¿e ono zostaæzasymulowane przez sterownik.U¿ywanie funkcji spl() w czasie testowania zwykleu³atwia wyizolowanie tego typu problemów.Sterowniki urz¹dzeñ blokowych najczêœciej tworzone s¹ w oparciu o przerwania.Jednak coraz wiêcej programistów u¿ywa ostatnio techniki zwanej odpytywaniem,nadaj¹cej siê do obs³ugi urz¹dzeñ znakowych.Technika ta polega na regularnymsprawdzaniu stanu urz¹dzenia.Sterownik nie czeka wiêc na zg³oszenieprzerwania, co poci¹ga za sob¹ nieco wiêksze zu¿ycie czasu procesora.Odpytywanie nie jest w³aœciwym rozwi¹zaniem dla wiêkszoœci urz¹dzeñ, takich jakpamiêci masowe, ale w przypadku urz¹dzeñ znakowych mo¿e przynieœæ pewnekorzyœci.Urz¹dzenia szeregowe s¹ zwykle obs³ugiwane za pomoc¹ odpytywania, copozwala na zmniejszenie liczby wywo³añ przerwañ.Terminal po³¹czony z systemem lini¹ o prêdkoœci transmisji 19200 bodów generujeoko³o 1920 przerwañ na sekundê, co powoduje wielokrotn¹ obs³ugê samegoprzerwania i wchodzenie oraz wychodzenie z funkcji jego obs³ugi.Jeœli zamiastprzerwañ zastosowany zostanie mechanizm odpytywania, przedzia³ czasowy pomiêdzykolejnymi zg³oszeniami koniecznoœci obs³ugi przez procesor mo¿e byæ znaczniezwiêkszony, na przyk³ad przez zastosowanie niewielkiego bufora przechowuj¹cegodane wysy³ane do lub odbierane z urz¹dzenia.Urz¹dzenia czasu rzeczywistegorównie¿ nadaj¹ siê do obs³ugi za pomoc¹ mechanizmów odpytywania, poniewa¿zmniejsza to znacznie liczbê wywo³ywanych przerwañ.Jeœli chcesz u¿ywaæ tegomechanizmu w swoich sterownikach urz¹dzeñ, powinieneœ zaopatrzyæ siê w jedn¹ zksi¹¿ek poœwiêconych w ca³oœci sterownikom, poniewa¿ jest to temat doœæz³o¿ony.PodsumowanieWiêkszoœæ u¿ytkowników systemu Linux nigdy nie bêdzie tworzyæ w³asnychsterowników urz¹dzeñ, poniewa¿ przewa¿nie sterowniki takie s¹ ju¿ dostêpne.Jednak jeœli posiadasz zupe³nie nowe urz¹dzenie lub te¿ sterownik, któregou¿ywasz, zawiera jakiœ b³¹d, mo¿esz pokusiæ siê o stworzenie w³asnegosterownika.Nie jest to zadanie bardzo trudne (pod warunkiem, ¿e znasz dobrzejêzyk C), ale zwykle du¿o k³opotów sprawia usuwanie powsta³ych usterek.Programista tworz¹cy sterownik musi ca³y czas uwa¿aæ, by nie wp³ywa³ on nadzia³anie innych procesów lub urz¹dzeñ.Napisanie poprawnie dzia³aj¹cegosterownika jest jednak powodem do dumy.Rozdzia³ 26.„Programowanie w jêzyku C”, omawia zagadnienia zwi¹zane z jêzykiemC dla systemu Linux, którego mo¿na u¿yæ do tworzenia sterowników.Jêzyk Perl, bardzo porêczny i doskonale nadaj¹cy siê do tworzenia krótkichi zaskakuj¹co wydajnych programów, omówiony jest w rozdziale 28.„Perl”.Inne jêzyki programowania dostêpne dla systemu Linux przedstawione s¹ w skróciew rozdziale 30.„Inne kompilatory”
[ Pobierz całość w formacie PDF ]
Darmowy hosting zapewnia PRV.PL