hci_send_cmd返回错误"操作不被允许"对于root用户

时间:2016-05-13 10:24:25

标签: ubuntu-14.04 bluez

我已经实现了BLE广告在Ubuntu 14.04.1上发送数据包的实用程序。当我从sudo命令行运行它时,它的工作非常完美。我想在系统启动时运行我的实用程序,因此我已将其调用添加到/etc/rc.local。重新启动后,我的实用程序失败,错误"错误hci_send_cmd:操作不允许" 代码:

static void set_adv_payload(int dev_num, void * _buf, int _len)
{
    struct hci_filter flt;
    int dd;
    uint16_t ocf;
    uint8_t ogf;
    int err;

    DBG("set_adv_payload buf[0]=%02X, len=%d", *(unsigned char*)_buf, _len);

    dd = hci_open_dev(dev_num);
    if (dd < 0) {
        DBG("Error hci_open_dev %d", dev_num);
        return ;
    }
    hci_filter_clear(&flt);
    hci_filter_set_ptype(HCI_EVENT_PKT, &flt);
    hci_filter_all_events(&flt);

    if (setsockopt(dd, SOL_HCI, HCI_FILTER, &flt, sizeof(flt)) < 0) {
        DBG("Error setsockopt");
        hci_close_dev(dd);
        return;
    }

    ogf = 0x8;
    ocf = 0x8;

    if(hci_send_cmd(dd, ogf, ocf, _len, _buf) < 0)
    {
        DBG("Error hci_send_cmd %s", strerror(errno));
    }

    hci_close_dev(dd);
}

我无法理解从命令行运行此代码与sudo和从/etc/rc.local运行之间的区别是什么,因为两者都以root权限运行。

user@dev-ws12-ubuntu:~$ ps -aux | grep leadv
root       979  0.0  0.0   4352   748 ?        S    17:11   0:00 /usr/sbin/leadv

0 个答案:

没有答案