PDF de programación - doc manual linux acceso dispositivos

Imágen de pdf doc manual linux acceso dispositivos

doc manual linux acceso dispositivosgráfica de visualizaciones

Actualizado el 28 de Julio del 2017 (Publicado el 14 de Enero del 2017)
1.011 visualizaciones desde el 14 de Enero del 2017
27,6 KB
5 paginas
Creado hace 23a (01/01/2001)
Accesos a Dispositivos Independientes

del Bus

Matthew Wilcox
[email protected]

Alan Cox
[email protected]

Tabla de contenidos
1. Introducción ..............................................................................................................................................................3
2. Bugs Conocidos Y Suposiciones...............................................................................................................................3
3. E/S Mapeada en Memoria........................................................................................................................................3
3.1. Obteniendo Acceso al Dispositivo .................................................................................................................3
3.2. Accediendo al dispositivo...............................................................................................................................3
3.3. Funciones de Herencia ISA............................................................................................................................4
4. Accesos al Espacio de Puerto ...................................................................................................................................4
4.1. Espacio de Puerto Explicado..........................................................................................................................4
4.2. Accediendo al Espacio de Puerto ...................................................................................................................4
5. Funciones Públicas Suministradas ..........................................................................................................................4
6. Sobre la traducción ...................................................................................................................................................4

Accesos a Dispositivos Independientes del Bus

por Matthew Wilcox

por Alan Cox

Copyright © 2001 Matthew Wilcox

Esta documentación es software libre; puedes redistrubuirla y/o modificarla bajo los términos de la GNU General Public License tal como ha sido
publicada por la Free Software Foundation; por la versión 2 de la licencia, o (a tu elección) por cualquier versión posterior.
Este programa es distribuido con la esperanza de que sea útil, pero SIN NINGUNA GARANTÍA; sin incluso la garantía implicada de COMER-
CIABILIDAD o ADECUACCIÓN PARA UN PROPOSITO PARTICULAR. Para más detalles refiérase a la GNU General Public License.
Debería de haber recibido una copia de la GNU General Public License con este programa; si no es así, escriba a la Free Software Foundation, Inc.,
59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
Para más detalles véase el archivo COPYING en la distribución fuente de Linux.

1. Introducción
Linux suministra una API que abstrae la realización de E/S a través de todos los buses y dispositivos, permitiendo a
los controladores de dispositivos ser escritos independientemente del tipo de bus.

2. Bugs Conocidos Y Suposiciones
Ninguno.

3. E/S Mapeada en Memoria

3.1. Obteniendo Acceso al Dispositivo

La forma más ampliamente soportada de E/S es la E/S por mapeo de memoria. Esto es, una parte del espacio de
direcciones de la CPU es interpretada no como un acceso a la memoria, sino como un acceso a un dispositivo.
Algunas arquitecturas definen dispositivos para estar en una dirección fija, pero la mayoría tiene algún método para
descubrir los dispositivos. El bus PCI es un buen ejemplo de este esquema. Este documento no cubre cómo recibir
una dirección, sino que asume que ya estás empezando en una. Las direcciones físicas son del tipo unsigned long.

Estas direcciones no deberían de ser usadas directamente. En vez de esto, para obtener una dirección utilizable para
pasar a las funciones de acceso descritas posteriormente, debería de llamar a ioremap. Te será devuelta una dirección
utilizable para el acceso del dispositivo.

Después de que hayas finalizado de usar el dispositivo (esto es, en la rutina de salida en tu módulo), llama a ioun-
map para retornar el espacio de direcciones al núcleo. La mayoría de las arquitecturas asignan un nuevo espacio de
direcciones cada vez que llamas y haces ioremap, y pueden acabarse a menos que llames a iounmap.

3.2. Accediendo al dispositivo

La parte de la interface más usada por los controladores es la lectura y escritura de los registros mapeados en memoria
del dispositivo. Linux suministra interfaces para leer y escribir cantidades de 8-bits, 16-bits, 32-bits y 64-bits. Debido
a un accidente histórico estos son llamados accesos byte, word, long y quad. Ambos accesos de lectura y escritura son
soportados; no hay soporte pre-producido en este momento.

Las funciones tienen los nombres readb, readw, readl, readq, writeb, writew, writel y writeq.

A algunos dispositivos (como los framebuffers) les gustaría usar transferencias más grandes de los 8 bytes cada vez.
Para estos dispositivos, son suministradas las funciones memcpy_toio, memcpy_fromio y memset_io. No utilices
memset o memcpy en direcciones de E/S; no está garantizado que copien los datos en orden.

Las funciones de lectura y escritura están definidas para ser ordenadas. Esto es, al compilador no le está permitido
reordenar la secuencia de E/S. Cuando el órden puede ser compilado de forma optimizada, puedes usar __readb y
amigos para indicar un órden relajado. Usa esto con cuidado. La rmb suministra una barrera de lectura de memoria.
La wmb suministra una barrera de escritura de memoria.

Mientras las funciones básicas son definidas para ser síncronas y ordenadas con respecto a las otras, los dispositivos
que están en los buses quizás sean asíncronos. En particular, algunos autores han sido quemados por el hecho de que
las escrituras en el bus PCI son realizadas de forma asíncrona. El autor de un controlador debe de emitir una lectura

3

para el mismo dispositivo para asegurarse de que la escritura ha tenido lugar en los casos específicos que quiere el
autor. Este tipo de propiedad no puede ser escondida por los escritores de los controladores en la API.

Accesos a Dispositivos Independientes del Bus

3.3. Funciones de Herencia ISA

En los núcleos viejos (2.2 y anteriores) el bus ISA podía leer o escribir con estas funciones y sin usar ioremap. Esto
ya no es verdad en Linux 2.4. Un conjunto de funciones equivalentes existen para el cambio de controladores con
herencia fácil. Las funciones disponibles son prefijadas con ’isa_’ y son isa_readb, isa_writeb, isa_readw,
isa_writew, isa_readl, isa_writel, isa_memcpy_fromio y isa_memcpy_toio

Estas funciones no deberían de ser usadas en los nuevos controladores, y serán quitadas eventualmente.

4. Accesos al Espacio de Puerto

4.1. Espacio de Puerto Explicado

Otra forma de E/S comúnmente usada en el Espacio de Puerto. Esta es un rango de direcciones separados del espacio
normal de direcciones de memoria. El acceso a estas direcciones no es generalmente tan rápido como los accesos a
las direcciones mapeadas en memoria, y por lo tanto tienen potencialmente un espacio de direcciones más pequeño.

A diferencia de la E/S mapeada en memoria, no se requiere preparación para acceder al espacio de puerto.

4.2. Accediendo al Espacio de Puerto

Los accesos a este espacio son suministrados a través de un conjunto de funciones que permiten accesos de 8-bits,
16-bits y 32-bits; también conocidos como byte, word y long. Estas funciones son inb, inw, inl, outb, outw y
outl.

Son suministradas algunas variantes para estas funciones. Algunos dispositivos requieren que los accesos a sus puertos
se realicen más despacio. Esta funcionalidad es suministrada añadiendo una _p al final de la función. También hay
equivalentes a memcpy. Las funciones ins y outs copian bytes, words o longs al puerto dado.

5. Funciones Públicas Suministradas

6. Sobre la traducción
Este documento es la traducción de "Bus-Independent Device Accesses", documento que acompaña al código del
núcleo de Linux, versión 2.4.18.

Este documento ha sido traducido por Rubén Melcón <[email protected]>; y es publicado por TLDP-ES
(http://es.tldp.org)

Versión de la tradución 0.04 ( Julio de 2002 ).

4

Si tienes comentarios sobre la traducción, ponte en contacto con Rubén Melcón <[email protected]>

Accesos a Dispositivos Independientes del Bus

5
  • Links de descarga
http://lwp-l.com/pdf1329

Comentarios de: doc manual linux acceso dispositivos (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad