Hardware y Arquitectura
De XTech Capacitacion
Tabla de contenidos |
BIOS
Definiciones Preliminares
- PROM
- Es la abreviatura de Programmable Read-Only Memory. Es un tipo de dispositivo de memoria que puede generalmente grabarse (electrónicamente) una vez y luego exibir las características de ROM.
- ROM
- ROM es un acrónimo para Memoria de Sólo lectura.
- Es una memoria no volátil diseñada y fabricada para contener una combinación inalterable de instrucciones y datos. :El ROM que se usa en la actualidad está más bien limitado a controladores industriales u otros controles embebidos, usados con un microcontrolador o microprocesador para realizar una función específica que no necesita cambiarse.
- Firmware
- Firmwware es software embebido que está dentro de memoria flash o EPROM. No es completamente hardware, pero al menos no tiene que ser cargado de un disco un software regular. El BIOS de una computadora es el ejemplo clásico, aunque hoy en día hay firmware en controladores de discos, modems, placas de video y aun unidades de CD-ROM.
- EPROM
- Es PROM que se puede borrar.
- Memoria flash
- La memoria flash es como un chip RAM, excepto que para grabar en ella, primero hay que exponerla a luz ultavioleta para borrar el contenido anterior.
Qué es
BIOS significa Sistema básico de Entrada y Salida.
Se trata de un software que generalmente reside en un un chip PROM en la motherboard. Es el software para el hardware y periféricos y permite que el sistema operativo se comunique con el hardware. La excepción son los dispositivos de bloque como discos, ya que la mayoría de los sistemas operativos se comunican directamente con ellos por razones de rendimiento (los sistemas operativos más simples como DOS todavía usan rutinas de BIOS).
El proceso de ajuste del BIOS permite configurar muchos de los periféricos, así como también la geometría del disco rígido y el reloj del sistema. Los archivos de configuración para el BIOS se almacenan en la RAM no-volátil CMOS.
El BIOS fue originalmente un sistema privativo desarrollado por IBM. Si Compaq no hubiera realizado ingeniería inversa sobre él, el mundo de la computación personal sería diferente en la actualidad. La ingenería inversa permitió el surgimiento de clones baratos.
El Proyecto LinuxBIOS está intentando usar el kernel Linux como un BIOS alternativo Open Source. Ese trabajo es aun altamente experimental, de manera que no conviene probarlo a menos que se esté dispuesto a correr el riesgo de dañar una motherboard.
Relación con el cargador de arranque
El cargador de arranque (bootloader) es una de las piezas más importantes de software del sistema. Sin el, no se podría iniciar el sistema operativo. El bootloader carga el kernel en la memoria y le transfiere los argumentos relevantes. Luego salta a la dirección del kernel y deja que él tome el contro.
El cargador de arranque se pone usualmente en el Master Boot Record (MBR) de la unidad de disco de arranque, pero puede colocarse también en el primer sector de arranque o de la partición raíz. El Master Boot Record es el primer sector de un disco rígido. El disco rígido de arranque es usualmente el master en la cadena IDE primaria, pero el cargador de arranqeu puede instalarse también en un disquete. Además, un bootloader puede cargar un segundo cargador de arranque que puede luego cargar un tercer bootloader, y así sucesivamente.
En máquinas antiguas el disco es más grande de lo que el BIOS puede manejar. En término prácticos el BIOS es incapaz de arrancar ejecutando el kernel porque el kernel no está ubicado dentro del bloque al que puede acceder en el momento del arranque.
Esto se puede solucionar creando una partición para el arranque en el comienzo del disco que esté completamente dentro de los primeros 1023 cilindors del disco rígido. La partición deberá contener el el kernel.
El kernel mismo no sufre de estas mismas limitaciones como el BIOS, de manera que luego de que el BIOS ha cargado el kernel, éste no tendrá problemas en acceder a todo el disco rígido. Los BIOSes relativamente nuevas traducen auticamente el tamaño de los discos rígidos en una manera que pueden contenerse completamente dentro de los primeros 1023 cilindros y por lo tanto las modernas computadoras no sufren este problema.
ACPI
ACPI (Advanced Configuration and Power Interface) es una interfaz de administración de energía para computadoras. Es la sucesora de APM. La principal diferencia entre APM y ACPI es que la última mueve la administración de la energía al sistema operativo, en lugar de tenerlo el BIOS (esto es lo que sucede con APM). También agrega muchas características y posibilidades.
Las cosas que ACPI puede hacer:
- Manejo del botón de Power/Sleep
- Estados power/sleep de la CPU
- Estados de dispositivos individuales power/sleep
- Control y monitoreo del ventilador
- Monitoreo de la temperatura
- etc.
Requiere soporte en el hardware (placa madre, CPU y dispositivos) y el software (OS).
Soporte para Linux
Para que ACPI funcione, se necesita
- Ir al setup del BIOS y habilitar ACPI
- El kernel debe tener soporte para ACPI sea incoporado o bien como módulo (existen múltiples módulos para soporte ACPI para distintos dispositivos, e.g. botón, ventilador, corriente alterna, procesador)
- (opcional) Tener instalado un servicio de ACPI (acpid). Este software reacciona a determinados eventos tales como presionar el botón de power o desconectar una computadora portátil.
Pasando parámetros al kernel
Muchas veces puede ser necesario modificar el comportamiento predeterminado del núcleo Linux. Eso se puede lograr ingresando parámetros mediante el cargador de arranque. Se pueden pasar de dos maneras argumentos al kernel, mediante la interfaz que posee el software de arranque (GRUB o LILO) o bien mediante el archivo de configuración del bootloader que se esté utilizando. El primer modo mencionado es útil cuando se quiere probar una configuración, mientras que el segundo sirve para realizar un cambio permanente.
En algunos se puede querer habilitar una determinada prestación del kernel o por el contrario, deshabilitarla en el caso de que aquella cause inconvenientes (generalmente suceden a causa de dispositivos que con fallos o que no adhieren correctamente a los estándares).
Ejemplos
Habilitar ACPI
acpi=on
Deshabilitar ACPI
acpi=on
Se puede dehabilitar manejo de interrupciones avanzado (APIC) cuando se utiliza computadoras de un solo procesador con
noapic
En caso de ser necesario, también se puede deshabilitar el APIC del propio procesador (Local APIC)
nolapic
Bibliografía
http://wiki.linuxquestions.org/wiki/
http://wiki.kldp.org/wiki.php/InterruptAndException
Modems y placas de sonido
Definiciones preliminares
Interrupciones
Una interrupción de hardware es una señal enviada al procesador de la computadora para notificarle que un evento ha ocurrido. La computadora responde al llamar el código del kernel Linux para manipular el evento del hardware apropiadamente. Durante un evento, un programa en espacio de usuario sería interrupido y esos registros del programa en espacio de usuario se preservan para asegurar reingreso limpio.
Durante la interrupción por hardware, los componentes del kernel realizan su trabajo. Por ejemplo si la placa de red recibe información de la red, el kernel comienza a copiar los datos recibidos en la memoria del sistema. Cuando se completa, el kernel le devuelve el control al programa del usuario y el programa continúa transparentemente.
Ha habido un gran esfuerzo en el kernel Linux para reducir el número de declaraciones que se ejecutan con interruciones deshabilitadas. El tener interrupciones habilitadas durante las llamadas del kernel permitiría un uso de la computadora mucho más rápido cuando el kernel pueda interrupir por si mismo.
Las interrupciones se usan generalmente para el servicio de cronometraje que controla el uso en común del CPU entre muchas tareas y otros dispositivos de hardware (discos, placas de redes, ratones, etc.). La característica multitarea preventiva del kernel toma ventaja de estas interrupciones frecuentes. Durante una interrución el kernel puede permitir a otros procesos concurrentes ejecutarse. Esto es: Un usuario no querría esperar que su disquete se formatee para continuar de navegar por la web.
Las interrupciones de software son llamadas de software por software. Cuando un programa quiere comunicarse con el kernel, el programa llama a una interrupción del software. El kernel proporciona solamente las funcionalidades básicas necesarias, y los programas pueden acceder a cada una de las funciones del kernel mediante la transferencia de parámetros por parte de los registros de la computadora.
IRQ
IRQ significa en castellano "Petición de interrupción" y es un mecanismo por el cual el CPU puede ser interrumpido por un dispositivo de hardware, para atender una solicitud de información.
En su modo más simple, una IRQ es un cable conectado a los pines del procesador al cual está conectado también el dispositivo (o su controlador sobre la motherboard). El dispositivo envía un pulso por el cample, que induce a una interrupción de software en el procesador. Esto fuerza al procesador a empujar el valor actual del Contador del Programa (un registro que apunta a la posición actual en el proceso actual) sobre la lista, y luego salta a un área especial de la memoria del kernel. El kernel luego actúa procesando la petición de entrada/salida.
Los números de IRQ se refieren a una cuenta simple acerca de que cable se usó; IRQ-1 se refiere al primer cable, IRQ-2 al segundo, y así sucesivamente.
Para cualquier procesador dado, hay un número limitado de número de cables de IRQ. Para habilitar más hardware para ser conectado, es muy común compartir IRQs entre diferentes dispositivos. Un dispositivo se dice que es capaz de compartir IRQ si puede ser consultado por el procesador a los efectos de determinar si generó la interrupción o no.
Modems y Softmodems
Qué es un modem
Un modem es un dispositivo que se usa para comunicar con otras computadoras. Un modem es necesario porque la línea de teléfono está hecha para transportar señales de voz analógicas, pero la computadora está hecha para enviar señales de computadora digitales. El modem sirve para convertir señales digitales (llamada modulación) para trabajar con la linea telefónica, y para hacer el proceso inverso (demodulación).
Un modem externo se conecta a la computadora por medio de un cable. Se puede conectar en el puerto USB de la computadora aunque tradicionalmente, se conectan a través del puerto serie. y la mayoría de los modems aun lo hacen así.
Un modem interno se encuentra dentro de la computadora, y se conecta a la computadora vía un bus (usualmente PCI).
Modems por hardware
Los modems por hardware tienen todo fabricado en su hardware. El dispositivo maneja la conversión análogica-digital enteramente.
Teniendo el total control el hardware conlleva un número de ventajas y desventajas. Como estos modems manejan la mayoríade las cosas por sí mismos, no necesitan software complejo para hacer el trabajo de conversión (como es en el caso de los modems por software). Esto libera la necesidad de que la computadora tenga que hacer el trabajo de un modem, y puede hacer que sea más fácil para que el modem funcione bajo Linux u otros sistemas operativos. Sin embargo, esto hace que el modem sea más dificil de actualizar.
Los modems por hardware pueden ser externos o internos. Los modems externos frecuentemente usan un puerto serie preexistente para comunicarse con la computadora. Los modems internos tienden a tener un controlador serie incorporado.
Modems por software
Los modems por software (también conocidos como softmodems o winmodems) contiene lo mínimo necesario para convertir señales telefónicas analógicas a digitables. El resto del trabajo del modem es delegado a la computadora. Por si mismo, el modem por software no es realmente un modem - solamente con los drivers apropiados puede funcionar.
De nuevo, los modems por software tienen ventajas y desventajas. Si un modem por hardware tiene un bug en su controlador, no puede repararse fácilmente a menos que se repare el modem entero, o que el modem por hardware pueda ser "flasheado", lo cual no común. Sin embargo, si el problema es el mismo con un modem por software, el software solamente necesita actualizarse (tal vez descargando e instalando un nuevo driver). No obstante, el software se escribe frecuente solamente para sistemas operativos Windows, haciendo que el dispositivo sea inútil bajo otros sistemas operativos que no tienen el driver correcto para el modem.
Directorio /proc y lspci
Definiciones preliminares
BUS
Un bus es un canal de hardware para que múltiples dispositivos se comuniquen. También llamado frecuentemente bus del sistema o bus de hardware. Cuando es un canal entre dos dispositivos solamente en general se lo llama puerto.
PCI
PCI o Peripherical Component Interconnect es un bus local estándar que fue desarrollado por Intel. Virtualmente (si no definitivamente) todas las PCs (incluyendo Appless) que se venden en la actualidad incluyen este bus. Tiene un ancho de 64 bits (aunque muchos de los implementados poseen 32 bits) y pueden ejecutarse a frecuencias de 33MHz o 66MHz. La velocidad disponible a 33MHz y 32 bits es de 133Mbits por segundo.
PCI reemplazó al viejo bus ISA.
AGP
AGP (Accelerared Graphics Port) es una especificación para una extensión de alta velocidad del bus PCI que permite a las palcas de video el acceso directo a la memoria del sistema. Fue origianalmente desarrollador por Intel pero ahora es un estándar sobre todas las placas madre de computadoras personales, y mejora el rendimiento de aplicaciones gráficas y juegos 3D que requieren un alto ancho de banda de memoria.
Directorio /proc
El directorio /proc es un directorio virtual que contiene información sobre procesos, protocolos de red y dispositivos. El archivo /proc/pci posee información valiosa acerca de los dispositivos PCI.
El siguiente es un ejemplo del contenido del archivio /proc/pci:
[sergio@hibernia ~]$ cat /proc/pci
PCI devices found:
Bus 0, device 0, function 0:
Class 0600: PCI device 10de:01a4 (rev 178).
Prefetchable 32 bit memory at 0xf8000000 [0xfbffffff].
Bus 0, device 0, function 1:
Class 0500: PCI device 10de:01ac (rev 178).
Bus 0, device 0, function 2:
Class 0500: PCI device 10de:01ad (rev 178).
Bus 0, device 0, function 3:
Class 0500: PCI device 10de:01aa (rev 178).
Bus 0, device 1, function 0:
Class 0601: PCI device 10de:01b2 (rev 195).
Bus 0, device 1, function 1:
Class 0c05: PCI device 10de:01b4 (rev 193).
IRQ 5.
Master Capable. No bursts. Min Gnt=3.Max Lat=1.
I/O at 0x5000 [0x500f].
I/O at 0x5500 [0x550f].
I/O at 0x5100 [0x511f].
Bus 0, device 2, function 0:
Class 0c03: PCI device 10de:01c2 (rev 195).
IRQ 22.
Master Capable. No bursts. Min Gnt=3.Max Lat=1.
Non-prefetchable 32 bit memory at 0xef000000 [0xef000fff].
Bus 0, device 3, function 0:
Class 0c03: PCI device 10de:01c2 (rev 195).
IRQ 22.
Master Capable. No bursts. Min Gnt=3.Max Lat=1.
Non-prefetchable 32 bit memory at 0xee800000 [0xee800fff].
Bus 0, device 4, function 0:
Class 0200: PCI device 10de:01c3 (rev 194).
IRQ 21.
Master Capable. No bursts. Min Gnt=1.Max Lat=20.
Non-prefetchable 32 bit memory at 0xee000000 [0xee0003ff].
I/O at 0xd800 [0xd807].
Bus 0, device 5, function 0:
Class 0401: PCI device 10de:01b0 (rev 194).
IRQ 5.
Master Capable. No bursts. Min Gnt=1.Max Lat=12.
Non-prefetchable 32 bit memory at 0xed800000 [0xed87ffff].
Bus 0, device 6, function 0:
Class 0401: PCI device 10de:01b1 (rev 194).
IRQ 20.
Master Capable. No bursts. Min Gnt=2.Max Lat=5.
I/O at 0xe100 [0xe1ff].
I/O at 0xe000 [0xe07f].
Non-prefetchable 32 bit memory at 0xed000000 [0xed000fff].
Bus 0, device 8, function 0:
Class 0604: PCI device 10de:01b8 (rev 194).
Bus 0, device 9, function 0:
Class 0101: PCI device 10de:01bc (rev 195).
Master Capable. No bursts. Min Gnt=3.Max Lat=1.
I/O at 0xa800 [0xa80f].
Bus 0, device 30, function 0:
Class 0604: PCI device 10de:01b7 (rev 178).
Master Capable. No bursts. Min Gnt=8.
Bus 1, device 7, function 0:
Class 0200: PCI device 10ec:8139 (rev 16).
IRQ 18.
Master Capable. Latency=64. Min Gnt=32.Max Lat=64.
I/O at 0xb800 [0xb8ff].
Non-prefetchable 32 bit memory at 0xec800000 [0xec8000ff].
Bus 2, device 0, function 0:
Class 0300: PCI device 10de:01a0 (rev 177).
IRQ 19.
Master Capable. Latency=248. Min Gnt=5.Max Lat=1.
Non-prefetchable 32 bit memory at 0xeb000000 [0xebffffff].
Prefetchable 32 bit memory at 0xf0000000 [0xf7ffffff].
lspci
Esta herramienta ayuda a interpretar de mejor el complejo contenido del archivo /proc/pci. Más información se puede descubrir usando la opción -v, que combina información del vendedor a partir de /usr/share/pci.ids . La opción -t muestra los datos en modo árbol por bus, dispositivo y función.
[sergio@hibernia ~]$ lspci -t -v
-[00]-+-00.0 nVidia Corporation nForce CPU bridge
+-00.1 nVidia Corporation nForce 220/420 Memory Controller
+-00.2 nVidia Corporation nForce 220/420 Memory Controller
+-00.3 nVidia Corporation: Unknown device 01aa
+-01.0 nVidia Corporation nForce ISA Bridge
+-01.1 nVidia Corporation nForce PCI System Management
+-02.0 nVidia Corporation nForce USB Controller
+-03.0 nVidia Corporation nForce USB Controller
+-04.0 nVidia Corporation nForce Ethernet Controller
+-05.0 nVidia Corporation nForce Audio
+-06.0 nVidia Corporation nForce Audio
+-08.0-[01]----07.0 Realtek Semiconductor Co., Ltd. RTL-8139/8139C/8139C+
+-09.0 nVidia Corporation nForce IDE
\-1e.0-[02]----00.0 nVidia Corporation NVCrush11 [GeForce2 MX Integrated Graphics]
Herramienta setserial
Definición de protocolo serie
Un protocolo serie es un protocolo que envía datos en un flujo ( a través de un canal de línea/medios). Puede haber otros flujos/líneas para controlar datos. En contraste a un protocolo paralelo, que envía los datos en múltiples flujos. La principal ventaja que un protocolo serie tiene sobre (lo cual permite cables más largos) y una velocidad de datos posible mas alta por cada flujo.
El comando sertserial, es útil para indicarle al kernel como manejar las interfaces series (es decir: configuración de IRQ's y velocidad en baudios), y se puede usar también para que haga un listado de todas las interfaces series activas.
Este comando puede usarse para configurar modems por hardware.
Por ejemplo el siguiente comando configura de acuerdo a terminados parámetros el segundo puerto serie (llamado COM2 en otros sistemas).
setserial /dev/ttyS1 uart 16550A port 0x02f8 irq 3 baud_base 115200 spd_normal skip_test
/dev/ttyS1
Corresponde al segundo puerto serie
uart 16650A
El tipo uart especificado (Un chip UART realiza la conversión de datos en paralelo a serie)
port 0x02f8
El número de puerto en hexadecimal
irq
El número de IRQ
baud_base 115200
Se trata de la velocidad de transmisión de datos.
spd_nomal
Usar la velocidad que pide la aplicación.
skip_test
Algunos modems internos baratos, fallan en la autodetección correcta de uart, se puede saltear la prueba.
Herramientas para detectar y configurar softmodems
Si bien los softmodems originalmente fueron diseñados para trabajar solamente con Microsoft Windows, varios fabricantes de hardware ofrecen drivers para Linux. Para muchas marcas y modelos de softmodems que no poseen drivers oficiales existen herramientas y drivers no oficiales que permiten configurar un dispositivo de este tipo. Una de las herramientas más importantes es scanmodem, se trata de un script que utiliza lspci para realizar un informe detallado sobre el softmodem del sistema. Este utilitario se encarga de reportar cuáles es el identificador PCI y/o el identificador de los controladores PCI Audio Codec '97 y MC97 y su subsistema. La parte central de los softmodems es fabricada por Silicon Labs: scanmodem también informa el identificador de la misma.
Los modems de bus ISA, PCMCIA de 16 bits y USB no son reconocidos por scanmodem
Bibliografía
http://linmodems.technion.ac.il/#scanmodem
Listado y carga de módulos del kernel
lsmod
lsmod es un utilitario que muestra un listado de los módulos actualmente cargados.
Un núcleo Linux puede tener módulos para drivers u otras funcionalidades. Para mantener el tamaño del kernel pequeño, los módulos se cargarán solamente cuando se especifique para a fin de que el núcleo no quede gigante.
Ejemplo
[root@hibernia sergio]# lsmod Module Size Used by md5 3584 1 ipv6 233984 6 joydev 8128 0 gameport 11112 0 snd_seq_dummy 2532 0 snd_seq_oss 31136 0 snd_seq_midi_event 5696 1 snd_seq_oss snd_seq 46960 5 snd_seq_dummy,snd_seq_oss,snd_seq_midi_event snd_seq_device 6828 3 snd_seq_dummy,snd_seq_oss,snd_seq snd_pcm_oss 48960 0 snd_mixer_oss 16896 1 snd_pcm_oss snd_intel8x0 28404 1 snd_ac97_codec 83900 1 snd_intel8x0 snd_pcm 79784 3 snd_pcm_oss,snd_intel8x0,snd_ac97_codec snd_timer 20548 2 snd_seq,snd_pcm snd_page_alloc 8392 2 snd_intel8x0,snd_pcm snd 46116 11 snd_seq_oss,snd_seq,snd_seq_device,snd_pcm_oss,snd_mixer_oss,snd_intel8x0, snd_ac97_codec,snd_pcm,snd_timer soundcore 7008 1 snd ipt_IFWLOG 2788 1 ipt_psd 43428 1 ip_set_iptree 5544 2 ipt_REJECT 4256 4 ipt_LOG 6272 7 ipt_state 1312 13 ipt_pkttype 1184 4 ipt_set 1920 2 ipt_CONNMARK 1696 0 ipt_MARK 1984 0 ipt_ROUTE 4260 0 ipt_connmark 1216 0 ipt_owner 2432 0 ipt_recent 9292 0 ipt_iprange 1312 0 ipt_physdev 1744 0 ipt_multiport 2112 0 ipt_conntrack 1792 0 iptable_mangle 2016 0 ip_set_portmap 3872 0 ip_set_macipmap 3780 0 ip_set_ipmap 3872 0 ip_set_iphash 5956 0 ip_set 18908 11 ip_set_iptree,ipt_set,ip_set_portmap,ip_set_macipmap,ip_set_ipmap,ip_set_iphash ip_nat_irc 1824 0 ip_nat_tftp 1216 0 ip_nat_ftp 2560 0 iptable_nat 20276 3 ip_nat_irc,ip_nat_tftp,ip_nat_ftp ip_conntrack_irc 70352 1 ip_nat_irc ip_conntrack_tftp 3088 1 ip_nat_tftp ip_conntrack_ftp 71408 1 ip_nat_ftp ip_conntrack 40856 9 ipt_state,ipt_conntrack,ip_nat_irc,ip_nat_tftp,ip_nat_ftp,iptable_nat, ip_conntrack_irc,ip_conntrack_tftp,ip_conntrack_ftp iptable_filter 2080 1 ip_tables 20384 20 ipt_IFWLOG,ipt_psd,ipt_REJECT,ipt_LOG,ipt_state,ipt_pkttype,ipt_set,ipt_CONNMARK, ipt_MARK,ipt_ROUTE,ipt_connmark,ipt_owner,ipt_recent,ipt_iprange,ipt_physdev,ipt_multiport,ipt_conntrack, iptable_mangle,iptable_nat,iptable_filter 8139too 21632 0 mii 4704 1 8139too forcedeth 16544 0 af_packet 16392 2 floppy 55444 0 video 14052 0 thermal 10792 0 tc1100_wmi 5092 0 processor 18268 1 thermal fan 3172 0 container 3008 0 button 4848 0 battery 7460 0 ac 3268 0 ide_cd 37988 0 loop 14504 0 ppdev 7364 0 parport_pc 32612 1 lp 10024 0 parport 31976 3 ppdev,parport_pc,lp nvidia_agp 5916 1 agpgart 29032 1 nvidia_agp dm_mod 51804 0 tsdev 5984 0 usbmouse 4160 0 usbhid 44544 0 usblp 10976 0 ohci_hcd 19172 0 usbcore 108476 5 usbmouse,usbhid,usblp,ohci_hcd evdev 7648 0 ext3 124840 5 jbd 48568 1 ext3
modprobe
modprobe es un comando que se emplea para:
- Cargar módulos en memoria (con o sin parámetros)
- Borra módulode de la memoria
- Mostrar el listado de módulos disponibles
Ejemplo: modprobe haciendo un listado de los módulos disponibles para dispositivos que usan tecnología infrarroja:
[root@hibernia sergio]# modprobe -t irda -l /lib/modules/2.6.12-22mdk/kernel/net/irda/irnet/irnet.ko.gz /lib/modules/2.6.12-22mdk/kernel/net/irda/irda.ko.gz /lib/modules/2.6.12-22mdk/kernel/net/irda/irlan/irlan.ko.gz /lib/modules/2.6.12-22mdk/kernel/net/irda/ircomm/ircomm.ko.gz /lib/modules/2.6.12-22mdk/kernel/net/irda/ircomm/ircomm-tty.ko.gz /lib/modules/2.6.12-22mdk/kernel/drivers/net/irda/vlsi_ir.ko.gz /lib/modules/2.6.12-22mdk/kernel/drivers/net/irda/via-ircc.ko.gz /lib/modules/2.6.12-22mdk/kernel/drivers/net/irda/w83977af_ir.ko.gz /lib/modules/2.6.12-22mdk/kernel/drivers/net/irda/stir4200.ko.gz /lib/modules/2.6.12-22mdk/kernel/drivers/net/irda/tekram-sir.ko.gz /lib/modules/2.6.12-22mdk/kernel/drivers/net/irda/sir-dev.ko.gz /lib/modules/2.6.12-22mdk/kernel/drivers/net/irda/smsc-ircc2.ko.gz /lib/modules/2.6.12-22mdk/kernel/drivers/net/irda/nsc-ircc.ko.gz /lib/modules/2.6.12-22mdk/kernel/drivers/net/irda/mcp2120-sir.ko.gz /lib/modules/2.6.12-22mdk/kernel/drivers/net/irda/ma600-sir.ko.gz /lib/modules/2.6.12-22mdk/kernel/drivers/net/irda/litelink-sir.ko.gz /lib/modules/2.6.12-22mdk/kernel/drivers/net/irda/irtty-sir.ko.gz /lib/modules/2.6.12-22mdk/kernel/drivers/net/irda/irport.ko.gz /lib/modules/2.6.12-22mdk/kernel/drivers/net/irda/irda-usb.ko.gz /lib/modules/2.6.12-22mdk/kernel/drivers/net/irda/girbil-sir.ko.gz /lib/modules/2.6.12-22mdk/kernel/drivers/net/irda/esi-sir.ko.gz /lib/modules/2.6.12-22mdk/kernel/drivers/net/irda/donauboe.ko.gz /lib/modules/2.6.12-22mdk/kernel/drivers/net/irda/ali-ircc.ko.gz /lib/modules/2.6.12-22mdk/kernel/drivers/net/irda/actisys-sir.ko.gz /lib/modules/2.6.12-22mdk/kernel/drivers/net/irda/act200l-sir.ko.gz /lib/modules/2.6.12-22mdk/kernel/drivers/net/irda/old_belkin-sir.ko.gz

