[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



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: