En estos ultimos dos dias laborales ( viernes/lunes) tuve que realizar un driver para una tarjeta de entrada y salida digital: la OMG-PCI-DIO24 .
A pesar de que existe un modulo de kernel para esta tarjeta, no cumple con las especificaciones requeridas. Unicamente genera un conjunt de archivos en el /proc que leen/escriben directamente en los registros de la tarjeta. Esto podria ser "suficiente" si no se tratara de una tarea verdaderamente critica.
Es decir, necesitaba habilitar la interrupcion ( segun el manual de Usuario de la tarjeta, pin 47 ). Esto podria parecer sencillo/trivial. Pero resulto un poquitin mas engorroso de lo que pense.
Basicamente, el codigo existente unicamente sirvio para una cosa: Saber en que registro base ( BAR's ) se encuentra la direccion local asignada por el fabricanete para el inicio de la region de entrada y salida. Ya que en ningun manual se encuentra este dato.
Para entender un poco mejor el funcionamente del Bus PCI pueden leer : The PCI Interface del Linux Device Drivers, 2nd Edition By Alessandro Rubini & Jonathan Corbet El cual funciono perfecto para lo que estba tratando de entender. Tambien revise el buen: The Linux Kernel Development By Robert Love y por su puesto las hojas requeridas por Wikipedia, junto con los manuales de usuario presentados por Omega.
El codigo estoy depurandolo y agregando algunos #defines , para que quede lindo el modulo, mandarlo a la lista.. y pues esperar algun "feedback", mientras me quedan un par de comentarios:
En la Documentacion de Linux ( directo en el tarball ) , se encuentra el archivo pci.txt, El cual trata de dar una muy buena explicacion de como usar los recursos provistos por Linux. Sin embargo es un tanto ambiguo - o el par de horas que trabaje en esto no fueron suficientes -.
En cuanto al manejo de interrupcion, ya sea con pci_register_driver(), o bien con pci_get_device(), esta gobernado por Linux APCI. Lo cual en teoria deberia ser majestuoso, pero causa algunos conflictos al tratar de manejarlo. ( me gustaria en verdad aprender a hacerlo ) . Basicamente, como se vera en el codigo, obligue a ulizar el IRQ asignado fisicamente por la maquina, leyendo la linea de interrupcion asignada por BIOS pci_read_config_byte ( dev, PCI_INTERRUPT_LINE, &local_irq), y haciendo de este el irq pedido,
FTio_irq_handler,
SA_INTERRUPT | SA_SHIRQ,
DRV_NAME,
&device );
Las Interrucpiones compartidas, son un poco dolorosas y se necesita un control externo ( logica ) que pueda discernir entre las petciones por interrupcion. Esto tambien quiero depurarlo. Ya que a ciencia cierta, solo confio en la documentacion. ( falta por leer pci.c tal vez ) .
De ahi en fuera. Solo resta seguir aprendiendo en como manejar limpiamente estas entradas. En breve posteo el codigo. Algunos detalles tecnicos de como genrar el modulo ( es decir toda la platica de PCI ) , estara tambien en esta semana en el sitio de bitacora de LIDSOL.
Saludos!
zdjpiqfh
cheap levitra
zyloprim
cheap hydrocodone
order hydrocodone
ionamin
cheap vicodin
zoloft online
reductil
cheap viagra
lisinopril
buy levitra online
advil
purchase vicodin
lasix
order soma
glucophage
cheap fioricet
proscar
cheap soma
paroxetine
sonata
cheap xenical
buy fioricet
fluoxetine
advil
order viagra
generic plavix
alendronate
metformin
levaquin
sumatriptan
naprosyn
imovane
buy vicodin online
allopurinol
singulair
effexor
premarin
buy hoodia
nasacort
cheap adipex
buy alprazolam
prevacid
diazepam online
amoxicillin
allopurinol
prednisone
amoxil
escitalopram
zyloprim
buy carisoprodol online
venlafaxine
prozac online
lisinopril
levaquin
ativan
buy phentermine
partypoker bonus code
titan poker bonus code
Download Titan poker
Titanpoker
Titan poker
EverestPoker
debt settlement usa
Download Titan poker
debt settlement usa
titan poker bonus code
Leave a Comment
Friends
Ivan PompaEduardo Espina
Edgar Uriel Dominguez Espinoza
Victor Fragoso
Guillermo Romero Gallegos
Eduardo Ruiz Duarte
Raquel Hernandez
Carlos Sanchez
Gunnar Wolf
Mauro Parra
Mexico DF. Sunday 23 November 2008 con 7:00:35 :: 1227445235
Main
FileBrowser
![]() |
cherokee |
![]() |
Fun |
