@SiberiaBear
2015-11-19T09:33:28.000000Z
字数 2434
阅读 3444
Edison
固定链接:https://www.zybuluo.com/SiberiaBear/note/213383
当输入connmanctl enable bluetooth
时,显示:
Error bluetooth: Method "SetProperty" with signature "sv" on interface "net.connman.Technology" doesn't exist
同时还有:
No default controller available
说明并未找到蓝牙控制器,另外,经我一下午时间查网络资料,一个外国人也遇到了同样的问题:https://communities.intel.com/message/310187,当然,最后的解决办法是重新刷入镜像。
这个时候,我突然想起来我最初刷入镜像时并没有采用官方的方法,而是通过自己的一种方法写入的https://www.zybuluo.com/SiberiaBear/note/183349,难道这种方法会存在局限性吗?
我通过查看开机时输出到串口的启动日志,发现有一条错误:
[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/
在安装BlueZ协议栈时,首先从官方网站下载最新版本的BlueZ包:http://www.bluez.org,然后通过SCP传输到Edison中,当解压缩时,发现后缀是*.tar.xz
,第一次见这样的后缀,后来查网络后,通过tar -xJv -f *.tar.xz -C 解压缩目录
命令解压缩。
进入解压缩目录,进入bluez目录,着手编译:
- 当用./configure
命令时,出现
configure: error: libudev >= 172 is required
这样一条错误,后来查看该目录下的README文件,输入命令
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,按第二个帖子的意见:
root@edison:~/bluez/bluez-5.36# ./configure --disable-systemd --disable-udev
configure
命令通过!
注意,原帖上--disable_systemd
--disable_udev
不对,不是下划线,应该是中短横线。
找一个关于蓝牙的systemd服务文件:bluetooth.service
,按照文档中的提示,这个文件应该在/etc/systemd/system/bluetooth.target.wants/bluetooth.service
,但是我却没找到,在网上查了好多中文资料,都没有能解决问题,没办法,上谷歌查,第一条就是英特尔社区的帖子,虽然提问者问的并不是这个问题,但我自己找到了答案:
输入:
root@edison:~# systemctl status bluetooth -l
在打印出来的log中,就能找到我edison中所在的蓝牙服务文件:
Loaded: loaded (/lib/systemd/system/bluetooth.service; disabled)
所以,我的蓝牙服务文件在:/lib/systemd/system/bluetooth.service
,因为对这个systemd系统服务还是小白,所以先这样修改吧。
参考网址:https://communities.intel.com/message/278107
通过bluetoothctl
软件搜索scan on
时,提示:
[bluetooth]# scan on
Failed to start discovery: org.bluez.Error.NotReady
这个问题是人机接口层没有成功开启,输入:
root@edison:~# hciconfig
查看是否打开,是DOWN
还是UP RUNNING PSCAN
,如果是DOWN
,输入:
root@edison:~# hciconfig hci0 up
然后再次查看,发现已经变成了UP RUNNING PSCAN
,这次再搜索就正常了。