Re: Wstawki asemblerowe dla GCC........problem z dostępem do przestrzeni I/O z poziomu asemblera GCC dla Debiana
Nie jestem ekspertem z takich zagadnień niskopoziomowych, więc proszę
się nie śmiać jeśli napiszę jakąś głupotę. Chętnie się doedukuję, jeśli
ktoś zechce mnie poprawić :)
On Sun, May 14, 2006 at 12:51:35PM +0200, majess wrote:
> program działa dobrze do momentu pojawienia się w kodzie odwołań do tych
> funkcji (InPort i OutPort). Gdy je już napotka............to nie wykonuje
> już pozostałych instruckji, ktore sa poniżej tylko kończy wykonywanie
> programu(wiec dostęp do tej przestrzeni powoduje jakiś "fatal error" i
> zakończenie wykonywania programu).
Ten "fatal error" to właśnie najbardziej istotna część problemu.
> Nie wiem czy to może miec związek z tym ze Debian ma jakieś restrykcje
> odnośnie dostępu do przestrzeni I/O komputera? Sytuacja jest taka sama
> gdy próbuje napisać funkcje odczytujące i zapisujące słowo do pamięci.
We wspóczesnych systemach UNIX/Linux procesor pracuje w tzw. trybie
chronionym, w związku z czym niektóre rozkazy (dotyczące zarządzania
pamięcią, dostępu I/O i inne, np. instrukcja hlt) nie są dostępne z
procesów pracujących w trybie użytkownika.
W przypadku próby ich wykonania sterowanie jest przekazywane do jądra,
które zazwyczaj po prostu przerywa działanie danego procesu (fatal
error).
> Może ktoś z was spotkał sie z podobnym problemem albo ma więcej
> doświadczenia w pisaniu wstawek asemblerowych Unix dla GCC?
Nie żebym miał doświadczenie, ale wydaje mi się, że da się "odblokować"
I/O dla pewnego procesu, jeśli pracuje z uprawnieniami nadzorcy (UID=0).
Być może dzieje się to automatycznie, albo trzeba wywołać jakiś syscall,
ale zdaje się właśnie z tego mechanizmu korzysta np. X server.
Oczywiścia osobną kwestią są ewentualne konflikty pomiędzy sterownikiem
portów COM w jądrze, a Twoim programem, ale to się da ominąć choćby
wyłączając ten sterownik.
Marcin
--
Marcin Owsiany <porridge@debian.org> http://marcin.owsiany.pl/
GnuPG: 1024D/60F41216 FE67 DA2D 0ACA FC5E 3F75 D6F6 3A0D 8AA0 60F4 1216
Reply to: