友善之臂目前基于4412的板子都不支持蓝牙,但蓝牙是很通用、很重要的一个功能。
我这两天着手解决这个问题,刚开始以为是Linux内核没有将蓝牙功能编译进去,但是最终发现其实该编译的都已经编译,让我有点失落,事情变复杂了。
运行BlueZ的hciconfig工具,出现如下提示:
Can't open HCI socket.: Address family not supported by protocol.
这个提示说明,蓝牙相关的socket family(PF_BLUETOOTH)没有注册。
相关的注册应该是在net/bluetooth/af_bluetooth.c中的bt_init进行的,相关代码如下:
复制代码-
- static struct net_proto_family bt_sock_family_ops = {
- .owner = THIS_MODULE,
- .family = PF_BLUETOOTH,
- .create = bt_sock_create,
- };
- static int __init bt_init(void)
- {
- int err;
- BT_INFO("Core ver %s", VERSION);
- err = bt_sysfs_init();
- if (err < 0)
- return err;
- err = sock_register(&bt_sock_family_ops);
- if (err < 0) {
- bt_sysfs_cleanup();
- return err;
- }
- ...
- subsys_initcall(bt_init);
|
经过调试,发现bt_init根本没有被调用,但是bt_init应该在内核初始化的时候就被调用的。这样的问题,我一时也就无法解决了。
不知道大家有没有发现并解决这个问题,也请友善的工程师能给予帮助。