【问题标题】:hcitool lescan shows I/O errorhcitool lescan 显示 I/O 错误
【发布时间】:2014-03-30 11:59:57
【问题描述】:

我正在尝试在树莓派上使用 hcitool 进行 lescan。

命令打印出来

Set scan parameters failed: Input/output error. 

我不确定,这里到底发生了什么。我的 iPhone 在这里打广告。

我正在使用 IOGear 的 BLE 加密狗。

但是,如果我重新启动我的机器,它会在我发出 lescan 命令后显示 MAC 地址,并在我多次发出 lescan 命令后开始显示相同的错误。是不是 lescan 命令不能多次发出?

【问题讨论】:

  • 尝试将其拔下并重新插入。加密狗可以通过各种方式进入无法按照您想要的方式响应的状态。不过,IOGear 似乎是最好的。
  • @aauser - 你解决过这个问题吗?我遇到了同样的问题。
  • @aauser - 我应该提到我在 64 位 Linux Mint 16 (Petra) 上使用 D-Link DBT-120。
  • BlueZ BLE 扫描似乎仍然有很多问题。但是,此线程可能会有所帮助:redbearlab.zendesk.com/entries/…
  • 另外,您的内核和 BlueZ 版本是什么?该线程的末尾提到了内核 3.5 或更高版本。 linkedin.com/groups/…

标签: raspberry-pi bluetooth-lowenergy bluez


【解决方案1】:

这在我身上经常发生。我正在开发它,它只是不时发生。我还能够在 5 分钟内重现您的错误;-) 我正在运行 bluez v.5.17。 但是我可以多次运行 lescan 而不会出现此错误。

hcitool lescan
Set scan parameters failed: Input/output error

尝试:

hciconfig hci0 down
hciconfig hci0 up

然后检查状态。

如果这不起作用或挂在 DOWN 状态,请尝试:

service bluetooth restart
service dbus restart

(所有命令作为超级用户)

并关闭所有可能访问蓝牙的应用程序。例如 hcidump。

如果这不起作用,您通常必须拔下它。但是还有另一个肮脏的技巧可以做到这一点。它通过将授权设置为 0 并再次设置为 1 来工作。这会强制 USB 加密狗初始化。

lsusb
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 002: ID 0424:9512 Standard Microsystems Corp. 
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. 
Bus 001 Device 004: ID 0a5c:21e8 Broadcom Corp. 


cd /sys/bus/usb/devices/

grep -i -s -r 0a5c *
…
1-1.2/idVendor:0a5c
…

cd 1-1.2

echo 0 > authorized
echo 1 > authorized

【讨论】:

  • 还有sudo hciconfig hci0 reset
  • 在当前版本 bluez 5.35 中。我没有问题了。
  • hciconfig hci0 down 然后up 为我工作,谢谢。
  • service dbus restart 崩溃 kali
【解决方案2】:

升级到 bluez v5.43 为我解决了这个问题。

要升级到最新的 bluez,您需要进行“手动”安装(not apt-get),从 the bluez website 下载。如果您是新安装软件包或需要帮助,我推荐this video walkthrough

安装最新的 bluez 后,我必须运行几个命令才能正常工作。

  1. systemctl daemon-reload :重新启动系统守护程序。

  2. sudo service bluetooth restart:重启蓝牙服务。

  3. sudo hciconfig hci0 up:这是我的 Raspberry Pi 3 所需要的,内置 BT 位于 hci0

在这些命令之后,sudo hcitool lescan 及其变体似乎都可以工作。

【讨论】:

    【解决方案3】:

    hcitool 出现了同样的错误,而 bluetoothctl 工作得很好。然后我遇到了这个article stating that all "tools using raw socket shall be considered deprecated"(hcitool、hcicfg 等)。

    所以也许只需打开bluetoothctl 并发出scan on 命令。

    【讨论】:

    • 问题是关于 BLE 扫描。 scan on 不启动 BLE 扫描。
    • @jbg 扫描在 Debian 9 + Nordic BLE 芯片组上使用 bluetoothctl 对我来说效果很好。如果没有,就不会发布。
    【解决方案4】:

    sudo service bluetooth restart 在 Raspibian Buster 上帮助我。

    如果sudo hcitool lescan 中出现Set scan parameters failed: Input/output error. 错误。

    但是又是随机出现,所以有些系统库可能有问题。

    【讨论】:

    • 在解决了这个问题之后,我禁用了内部 Raspberry 蓝牙并购买了支持 BLE 的 USB 蓝牙加密狗。 (型号:CONNECT IT BT403)。 USB 蓝牙可以完美运行一周,没有任何问题。
    【解决方案5】:

    我删除了 Bluez,然后我又重新安装了它,它对我有用:

    sudo apt remove --purge bluez bluez-* -y
    
    
    apt install bluez
    

    然后

    hcitool lescan 
    

    应该够了。

    【讨论】:

      【解决方案6】:

      对于那些现在发现这个问题的人,它已从 Bluez v5.41 开始修复。您需要做的就是下载和安装。您可以从http://www.bluez.org/download/下载最新版本。

      【讨论】:

        【解决方案7】:

        HCI 当前可能正在使用中。就我而言,我必须停止 Node-Red 并且它可以工作。所以请注意,HCI 未在使用中。

        重启HCI是一种暂时解决问题的方法,但并不能正确解决问题。

        【讨论】:

          【解决方案8】:

          我使用的是 5.53 版 我有两个蓝牙设备(hic0 和 hic1) 我尝试了各种方法来重置设备... 唯一可行的方法是从物理上拔下并重新插入 hic1 加密狗。 这个是支持ble的。然后它工作,直到我重新启动。 我真的希望有一种纯软件解决方案来做到这一点。

          【讨论】:

            【解决方案9】:

            但对我有用的是在我的 Ubuntu 上打开蓝牙设置并手动删除未使用的设备。 lescan 立即开始工作。

            【讨论】:

              【解决方案10】:
              sudo hcitool lescan
              

              只需使用 sudo & 即可扫描

              【讨论】:

              • TinkerForge 和 BlueZ 5.44 对我有用 :) 谢谢
              • 缺少sudo时,错误是“Operation not allowed”,而不是输入/输出错误
              猜你喜欢
              • 2016-06-24
              • 2017-04-17
              • 2015-01-08
              • 2021-03-26
              • 1970-01-01
              • 2017-09-08
              • 2014-10-26
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多