Następna strona Poprzednia strona Spis treści

8. W razie kłopotów

P1.

Dostaje błąd segmentacji pamięci kiedy dobieram się do portów

O1.

Albo twój program nie ma uprawnień root'a bądź wywołanie ioperm() nie powiodło się z jakiegoś innego powodu. Sprawdź wartość powrotną funkcji ioperm(). Sprawdź również czy rzeczywiśćie operujesz na portach do których uzyskałeś dostęp za pomocą ioperm() (zobacz P3). Jeśli używasz makr opóźniających (inb_p(), outb_p(), itd), pamiętaj aby wywołać ioperm() również wtedy jeśli chcesz uzyskać dostęp do portu 0x80

P2.

Nie mogę nigdzie znaleść deklaracji funkcji in*(), out*() i gcc narzeka na niezdefiniowane referencje.

O2.

Nie kompilowałeś z włączoną optymalizacją (-O), i w ten sposób gcc nie mógł odnaleźć makr w katalogu asm/io.h. Albo nie włączyłeś w ogóle <asm/io.h> do swojego programu.

P3.

Wywołąnie out*() nie robi nic bądź robi coś dziwnego.

O3.

Sprawdź kolejność parametrów; powinno być outb(wartość, port), a nie outportb(port, wartość) co jest popularne w MS-DOS.

P4.

Chcę sterować standardowym urządzeniem RS-232/portem równoległym/drukarką/joystickiem

O4.

Lepiej będzie jak użyjesz istniejących sterowników z jądra, X serwera lub czegoś innego. Sterowniki te są zazwyczaj dosyć wszechstronne więc nawet lekko niestandardowe urządzenia z nimi współpracują. Zobacz wyżej informacje o zwykłych portach, są tam odnośniki do stosownej dokumentacji.


Następna strona Poprzednia strona Spis treści