![]() ![]() ![]() ![]() ![]() ![]() ![]() ![]() |
Port del driver scc/ISA de Linux a PCIVer Información tarjeta torniquetes Thursday, 22 March 2012, 5:55:16 pm Driver scc_pci26 validado Ya se ha probado en campo y funciona correctamente :-). Monday, 12 March 2012, 8:32:36 pm Pruebas con el scc_pci26 en el pupitre con 2.6.32-bpo.5-686 Para cambiar las opciones del driver mientras se está ejecutando el cci2.x: ==CUT==cd /dev mknod scc2 c 34 2 echo 'D' > scc2 echo '1' > scc2 echo '0' > scc2 echo 'd' > scc2 echo 'D' > scc2 ==CUT=== Siendo: 'D' - activar las trazas 'd' - desactivar las trazas '1' - activar las pruebas de escritura (pone un timer para mandar mensajes de forma autónoma cada 1s) '0' - desactivar las pruebas de escritura (quita el timer) Las trazas aparecen en /var/log/debug, o bien se pueden consultar con un dmesg. Thursday, 13 January 2011, 1:16:37 pm Cambios en el port a linux2.6 Ahora la versión del núcleo que se va a usar es la "2.6.32-bpo.5-686". Se compila en chibiko: root@chibiko:/home/dario# mount /home/dario/Programacion root@chibiko:/home/dario# su - dario dario@chibiko:~$ cd ~/Programacion/proyectos/sico-scc_pci26 dario@chibiko:~/Programacion/proyectos/sico-scc_pci26$ make Tuesday, 2 November 2010, 11:19:03 am Port adicional de linux 2.2 a linux 2.6 Los fuentes están en: salchicha:/home/dario/Programacion/proyectos/sico-scc_pci26Se compilan en symbiandevel: root@symbiandevel:/home/dario# mount /home/dario/Programacion dario@symbiandevel:~# cd ~/Programacion/proyectos/sico-scc_pci26 dario@symbiandevel:~/Programacion/proyectos/sico-scc_pci26$ make Los recursos que estoy usando para el port son:
Para hacer el Makefile out-of-tree se han sguido los siguientes recursos:
Wednesday, 26 October 2005, 7:43:01 am PNPBIOS support con pcmcia-cs En este post y en este otro dicen lo siguiente:
Tuesday, 25 October 2005, 11:03:46 am Hex dumps de ESCD junto con explicaciónEn este post hay un hex-dump del ESCD con explicación, obtenida usando System Analyser V5.2 (Shareware), Hay un programa llamado lsescd que permite ver las asignaciones actuales. Se supone que a partir del 2.6.10 (aprox) también se puede ver usando /proc/bus/pnp. Además, la configuración de las tarjetas se puede cambiar con un programa del pcmcia_cs (separado a pnpbios-tools en debian/unstable): lspnp/setpnp. Monday, 24 October 2005, 9:54:49 am Más info sobre ACPI y PCI ROuting Tables Parece que ACPI es quien "depreca" a las PCI Routing Table (_PRT). Hay un "overview" del ACPI de Linux en el anuncio del port de ACPI de Linux a Syllabe. Monday, 24 October 2005, 7:42:20 am Utilidad relacionada: dmidecode Está en la web de lan: dmidecode.c. SIrve para interpretar los campos DMI (Desktop Management Interface) de la BIOS. Ver Salida de dmidecode en la Via Eden DP. Monday, 24 October 2005, 7:30:49 am Utilidades para guardar/cargar el ESCD en archivo En este post están las insttrucciones para el escd_dump (hay un link muerto: escd.tar.gz). Según parece, si se compila la opción de PNPBIOS, se puede acceder al PNP en /proc/bus/pnp/escd, pero según qué placa, funciona o no... (si no funciona se consigue un bonito reboot). Friday, 21 October 2005, 6:13:35 pm Más sobre cambiar interrupciones y ACPI Ver este artículo de lwn, más en google. Por otro lado, habría que estudiarse la documentación de acpi4linux. Friday, 21 October 2005, 12:28:36 pm Sigue habiendo problemas compartiendo la IRQ Además resulta que en la estación en la qu eestamos haciendo pruebas (vest2 de iglesia), no hay manera de que no compartan interrupción. He probado:
Con lo cual no parece haber manera sana de forzar que cambie de interrupción. or otro lado tampoco ha habido forma de hacer que use la eth1 en vez de la eth0 (en la oficina funciona, pero en el pupitre_sc de iglesia se queda sin ping al cambiarle el interfaz de red a usar y cambiar el cable de posición :-?). He visto que OpenSolaris tiene una función para reconfigurar la interrupciónd de un dispositivo PCI usando ACPI: uppc_acpi_irq_configure(). Sólo me falta saber si Linux tiene algo equivalente, ya que parece la única salida (le pondría la irq 5, que está libre). Update: Lo más cercano que he encontrado es en /usr/src/scc/linux-2.4.27/drivers/acpi/pci_irq.c, la función acpi_pci_irq_enable(), pero esa no la cambia, sólo la activa. Por cierto, eso se hace en la "PCI Interrupt Routing Table", la _PRT, que se cambia usando ACPI. En este parche incluso son capaces de cambiar la IRQ usando acpi_pci_set_current_irq :-o. Otra opción es usar IO-APIC, que sí permite programar qué interrupciones usa quién. Thursday, 20 October 2005, 6:12:54 pm Pruebas compartiendo la IRQ Este documento dice que no se debe usar SA_INTERRUPT a la vez que SA_SHIRQ. Merece la pena hacer la prueba... Friday, 14 October 2005, 12:23:20 am Primera versión del driver de SICO scc_pci Ya funciona lo siguiente en el scc pci.c:
Thursday, 13 October 2005, 7:05:20 am Documentación de Zilog Página de Zilog sobre el SCC/ESCC y la página específica del z85230. Thursday, 13 October 2005, 3:48:14 am Más información
Wednesday, 5 October 2005, 4:49:40 pm El CRC es CRC-CCITT Según este doc, el CRC generado por el SCC sólo puede ser CRC-16 o CRC-CCITT, y en las pruebas con INDRA ponían el analizador (DATASCOPE) a CCITT. Ese CRC es, según la documentación de Zilog, el CRC "nativo" de SDLC (es decir, el que no es CRC-16). Además, indican que el DPLL sirve para que el receptor pueda obtener la señal de reloj cuando se embebe usando FM0/FM1/NRZ/NRZI en SDLC (también lo mencionan aquí). Wednesday, 5 October 2005, 4:30:14 pm Información miscelánea sobre puertos serie La página Serial communications [drop.com/~cary] contiene una cantidad formidable de punteros a documentos de programación de puertos serie (tanto tipo PC (UART), como Mac/Atari (SCC) y otros: midi, usb, ieee1394...). Por desgracia, aunque los Mac usan SDLC sobre SCC para appletalk, lo usan con FM0 en vez de con NRZI (no podía ser perfecto). Tuesday, 27 September 2005, 1:06:54 pm Parece que hay un problema con el SDLC Resulta que usan el SDLC, pero en 422 y con sólo 4 hilos. Seguramente haya que configurar algo "raro" en la tarjeta para que embeba el reloj dentro de la transmisión. Tutoriales de SDLC: ¡Update! Resulta que si se usa NRZI, el reloj se embebe dentro de la transmisión, de manera que se sincroniza con los cambios de nivel de señal (ver 3-4 en el manual de Zilog). Es como sigue:
Thursday, 22 September 2005, 12:01:35 pm Sobre los cuelgues del driver en la oficina Resulta que es culpa de compartir interrupción (estaban compartiendo interrupción tanto el usb, como ña eth como el scc). Para hacer que la BIOS haga una asignación de interrupciones diferente hemos seguido las sufgerencias de un howto de estabilidad, que se resumen en resetear el ESCD:
NOTA: Antes era "irq9: usb, eth,scc ; irq11: usb"; ahora es "irq9: usb,scc ; irq11: usb, eth". Thursday, 22 September 2005, 11:56:56 am Pruebas en Indra Resulta que la tarjeta Sealevel 5103 sólo tiene rs-232. La tarjeta que soporta tb. 422/485 es la 5102 (la que habíamos elegido inicialmente :-/ ). Se ha pedido una tarjeta de la 5102 para ver si funciona con esa... Wednesday, 21 September 2005, 8:10:53 am Información de programación del SCC Afortunadamente, el SCC se usa en los Apple con AppleTalk. Así, hay documentación básica más fácil de comprender que los manuales de Zilog en los siguientes sitios (más): Wednesday, 21 September 2005, 8:09:19 am Hay un bug en el driver Después del primer write, un instante después de salir de la función de escritura (SCC_WRITE y dentro de ella, de sdlc_write), bloquea el ordenador. Wednesday, 14 September 2005, 5:35:06 pm Terminada la primera versión del port de indra que parece funcionar El código que tenemos hora mismo es:
Otras versiones que no se utilizan:
Thursday, 1 September 2005, 5:54 pm Más punteros de documentación de escritura de drivers Aunque en genral son para drivers de red, aplica la mayoría del texto:
Y no directamente relacionado, pero útil de todas formas:
Thursday, 1 September 2005, 9:14:56 am A vueltas con la inicialización Un problema posible es que la tarjeta esté en un modo ACPI que haga que no funcione (ver p.ej. el driver de la eepro100). Otro problema es la inicialización en sí de las regiones I/O. A continuación pongo un enlace que explica esto último: El uso de mdelay()/udelay() Está explicado en: Wednesday, 31 August 2005, 1:06:36 pm Pruebas sobre DOS Usando el programilla SCC.EXE (versión parametrizada de uno de los programillas de DOS de jemplo de Sealevel), y usando el pcispy/viewpci, sí que se accede a la tarjeta y la detecta correctamente como una ESCC. He aquí lo que hemos "averiguado" cuando se ejecutaba desde DOS5:
El programa ha reconocido la tarjeta como una 85230 al hacer: C:\> SCC 0xdfa0 11 Conclusión: la tarjeta funciona y las rutinas de inicialización del programa DOS son válidas. Tuesday, 30 August 2005, 5:46:29 pm Notas sobre programación del bus PCI bajo DOS
Lo más correcto parece ser utilizar llamadas a la PCI BIOS (1Ah). En el primero de los enlaces hay un programa en ASM (x86) que muestra cómo hacerlo. Tuesday, 19 July 2005, 10:10:11 am Ya tenemos el driver de Indra Lo recibimos ayer. Mirando los fuentes, es un fork de la versión z8530drv-1.9.dl1bke (disponible por ftp). Voy a mirar cuales son los cambios que han realizado... Monday, 4 July 2005, 7:06:19 pm Primera versión del driver scc.c Pero para que funcione hay que hacer un: mknod /dev/scc0 c 34 0 Monday, 4 July 2005, 12:31:55 pm Estado del port Usando la información de porting 2.0 to 2.2 he hecho las partes básicas para que no use cosas que ya no existen en 2.2. Por otro lado, para ver cómo se debe hacer el soporte PCI, está el driver /usr/src/scc/linux-2.2.26-scctty/drivers/char/cyclades.c (buscar pci_find_device). Thursday, 30 June 2005, 4:52:18 pm Arreglados los problemas de la red en la epia Resulta que según este mensaje y este otro mensaje, el via-rhine se consiguió estabilizar "muy tarde". O sea que me he bajado los drivers actualizados del repositorio de Donald Becker y lo he recompilado en salchicha:/usr/src/scc/rhine. Una vez puestos en la epia y regenerado el initrd ha funcionado a la perfección ;-). Eso significa que podemos usar finalmente una sarge (¡¡yiiiiipiee!!). Thursday, 30 June 2005, 8:16:15 am Problemas con la red Con el núcleo 2.2.26 me da el siguiente error por la parte de red: $ ping 3.0.1.170 PING 3.0.1.170 (3.0.1.170) 56 (84) bytes of data. Warning: no SO_TIMESTAMP support, falling back to SIOCGSTAMP Warning: kernel is not very fresh, upgrade is recommended. From 3.0.1.176: icmp_seq=2 Destination Host Unreachable From 3.0.1.176: icmp_seq=3 Destination Host Unreachable Thursday, 30 June 2005, 7:44:17 am Problemas al arrancar mi flamante nuevo núcleo 2.2.26 Me da lo siguiente: VFS: Mounted root (ext2 filesystem) readonly. Freeing unused kernel memory: 56k freed Warning: unable to open an initial console kernel panic: No init found. Try passing init= option to kernel. No arregla el anterior error el crear un initrd He cambiado el mkinitrd.conf tal y como indican en la manpage para que use genromfs en vez de mkcramfs (por no tener parcheado el núcleo 2.2.x para cramfs), y he generado un initrd para el núcleo con "mkinitrd -k -o /boot/initrd.img-2.2.26 -r /dev/hda1 2.2.26". Sin embargo igue dando exactamente el mismo error :-?. Update: ¡Arreglado! Según este howto eso es porque le falta el root=... y, efectivamente, era por eso O:-) (¡y yo que creía que lo había puesto!). Wednesday, 29 June 2005, 3:49:05 pm Problemas con el 2.0.x Resulta que me da un error al compilar el 2.0.40 en potato. A intentar usar el 2.2.x... Wednesday, 29 June 2005, 12:08:13 pm Cambios en el scc.c A base de ver diff de kernel.org partiendo desde el 2.4.27 y yendo para abajo, las versiones del kernel que han visto cambios en el scc.c son las siguientes: NOTA: Puedes ver las scripts para ver los cambios del scc en el kernel. Wednesday, 29 June 2005, 11:30:37 am Cosas, cosas, cosas... Resulta que el núcleo que usan los de Indra en los PCs del scc/ISA data de 1997, pero los fuentes del driver que hay en ese núcleo son de 1995 y el driver scc cambió completamente a finales de 1996; pasó de ser un driver tipo char a tipo net. Fuentes del driver "original" Los he puesto en salchicha:/usr/src/scc/linux-2.0.29/drivers/char/scc.c mientras que los modernos están en salchicha:/usr/src/scc/linux-2.4.27/drivers/net/hamradio/scc.c Wednesday, 29 June 2005, 10:08:43 am PC en metro con el SCC rodando Como ejemplo de la configuración actual que usa las placas ISA, se puede ver el siguiente PC en metro:
Descripción del proyectoSe trata de porder usar la tarjeta PCI de sealevel que tiene el chip Z8523008VSC (compatible ESCC, Z85230) con el driver de scc de linux (modificado para PCI). La idea es:
Información base:
Diferencias entre la tarjeta PCI y la ISA
Attachs5103.pdf scc.c+ scc pci.c+ |