bluetooth数据收发

本文深入解析了Linux内核中蓝牙数据的收发流程,从socket创建到 HCI 协议栈的交互,包括hci_sock_create、hci_sock_sendmsg、hci_sock_recvmsg等关键函数,涉及hci_sock_ops、hci_uart_send_frame、tty接收数据的处理等步骤,展示了蓝牙数据如何在内核及协议栈间传递。
摘要由CSDN通过智能技术生成

net/socket.c

SYSCALL_DEFINE3(socket, int, family, int, type, int, protocol)->sock_create()->__sock_create()->

pf = rcu_dereference(net_families[family]);

err = pf->create(net, sock, protocol, kern);

bt_init()->

err = sock_register(&bt_sock_family_ops);

static struct net_proto_family bt_sock_family_ops = {

.owner = THIS_MODULE,

.family = PF_BLUETOOTH,

.create = bt_sock_create,

};

bt_sock_create()->

err = bt_proto[proto]->create(net, sock, proto, kern);

bt_proto[proto]注册如下:

bt_init()->hci_sock_init()->bt_sock_register(BTPROTO_HCI, &hci_sock_family_ops)->

bt_proto[proto] = ops;

static const struct net_proto_family hci_sock_family_ops = {

.family = PF_BLUETOOTH,

.owner = THIS_MODULE,

.create = hci_sock_create,

};

hci_sock_create()->sock->ops = &hci_sock_ops

net/bluetooth/hci_sock.c

static const struct proto_ops hci_sock_ops = {

.family = PF_BLUETOOTH,

.owner = THIS_MODULE,

.release = hci_sock_release,

.bind = hci_sock_bind,

.getname = hci_sock_getname,

.sendmsg = hci_sock_sendmsg,

.recvmsg

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值