linux libusb应用实例,在Linux中使用libusb-1.0作为非root用户访问USB设备
我試圖在RHEL5上作為非root用戶與USB設(shè)備連接.該設(shè)備是一個GPIO接口(其文檔可在
http://www.xdimax.com/sub20/sub20.html找到),它使用libusb-1.0.使用其API打開設(shè)備的過程是:
sub_device d;
d = sub_find_devices(0);
sub_handle h = sub_open(d);
當我這樣做時,sub_find_devices()調(diào)用工作,但在sub_open()調(diào)用,我得到libusb錯誤-3,這表明我沒有權(quán)限打開設(shè)備進行寫入.
我對這個問題進行了一些研究,發(fā)現(xiàn)我應(yīng)該創(chuàng)建一個udev規(guī)則.在設(shè)備的sysfs節(jié)點上使用udevinfo,我得到了:
looking at device '/devices/pci0000:00/0000:00:1d.0/usb2/2-1/2-1.2':
KERNEL=="2-1.2"
SUBSYSTEM=="usb"
SYSFS{configuration}==""
SYSFS{serial}=="15F2"
SYSFS{product}=="SUB-20"
SYSFS{manufacturer}=="XDIMAX"
SYSFS{maxchild}=="0"
SYSFS{version}==" 1.10"
SYSFS{devnum}=="6"
SYSFS{speed}=="12"
SYSFS{bMaxPacketSize0}=="64"
SYSFS{bNumConfigurations}=="1"
SYSFS{bDeviceProtocol}=="00"
SYSFS{bDeviceSubClass}=="00"
SYSFS{bDeviceClass}=="ff"
SYSFS{bcdDevice}=="0001"
SYSFS{idProduct}=="ffc3"
SYSFS{idVendor}=="04d8"
SYSFS{bMaxPower}=="100mA"
SYSFS{bmAttributes}=="80"
SYSFS{bConfigurationValue}=="1"
SYSFS{bNumInterfaces}==" 1"
然后我在/etc/udev/rules.d/991-local.rules文件中創(chuàng)建了以下udev規(guī)則:
SYSFS{idVendor}=="04d8", SYSFS{idProduct}=="ffc3", NAME="sub20", GROUP="582", MODE="0660"
582是我的普通用戶所屬的組的GID.我也嘗試了組名稱的規(guī)則,但它沒有用.創(chuàng)建此規(guī)則后,將使用正確的權(quán)限創(chuàng)建設(shè)備文件/ dev / sub20,但僅在插入設(shè)備時才存在,這使我有理由相信udev規(guī)則在正確的設(shè)備上匹配.但是,我的代碼仍然會出錯-3.
對代碼進行分析后發(fā)現(xiàn)了這個問題:
open("/dev/bus/usb/002/006", O_RDWR) = -1 EACCES (Permission denied)
/ dev / bus / usb …節(jié)點上的權(quán)限仍然是root:root,所以這可能表明我的udev規(guī)則存在問題,盡管我不知道那可能是什么.
如果我嘗試打開調(diào)用(“/ dev / sub20”,O_RDWR),我得到返回值ENXIO(沒有這樣的設(shè)備或地址),這是udev規(guī)則中錯誤的另一個可能指示,盡管/ dev / sub20文件清楚地以某種方式與正確的設(shè)備相關(guān)聯(lián),因為它僅在插入設(shè)備時才存在.
我還能做些什么來嘗試讓它發(fā)揮作用?
我用來訪問libusb設(shè)備的udev規(guī)則如下所示:SUBSYSTEMS ==“usb”,ATTRS {idVendor} ==“04d8”,ATTRS {idProduct} ==“ffc3”,SYMLINK =“sub20”, GROUP =“usb”,MODE =“660”.它應(yīng)該只是添加一個符號鏈接到設(shè)備,但之后權(quán)限也適用于我(我是組usb的成員).
總結(jié)
以上是生活随笔為你收集整理的linux libusb应用实例,在Linux中使用libusb-1.0作为非root用户访问USB设备的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python 多条件 选择 算法_pyt
- 下一篇: linux开发板 pc 通讯_从51单片