libusb 是一个用户空间访问 USB 设备的 C 库,特点:
使用 C 语言实现。
可移植性,目前支持的平台有 Linux,macOS,Windows,Android,OpenBSD/NetBSD,Haiku,Solaris。
支持全部的 USB 规范,从 1.0 到 3.1。
无特殊权限要求,比如在 Linux 平台访问串口设备的时候,需要 sudo 提升权限才能操作。
注:GitHub 也有其仓库,但是缺乏生成 Makefile 的系列文件。所以最好还是通过官网下载压缩包。
针对 Linux 平台,涉及的技术有:
├── android:顾名思义,用于生成 Android 版本的 libusb 库及测试用例。
├── doc:用于生成 API 文档。在doc/目录下执行:doxygen doxygen.cfg 或者 make docs。
├── examples:libusb 的使用示例。后续代码分析即以各个示例作为实例。
├── libusb:libusb 核心代码
│ ├── os:平台相关的代码,支持
├── msvc:微软编译环境相关文件。
├── tests:libusb 的测试。
└── Xcode:Apple 平台相关文件。
dpfp_threaded.c
获取并显示系统当前的 USB 设备信息,包含:VID、PID、bus 编号、设备地址、端口号。
实现原理及代码分析见:libusb(2)listdevs 实现分析
Ubuntu 14.04,Linux 4.4.0
Ubuntu 14.04 默认 gcc/g++ 版本为 4.8,需要升级编译器。方法如下:
$ sudo add-apt-repository ppa:ubuntu-toolchain-r/test $ sudo apt-get update $ sudo apt-get install gcc-5 g++-5
/usr/bin/gcc 和 /usr/bin/g++ 是软链接,修改使其指向我们新安装的编译器:
sudo ln -s /usr/bin/gcc-5 /usr/bin/gcc sudo ln -s /usr/bin/g++-5 /usr/bin/g++
执行 ./configure 自动生成 Makefile。
按照上述步骤生成的 Makefile,在 make 的时候报错“aclocal-1.16 is missing on your system.”,很明显提示系统当前 aclocal 的版本不符合要求。
考虑到 libusb 源码没有多少文件,干脆自己写 Makefile,后续自己控制编译哪些文件。
源码分析所用的仓库:libusb_play.git
原文:https://www.cnblogs.com/rockyching2009/p/14174800.html