libusb_init(NULL), 如果传入一个NULL, 则libusb 内部会有一个 usbi_default_context 变量在内部保存上下文. 这样以后调用 libusb 函数时可以不指定 context, libusb 使用默认的内部变量.
详见 USBI_GET_CONTEXT(ctx);
usbi_backend->init --> op_init
查找 usbfs 根目录
usbfs_path = find_usbfs_path();
- 先到 "/dev/bus/usb/" 目录下查找是否有任意有效文件(非'.'开头的隐藏文件), 如果有的话, 则 usbfs_path 为 "/dev/bus/usb"
- 如果没有的话, 就到 "/proc/bus/usb" 下寻找. 如果找到, 则 usbfs_path 为 "/proc/bus/usb"
- 如果还没有找到, 则查找 /dev/ 下的 /dev/usbdev%d.%d 格式的文件. 如果找到的话, 则 usbfs_path 为 "/dev" . 这种情况比较特殊, 会置标志 usbdev_names = 1;
- 如果还没找到的话, 就没办法了. 返回错误.
比较内核版本
libusb 里有个函数 kernel_version_ge(2,6,32), 使用 uname() 系统调用来获取当前运行内核版本信息.
sysfs 里的 USB 信息
遍历 "/sys/bus/usb/devices" , 找 usb 开头的目录. 这个目录表示总线. 查找其下是否有 busnum, devnum, descrip