Newsgroup: it.comp.os.linux.development
Titolo: Lettura locazione di memoria

Salve a tutti,
Nella speranza di non essere fuori tema vi pongo una semplice domanda, spero
che la risposta sia altrettanto banale... :-))
Necessito di scrivere una funzione c o c++ (sotto linux processore x86)che
legga e scriva in una locazione di memoria ben precisa.
L'indirizzo è dato nella classica forma xxxx:xxxx (base+offset).
Quale libreria devo includere e quale funzione devo usare?
Grazie
Piercarlo

 L'indirizzo è dato nella classica forma xxxx:xxxx (base+offset).
Non si puo`. O meglio, puoi farlo se la tua applicazione gira da root,
ma non con la classica forma base+offset, quanto piuttosto con
l'indirizzo assoluto a 32 bit, e scrivendo su /proc/kmem.
Che poi sia una cosa totalmente inutile tranne che  a livello kernel e`
un altro discorso... :)
Cosa devi fare?

 un altro discorso... :)
Inutile ... dipende da cosa fai ...
Io devo scrivere su  una scheda di interfaccia che viene mappata in
memoria...
Sotto "dos" o win98 non ho problemi, (non uso dirver), ma devo usare linux
obbligatoriamente ...
By Pier

 l'indirizzo assoluto a 32 bit, e scrivendo su /proc/kmem.
Occhio ai deadlock, e` *estremamente* pericoloso giocare con /proc/kmem.
Kronos
-- 
Home: 
http://kronoz.cjb.net
Se non puoi convincerli, confondili.

 ma devo usare linux obbligatoriamente ...
Allora devi  scrivere un driver che  a richiesta mappi la  memoria della
scheda da  qualche parte  nello spazio  di indirizzamento  del processo.
Prova a guardare  "Device drivers" (o qualcosa di  simile) di Alessandro
Rubini: lo trovi in rete ed e` gratuito.
ciao
Kronos
-- 
Home: 
http://kronoz.cjb.net
Se alla sera, dopo una strepitosa vittoria, guardandoti allo
specchio dovessi notare un secondo paio di palle, che il tuo 
cuore non si riempia d'orgoglio, perche` vuol dire che ti 
stanno inculando -- Saggio Cinese

 memoria...
/dev/port? Fai un seek all'indirizzo che ti serve e poi vai di write.
Massimiliano


--------------------------------
Inviato via 
http://usenet.libero.it

 > /dev/port? Fai un seek all'indirizzo che ti serve e poi vai di write.
Se avevi posto una domanda, ti avverto che usenet.libero se l'e`
mangiata. :-)

 mangiata. :-)
Potresti spiegarmi meglio cosa viol dire fare un seek su dev/port ...
e cosa intendi per andare di wrirte ....
Grazie
Pier


 e cosa intendi per andare di wrirte ....
Davo per scontato che per scrivere il tuo codice a basso livello
volessi usare il C.  lseek() e write() sono due istruzioni in C, ma se
le trovi nella maggior parte dei linguaggi.
In linux puoi accedere a una periferica senza elaborazioni intermedie
ad opera di driver, aprendo /dev/port come fosse un file con open(),
posizionando con lseek() l'offset di scrittura all'indirizzo assegnato
alla periferica (che ovviamente devi conoscere), e poi scrivendo con
write().  Inoltre, se appartieni al gruppo assegnato a /dev/port e
/dev/port e` scrivibile dal gruppo, puoi fare il tutto anche senza
essere root.
Per maggiori informazioni: man 2 open, man 2 lseek, man 2 write.
Massimiliano


[...]
Mi pare che volesse accedere alla memoria, non alle porte di I/O.
Alessandro.

 Mi pare che volesse accedere alla memoria, non alle porte di I/O.
Forse ho capito male, ma aveva scritto:




Se e` mappata in memoria non c'e` certo bisogno di usare write e lseek,
che sono istruizioni per scrivere e spostarsi nei file (anche di
dispositivo, nel caso, pero` resta una cosa molto diversa). 
Ah, non sono per niente istruzioni del C, non fanno neanche parte della
libreria standard. Sono system call, e vengono specificate dallo standard
POSIX.
Ciao

 POSIX.
Pure questo e` vero (e no, non mi sembra una pedanteria).

La scheda in questione è ISA, e si mappa in memoria in -> D000:0010 e in
D000:00E0
by pier