Говорит segmentation error :( вот кусок кода из пробы, где инициализируется SG и там же происходит вызов фунции передачи + код инициализации и usb передачи... HELP!!!
| Код | static struct scatterlist * alloc_sglist (int num_bufs, unsigned int size) { struct scatterlist *sg; unsigned i; sg = kmalloc (num_bufs * sizeof *sg, GFP_KERNEL); if (!sg) return NULL;
for (i = 0; i < num_bufs; i++) { char *buf;
buf = kmalloc (size, GFP_KERNEL); memset (buf, 155, size); if (!buf) { free_sglist (sg, i); return NULL; } memset (buf, 0, size);
/* kmalloc pages are always physically contiguous! */ sg_init_one(&sg[i], buf, size); } info ("Buffer S/G op. done"); return sg; } // передача static int perform_sglist ( struct usb_device *udev, unsigned iterations, int pipe, struct usb_sg_request req, struct scatterlist *sg, int nents ) { int retval = 0;
retval = usb_sg_init (&req, udev, pipe, 0, sg, nents, 1310720, GFP_KERNEL); if (retval) return -111; usb_sg_wait (&req); retval = req.bytes;
/* FIXME if endpoint halted, clear halt (and log) */
info(" retval = %d" ,retval); if (retval) dbg ("perform_sglist failed, iterations left %d, status %d", iterations, retval); return retval; } ///////////////////////// Кусок пробы... ... struct scatterlist *mem; struct usb_sg_request io; memset (&io, 0, sizeof(struct usb_sg_request)); mem = alloc_sglist(128, 10240); // num, size; //for (i = 0; i<150; i++){ if (!reg_w(dev,0xD0,1)) { info ("error in next frame"); } perform_sglist (dev->udev, 128, usb_rcvbulkpipe(dev->udev, 2), io, mem, 128); unsigned char *addr = kmap(mem); - и тут он ругаццо! info("%d", *addr); ...
|
|