sábado, 26 de febrero de 2011

Determinar y configurar las opciones de hardware (parte I)

Introducción

El proceso de configuración de los elementos de hardware en un ordenador requiere cierta familiaridad con los mismos y con su configuración, especialmente los más antiguos, que necesitan algún tipo de configuración manual para evitar conflictos de hardware. Actualmente no es necesario este proceso ya que la mayoría de las configuraciones básicas vienen prefijadas en el firmware del dispositivo o en la BIOS del sistema.

Objetivo

El objetivo de esta entrada es poder determinar y configurar las opciones de hardware en un sistema GNU/Linux. De esta manera, además, podremos determinar y solucionar los conflictos y problemas que puedan surgirnos con nuestro hardware.


El sistema de archivos /proc

Es un sistema de archivos virtual que se utiliza, entre otras cosas, para permitir a los procesos el acceso a la información del kernel. Para lo que nos interesa, este sistema de archivos nos proporciona información sobre la asignación de recursos del kernel, cualquier proceso en ejecución, del hardware instalado y de la configuración de los módulos (drivers).

Para el caso que nos ocupa, los tres archivos más interesantes son:

/proc/interrupts

Cuando un dispositivo necesita comunicarse con el procesador, como indicarle un evento, transferirle una información o comunicarle un estado de error; éste le envía una señal de interrupción para que le haga caso.

Grosso modo, cuando varios dispositivos acupan el mismo recurso de interrución decimos que entran en conflicto, porque el procesador no sabe a cual de ellos hacer caso.

Como nota adicional, decir que, antiguamente, era el procesador el que por un proceso de polling sondeaba todos los dispositivos. Como este método era totalmente ineficiente apareción el sistema de interrupciones, que se utiliza actualmente.

La primera columna se refiere al número de IRQ. Cada CPU tiene su propia columna y su propio número de interrupciones por IRQ. La segunda columna indica el tipo de interrupción y la última el dispositivo.

Valores son comunes del tipo de interrupción para las máquinas x86:

  • XT-PIC — Interrupciones del ordenador AT antiguo que se han producido por un largo periodo de tiempo.
  • IO-APIC-edge — Señal de voltaje de las transacciones interrumpidas desde abajo hasta arriba, creando una edge, en la que la interrupción IO-APIC-level, tan sólo se dan a partir de procesadores 586 y superiores.
  • IO-APIC-level — Genera interrupciones cuando su señal de voltaje se alza hasta que la señal desciende nuevamente.

Ejemplo de salida del archivo /proc/interrupts

$ cat /proc/interrupts 

CPU0 CPU1 
0: 740 0 IO-APIC-edge timer 
1: 9471 0 IO-APIC-edge i8042 
7: 0 0 IO-APIC-edge parport0 
8: 1 0 IO-APIC-edge rtc0 
9: 0 0 IO-APIC-fasteoi acpi 
12: 678611 0 IO-APIC-edge i8042 
14: 285528 0 IO-APIC-edge ata_piix 
15: 2850112 0 IO-APIC-edge ata_piix 
16: 3 0 IO-APIC-fasteoi uhci_hcd:usb2, uhci_hcd:usb5, nouveau 
17: 2263 0 IO-APIC-fasteoi Intel ICH5 
18: 0 0 IO-APIC-fasteoi uhci_hcd:usb4 
19: 0 0 IO-APIC-fasteoi uhci_hcd:usb3 
22: 477885 0 IO-APIC-fasteoi firewire_ohci, eth0 
23: 26043 0 IO-APIC-fasteoi ehci_hcd:usb1 
ERR: 1 
MIS: 0 


/proc/dma

El acceso directo a memoria (Direct Acces Memory) permite a los dispositivos acceder a la memoria del sistema sin interrumpir al procesador. Esto es útil para aplicaciones que requieran muchos recursos, y es un mecanismo típico controladores de unidades de disco, tarjetas de sonido o tarjetas gráficas.

Ejemplo de salida del archivo /proc/dma

$ cat /proc/dma 

4: cascade 


/proc/ioports

Proporciona una lista de las regiones de puertos registrados actualmente utilizados para la comunicación de entrada y salida con un dispositivo.

La primera columna le indica el rango de direcciones de los puertos de entrada y salida reservado para el dispositivo listado en la segunda columna.

Ejemplo de salida del archivo /proc/ioports

$ cat /proc/ioports 

0000-001f : dma1 
0020-0021 : pic1 
0040-0043 : timer0 
0050-0053 : timer1 
0060-0060 : keyboard 
0064-0064 : keyboard 
0070-0071 : rtc0 
0080-008f : dma page reg 
00a0-00a1 : pic2 
00c0-00df : dma2 
00f0-00ff : fpu 
03c0-03df : vga+ 
03f8-03ff : serial 

Resumen

Para exáminar la asignación de recursos en un sistema Linux, deberemos consultar el sistema de archivos /proc.

Uno de los posibles fallos que podemos encontrar es el conflicto de interrupciones, que visualizaremos en el archivo /proc/interrupts.

No hay comentarios:

Publicar un comentario