[关闭]
@SiberiaBear 2015-11-19T01:33:28.000000Z 字数 2434 阅读 3320

在Edison调试蓝牙时的遇到的问题

Edison

固定链接https://www.zybuluo.com/SiberiaBear/note/213383

1.

当输入connmanctl enable bluetooth时,显示:

  1. Error bluetooth: Method "SetProperty" with signature "sv" on interface "net.connman.Technology" doesn't exist

同时还有:

  1. No default controller available

说明并未找到蓝牙控制器,另外,经我一下午时间查网络资料,一个外国人也遇到了同样的问题:https://communities.intel.com/message/310187,当然,最后的解决办法是重新刷入镜像。
这个时候,我突然想起来我最初刷入镜像时并没有采用官方的方法,而是通过自己的一种方法写入的https://www.zybuluo.com/SiberiaBear/note/183349,难道这种方法会存在局限性吗?
我通过查看开机时输出到串口的启动日志,发现有一条错误:

  1. [Failed]: Failed to start Load Kernel Modules. See 'systemctl status systemd_modules_load.service' for details.

于是我按它的提示,输入这个命令systemctl status systemd_modules_load.service,得到如下输出:
此处输入图片的描述
这个问题应该是说我缺少某个模块,bcm..,我比较兴奋,这不正是蓝牙芯片吗。按要求,我加了-l参数再次输出:
此处输入图片的描述
好吧,就是把单行无法显示的文本全部换行显示出来了。看样子,我缺少的是bcm_bt_lpm,或者说该文件无法插入,于是导致无法加载内核模块,bcm4334x可用,所以WIFI问题不大,bcm_bt_lpm字面意思很明显是蓝牙,故蓝牙出了问题。
最后,请允许我猜想,应该是最初刷入镜像时没有完全成功,丢失了蓝牙的部分文件,如何补救这部分文件我还是没有找到答案,能力不足,看样子先重新刷镜像吧,将来回头再处理这个问题。

参考的文章:
“How to install a kernel from my repo onto Edison with the official image”: http://alextgalileo.altervista.org/blog/install-kernel-from-repo-onto-edison-official-image/

2.

在安装BlueZ协议栈时,首先从官方网站下载最新版本的BlueZ包:http://www.bluez.org,然后通过SCP传输到Edison中,当解压缩时,发现后缀是*.tar.xz,第一次见这样的后缀,后来查网络后,通过tar -xJv -f *.tar.xz -C 解压缩目录命令解压缩。

进入解压缩目录,进入bluez目录,着手编译:
- 当用./configure命令时,出现

  1. configure: error: libudev >= 172 is required

这样一条错误,后来查看该目录下的README文件,输入命令

  1. root@edison:~/bluez/bluez-5.36# ./configure --perfix=/usr --mandir=/usr/share/man --sysconfdir=/etc --localstatedir=/var

发现依然存在这个问题。接着上网查,找到一篇英特尔官方社区的一个帖子:https://communities.intel.com/thread/60485,通过这个帖子中的回复又找到了另外一个帖子:https://communities.intel.com/thread/60547,按第二个帖子的意见:

  1. root@edison:~/bluez/bluez-5.36# ./configure --disable-systemd --disable-udev

configure命令通过!
注意,原帖上--disable_systemd --disable_udev不对,不是下划线,应该是中短横线。

3.

找一个关于蓝牙的systemd服务文件:bluetooth.service,按照文档中的提示,这个文件应该在/etc/systemd/system/bluetooth.target.wants/bluetooth.service,但是我却没找到,在网上查了好多中文资料,都没有能解决问题,没办法,上谷歌查,第一条就是英特尔社区的帖子,虽然提问者问的并不是这个问题,但我自己找到了答案:
输入:

  1. root@edison:~# systemctl status bluetooth -l

在打印出来的log中,就能找到我edison中所在的蓝牙服务文件:

  1. Loaded: loaded (/lib/systemd/system/bluetooth.service; disabled)

所以,我的蓝牙服务文件在:/lib/systemd/system/bluetooth.service,因为对这个systemd系统服务还是小白,所以先这样修改吧。

参考网址:https://communities.intel.com/message/278107

4.

通过bluetoothctl软件搜索scan on时,提示:

  1. [bluetooth]# scan on
  2. Failed to start discovery: org.bluez.Error.NotReady

这个问题是人机接口层没有成功开启,输入:

  1. root@edison:~# hciconfig

查看是否打开,是DOWN还是UP RUNNING PSCAN,如果是DOWN,输入:

  1. root@edison:~# hciconfig hci0 up

然后再次查看,发现已经变成了UP RUNNING PSCAN,这次再搜索就正常了。

添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注