[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Wstawki asemblerowe dla GCC........problem z dostępem do przestrzeni I/O z poziomu asemblera GCC dla Debiana



Marcin Owsiany wrote:

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
Tylko jeszcze prosze powiedz mi jak przełaczyć sie do trybu nadzorcy?(masz na mysli wykonywanie tego programu z uprawnieniami uzytkownika root?) I na wszelki wypadek jak bys mogl mi powiedziec jak sie wylacza sterownik COM w jadrze. Przperpaszam za te pytania ale ja dopiero Debiana sie ucze..........(jak widac z wielkimi bolami ;-) )

Pozdrawiam
Łukasz Majewski



Reply to: