[C] Geen callback na usb_submit_urb

Pagina: 1
Acties:

  • eppie
  • Registratie: Maart 2000
  • Niet online
(overleden)
Hallo,

Ik ben bezig met het schrijven van een linux usb driver en zit met een probleempje waar ik niet uit kom en ook niets over kan vinden.

C:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
    usb_fill_bulk_urb(dev->rx_urb, dev->udev, 
          pipe,
          dev->rx_buff, sizeof(dev->rx_buff),
          bulk_callback, dev);

    if ((retval = usb_submit_urb(dev->rx_urb,GFP_KERNEL))) {
        warn("AES3500.c -> rx_urb submit failed: %d", retval);
        retval = -EIO;
        dev->present = 1;
       // dev->isopen = 1;
        file->private_data = NULL;
        return retval;
    }else
    {
        info("AES3500.c -> urb rx_urb is goed gesubmit! : %d",retval);
    }
    //kref_get(&dev->kref);
    
    return retval;
}

static void bulk_callback(struct urb *urb, struct pt_regs *regs)
{

    info("AES3500.c -> bulk_callback");
    info("AES3500.c -> nonzero read/write bulk status received: %d", urb->status);
    
}


Ik heb alleen de relevante code hier geplaatst.

Het probleem is dat de urb wel goed gesubmit wordt want ik krijg wel in me dmesg gewoon " urb rx_urb is goed gesubmit!" maar die callback methode die na een goede submit uitgevoerd zou moeten worden door de usb core blijft achterwege. Geen fout melding helemaal niets. :(

Terwijl hij toch wel degelijk uitgevoerd moet worden omdat de submit wel goed gegaan is.

Hoe kan dit?

Alvast bedankt!

  • joopst
  • Registratie: Maart 2005
  • Laatst online: 01-10-2024
je geef 'bulk_callback' als parameter mee, maar in de implementatie van de functie 'usb_fill_bulk_urb' roep je die nergens aan.

misschien moet je bij 'success' nog die 'bulk_callback' aanroepen.

  • igmar
  • Registratie: April 2000
  • Laatst online: 20-04 22:06

igmar

ISO20022

eppie schreef op zondag 04 december 2005 @ 15:02:
Het probleem is dat de urb wel goed gesubmit wordt want ik krijg wel in me dmesg gewoon " urb rx_urb is goed gesubmit!" maar die callback methode die na een goede submit uitgevoerd zou moeten worden door de usb core blijft achterwege. Geen fout melding helemaal niets. :(
De callback wordt uitgevoerd nadat je request is uitgevoerd door de core en de host driver. Dat je iets submit wil niet zeggen dat het het ook daadwerkelijk wordt uitgevoerd. Heb je de USB_DEBUG kernel opties aanstaan, en zo ja, wat komt daar uit ?

  • eppie
  • Registratie: Maart 2000
  • Niet online
(overleden)
Ik heb USB_DEBUG wel aanstaan maar zie daar niets bijzonders gezien.
code:
1
2
3
4
5
6
7
481073.532000]  <6>/root/driver/v0.6/AES3400.c: AES3400.c -> usb_AES3400_open
[17481103.092000] /root/driver/v0.6/AES3400.c: AES3500.c -> Minor: 17
[17481103.092000] /root/driver/v0.6/AES3400.c: Trying....
[17481103.092000] /root/driver/v0.6/AES3400.c: AES3400.c -> retval: 0
[17481103.092000] /root/driver/v0.6/AES3400.c: AES3400.c -> get_registers
[17481103.092000] /root/driver/v0.6/AES3400.c: AES3400.c -> usb_bulk
[17481103.092000] /root/driver/v0.6/AES3400.c: AES3400.c -> retval: -692793680


Dit krijg ik :(

  • eppie
  • Registratie: Maart 2000
  • Niet online
(overleden)
igmar schreef op maandag 05 december 2005 @ 10:14:
[...]


De callback wordt uitgevoerd nadat je request is uitgevoerd door de core en de host driver. Dat je iets submit wil niet zeggen dat het het ook daadwerkelijk wordt uitgevoerd. Heb je de USB_DEBUG kernel opties aanstaan, en zo ja, wat komt daar uit ?
code:
1
if ((retval = usb_submit_urb(dev->rx_urb,GFP_KERNEL))) {

Hier krijg ik wel een 0 terug van dat het goedgegaan is. Hoe zou ik dan moeten kunnen zien dat het echt goedgegaan is? Aangezien in syslog en dmesg niets bijzonders te zien is en ik wel alle debug zooi in de kernel heb gebakken. :(

  • TaXaN
  • Registratie: April 2001
  • Laatst online: 08-09-2023
Debuggen met kgdb?

A polar bear is a rectangular bear after a coordinate transformation.

Pagina: 1