Probleme de carte pcmcia RS232

Probleme de carte pcmcia RS232 - Hardware - Linux et OS Alternatifs

Marsh Posté le 24-11-2005 à 11:01:13    

Bonjour a tous !  :hello:  
 
Mon probleme de base est le suivant :
 
J'ai fait l'acquisition d'une carte pcmcia afin de rajouter une liaison serie RS232 a mon pc portable (qui n'en n'ont plus maintenant  :sweat: ).
J'arrive a la faire marcher, mais au detriment de l'usb, car a un moment le noyau detecte un probleme et desactive mon interruption 10, qui sert a la fois a l'usb et au module yenta_socket (port pcmcia).
 
Une fois mon PC fraichement demarré sans avoir mis ma carte RS232, voici ce que j'ai dans /proc/interrupts :
 
          CPU0
  0:    3463580          XT-PIC  timer
  1:      12129          XT-PIC  i8042
  2:          0          XT-PIC  cascade
  3:          2          XT-PIC  ehci_hcd
  4:       2981          XT-PIC  eth0
  5:       2977          XT-PIC  ohci1394, SiS SI7012
  8:          1          XT-PIC  rtc
  9:      26774          XT-PIC  acpi
 10:      20509          XT-PIC  ohci_hcd, ohci_hcd, yenta
 12:         58          XT-PIC  i8042
 14:       7940          XT-PIC  ide0
 15:         11          XT-PIC  ide1
NMI:          0
LOC:          0
ERR:         10
MIS:          0

 
Ensuite, j'insere ma carte pcmcia, et j'obtiens dans syslog :
 
Nov 24 10:24:27 localhost kernel: PCI: Enabling device 0000:02:00.0 (0000 -> 0003)
Nov 24 10:24:27 localhost kernel: ACPI: PCI interrupt 0000:02:00.0[A] -> GSI 10 (level, low) -> IRQ 10
Nov 24 10:24:28 localhost pci.agent[3609]: ... no modules for PCI slot 0000:02:00.0

 
Aucun module driver n'a été trouvé, mais ce n'est pas grave car le kernel est directement capable de gerer le chip de la carte, qui est un "OXCB950 Cardbus 16950 UART".
 
Un lspci -vv me donne au niveau de la carte :
 
02:00.0 Serial controller: Oxford Semiconductor Ltd OXCB950 Cardbus 16950 UART (prog-if 06 [16950])
        Subsystem: Oxford Semiconductor Ltd: Unknown device 0001
        Control: I/O+ Mem+ BusMaster- SpecCycle- MemWINV- VGASnoop- ParErr- Stepping- SERR- FastB2B-
        Status: Cap+ 66Mhz- UDF- FastB2B+ ParErr- DEVSEL=medium >TAbort- <TAbort- <MAbort- >SERR- <PERR-
        Interrupt: pin A routed to IRQ 10
        Region 0: I/O ports at 2010 [size=8]
        Region 1: Memory at ec100000 (32-bit, non-prefetchable) [size=4K]
        Region 2: I/O ports at 2000 [size=16]
        Region 3: Memory at ec101000 (32-bit, non-prefetchable) [size=4K]
        Region 4: Memory at ec102000 (32-bit, non-prefetchable) [size=4K]
        Capabilities: [40] Power Management version 1
                Flags: PMEClk- DSI- D1- D2+ AuxCurrent=0mA PME(D0+,D1-,D2+,D3hot+,D3cold-)
                Status: D0 PME-Enable- DSel=0 DScale=0 PME-

 
Pour faire marcher la carte, j'utilise la commande setserial, qui doit sans doute indiquer au kernel comment gerer les /dev/ttySx.
 
Je tape setserial /dev/ttyS0 pour voir la config actuelle :
 
/dev/ttyS0, UART: unknown, Port: 0x03f8, IRQ: 4
 
Y'a rien, normal, y'a pas de port serie sur mon PC  :sweat:  
 
Donc grace aux données fournies par lspci, je configure le port serie :
 
setserial /dev/ttyS0 port 0x2010 irq 10 autoconfig baud_base 1000000
 
Je verifie ce que la commande a donné : setserial /dev/ttyS0 :
 
/dev/ttyS0, UART: 16950/954, Port: 0x2010, IRQ: 10
 
Cool ! Le kernel a reconnu l'uart, c'est bien un 16950 !
 
A ce stade, ma souris USB fonctionne toujours bien.
Ensuite j'essaye le port serie en lancant minicom, qui par defaut utilise /dev/ttyS0.
La carte serie ne marche pas, pas moyen de sortir le moindre octet. Par contre l'USB marche toujours.
 
Alors j'ai essayé avec setserial de changer les interruptions, et je constate qu'en faisant :
 
setserial /dev/ttyS0 port 0x2010 irq 0 autoconfig baud_base 1000000
 
Pour l'instant, tout marche encore, j'ai ma souris USB, pas de souci.
Je lance alors minicom, et là, le port serie fonctionne !! Je recois et envois des octets, ca tourne nickel.
Par contre, j'obtiens le message suivant dans syslog, et ma souris USB ne marche plus :
 
Nov 24 10:43:32 localhost kernel: irq 10: nobody cared!
Nov 24 10:43:32 localhost kernel:  [<c0106ce2>] __report_bad_irq+0x22/0x90
Nov 24 10:43:32 localhost kernel:  [<c0106dbc>] note_interrupt+0x4c/0x70
Nov 24 10:43:32 localhost kernel:  [<c0106fb0>] do_IRQ+0xe0/0xf0
Nov 24 10:43:32 localhost kernel:  [<c01057b8>] common_interrupt+0x18/0x20
Nov 24 10:43:32 localhost kernel:  [<c011e09a>] __do_softirq+0x2a/0x80
Nov 24 10:43:32 localhost kernel:  [<c011e115>] do_softirq+0x25/0x30
Nov 24 10:43:32 localhost kernel:  [<c0106f9f>] do_IRQ+0xcf/0xf0
Nov 24 10:43:32 localhost kernel:  [<c01057b8>] common_interrupt+0x18/0x20
Nov 24 10:43:32 localhost kernel:  [<c02bdab1>] uart_start+0x11/0x20
Nov 24 10:43:32 localhost kernel:  [<c02bdf93>] uart_write+0x73/0x210
Nov 24 10:43:32 localhost kernel:  [<c0269f0f>] inode_has_perm+0x4f/0x80
Nov 24 10:43:32 localhost kernel:  [<c02b0818>] write_chan+0x178/0x210
Nov 24 10:43:32 localhost kernel:  [<c0117e70>] default_wake_function+0x0/0x20
Nov 24 10:43:32 localhost kernel:  [<c0117e70>] default_wake_function+0x0/0x20
Nov 24 10:43:32 localhost kernel:  [<c02ac088>] tty_write+0x158/0x1d0
Nov 24 10:43:32 localhost kernel:  [<c02b06a0>] write_chan+0x0/0x210
Nov 24 10:43:32 localhost kernel:  [<c014cebd>] vfs_write+0x9d/0x100
Nov 24 10:43:32 localhost kernel:  [<c04818a1>] schedule_timeout+0x61/0xb0
Nov 24 10:43:32 localhost kernel:  [<c014cfcd>] sys_write+0x3d/0x70
Nov 24 10:43:32 localhost kernel:  [<c0104df7>] sysenter_past_esp+0x58/0x79
Nov 24 10:43:32 localhost kernel: handlers:
Nov 24 10:43:32 localhost kernel: [<eea67b00>] (usb_hcd_irq+0x0/0x60 [usbcore])
Nov 24 10:43:32 localhost kernel: [<eea67b00>] (usb_hcd_irq+0x0/0x60 [usbcore])
Nov 24 10:43:32 localhost kernel: [<eebc8850>] (yenta_interrupt+0x0/0x30 [yenta_socket])
Nov 24 10:43:32 localhost kernel: Disabling IRQ #10

 
Il semble que la carte genere des interruptions 10, mais le noyau detecte qu'elles ne sont pas gérées, et donc il devalide l'irq, stoppant net le fonctionnement de l'usb.
Par contre, le port serie fonctionne bien alors qu'avec setserial j'ai demandé d'utiliser l'IRQ 0  :heink:  
 
Vous avez une idée de comment je pourrais remedier a tout ca ? C'est a dire faire marcher ma carte serie sans perdre l'usb ?
Par ce qu'il faut savoir qu'apres ces manips, et avoir travaillé normalement toute une journée, j'ai deja rencontré des problemes a l'extinction du PC, un freeze total qui m'oblige a couper le PC a l'arrache. Et ca j'aime pas trop !  :cry:  :cry:  
 
Si vous avez des idées, merci d'avance !
 
Cyril


Message édité par nlc le 01-12-2005 à 19:04:24

---------------
char table[] = {112,114,105,110,116,102,40,34,37,99,37,99,37,99,34,44,49,49,48,44,49,48,56,44,57,57,41,59,0}; char* tablePtr = table; while(*tablePtr) printf( "%c",*tablePtr++ );
Reply

Marsh Posté le 24-11-2005 à 11:01:13   

Reply

Marsh Posté le 01-12-2005 à 19:03:34    

[:atreyu]
 
Je change aussi le titre, il attire pas les foules !


---------------
char table[] = {112,114,105,110,116,102,40,34,37,99,37,99,37,99,34,44,49,49,48,44,49,48,56,44,57,57,41,59,0}; char* tablePtr = table; while(*tablePtr) printf( "%c",*tablePtr++ );
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed