现在的位置: 首页 > 综合 > 正文

linux2.6内核移植zc301摄像头时 kernel BUG at arch/arm/mm/dma-mapping.c:409!..的解决方法

2013年10月16日 ⁄ 综合 ⁄ 共 542字 ⁄ 字号 评论关闭

当插上一些在ARM上的摄像头,系统崩溃.这是因为我们分配缓冲一个URB通过usb_buffer_alloc,分配的缓冲区已经在DMA连贯的区域,因此,我们应该设置标志这个urb到URB_NO_TRANSFER_DMA_MAP,否则当我们提交这个urb,HCD核心处理这个地址作为非DMA地址和呼叫dma_map_single / SG映射。
在ARM架构上,dma_map_single连贯的一个DMA地址将被一个BUG_ON()截获。

 

修改内核'目录下drivers/media/video/gspca/gspca.c文件

 

static int alloc_and_submit_int_urb(struct gspca_dev *gspca_dev,   (在这个函数下边加上绿色部分)

usb_rcvintpipe(dev, ep->bEndpointAddress),
buffer, buffer_len,
int_irq, (void *)gspca_dev, interval);
urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;(加上这一行)
gspca_dev->int_urb = urb;
ret = usb_submit_urb(urb, GFP_KERNEL);
 

抱歉!评论已关闭.