USB蓝牙配合DesignWare USB 2.0 OTG Controller使用时4字节对齐问题

DWC_otg驱动要求DMA地址4字节对齐


但是在蓝牙的usb驱动中

节选自linux/net/bluetooth/hci_sock.c文件中的hci_sock_sendmsg函数

	if (!test_bit(HCI_UP, &hdev->flags)) {
		err = -ENETDOWN;
		goto done;
	}

	skb = bt_skb_send_alloc(sk, len, msg->msg_flags & MSG_DONTWAIT, &err);
	if (!skb)
		goto done;

	if (memcpy_fromiovec(skb_put(skb, len), msg->msg_iov, len)) {
		err = -EFAULT;
		goto drop;
	}

	bt_cb(skb)->pkt_type = *((unsigned char *) skb->data);
	skb_pull(skb, 1);

注意在bt_skb_send_alloc函数分配skb->data的时候预留了8个字节

此时skb->data还是4字节对齐的

但是随后内核中使用skb_pull(skb, 1);向后移动了一个字节

所以skb->data一定不是4字节对齐了

通过urb传递到控制器驱动的时候出错


在bt_skb_send_alloc完成后再使用skb_reserve(skb, 3);增加3个字节预留

这样随后skb_pull(skb, 1);便可以保证skb->data仍然是4字节对齐了


	if (!test_bit(HCI_UP, &hdev->
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值