编译libusb

首先从官网下载源码包,目前版本是1.0.9,官网地址(http://libusb.org/)

下载后直接./configure --prefix=/yourfolder ,make,make install,即可在yourfolder下面生成两个目录include和lib,分别包含libusb.h和libusb-1.0库文件,过程很简单,不再罗嗦,此处只补充一下在交叉编译环境下configure的方法。

./configure --prefix=/yourfolder --host=arm-linux

上面蓝色的部分就是要额外指定的内容,告诉平台是arm-linux。这里我也很晕configure是怎么指向实际的gcc程序的,因为测试用的arm-gcc的完整名称是arm-linux-gnueabihf-gcc,但是在configure的时候只指定了--host=arm-linux,配置完 之后查看生成的Makefile里的CC变量,竟然自动变成了arm-linux-anueabihf-gcc,这是约定俗成的吗?为了以后不被误导,此处得记录一下编译环境为ubuntu12.04+arm-gnueabihf,是通过apt源自动安装的那种arm-gcc。

libusb包中默认包含了一个listdevs.c的示例,可以枚举系统上的所有usb设备,在编译的时候要加上参数-lpthread -lrt,然后链接刚才make出来的库文件,我将普通Linux和ArmLinux的库文件都编译了一份,方便以后使用:

如上,在ArmLinux下面是Arm版本的libusb,Linux下是普通x86版本的libusb,然后做一个粗糙的Makefile,每次编译的时候只要注释掉PLATFORM,编译出来的就是x86版本的listdevs,否则就是Arm版本的listdevs

后来我在示例里面加了几句话,用来打印设备的iProduct信息,这样输出的结果好看一下,类似这样:

改后的源码如下:

额外增加了一个libusb_get_string_descriptor_ascii方法,由于没有找到libusb详细的说明,所以只能琢磨测试。不知是不是调用libusb的方法不对,输出的结果比执行lsusb得到的内容少,例如下面lsusb输出结果,内容很详细:

上面的代码,只能在Linux上运行,在windows环境下libusb_open会返回错误,查看网上资料也没找到有效的解决办法,有人说没安装win usb,我试了也不管用,暂且搁置,毕竟windows上随便打开设备管理器,USB设备的信息都是一览无余的。

:Makefile条件判断必须放在行首,前面不能有分隔符

:libusb里面有建好的vs2010工程,可以直接打开编译win版本的libusb

发表评论

电子邮件地址不会被公开。 必填项已用*标注