Linux libusb USB开发(二)—— libusb安装与调试

一、libusb 下载

        在官网http://libusb.info/可以下载到,如下图:

下载里面的 libusb-1.0.22.tar.bz2

二、libusb的安装

1、环境 Ubuntu 16.04 

2、安装主要分3个步骤,如下:

        a:执行./configure来配置安装包。

        b:执行make编译该安装包。

        c:执行make install安装

3、具体操作流程:

1)在home 目录下,新建libusb目录(mkdir libusb),如下图:

    解压 libusb-1.0.22.tar.bz2 :tar xjvf libusb-1.0.22.tar.bz2 

    解压后目录如下:

2)执行./configer 命令,来配置安装包,如下图:

执行命令,你会发现执行报错,configure: error: udev support requested but libudev header not installed

解决办法:执行 ./configure 命令,注意该命令可以选择编译平台,编译的库版本也即运行平台,编译工具链,安装路径等,所以不是默认配置的用户需要在此项自行配置,常见配置选项有:

--build=i686-linux指明软件的编译平台

--host=arm-linux 指明软件的运行平台

--prefix 指明软件的安装目录

如果在嵌入式arm处理器平台上应用,那么需要进行如下配置:

如果在本机PC上使用,那么需要进行如下配置:

同时,还需要在 ./configure 命令后加上 --disable -udev 

综上,命令是:   ./configure--build=x86_64-linux --disable-udev

5、执行make install 命令,如下图:

正常来说,是可以正常运行,但是如果系统当前用户是普通用户,则会报错,如下图:

错误提示是没有权限,因此,需要加上sudo,  因此执行命令, sudo make install

导入完成如下图:

 

Libraries have been installed in:

上面红色圈中 /usr/local/lib   /* 这里提示已经将库加入到/usr/local/lib目录,所以我们基于libusb编程的时候,需要包含这个库 */  编译时加上  --lusb-1.0 就是这个原因,库放在这个目录下,需要链接上。

如下图:

至此,libusb安装成功。

三、libusb的测试

libusb源码目录下有example文件夹,里面有libusb提供的测试程序listdev.c源文件 (列出usb设备)

#include <stdio.h>
#include <sys/types.h>
#include <libusb.h>
 
static void print_devs(libusb_device **devs)
{
	libusb_device *dev;
	int i = 0;
 
	while ((dev = devs[i++]) != NULL) {
		struct libusb_device_descriptor desc;
		int r = libusb_get_device_descriptor(dev, &desc);
		if (r < 0) {
			fprintf(stderr, "failed to get device descriptor");
			return;
		}
 
		printf("%04x:%04x (bus %d, device %d)\n",
			desc.idVendor, desc.idProduct,
			libusb_get_bus_number(dev), libusb_get_device_address(dev));
	}
}
 
int main(void)
{
	libusb_device **devs;
	int r;
	ssize_t cnt;
 
	r = libusb_init(NULL);
	if (r < 0)
		return r;
 
	cnt = libusb_get_device_list(NULL, &devs);
	if (cnt < 0)
		return (int) cnt;
 
	print_devs(devs);
	libusb_free_device_list(devs, 1);
 
	libusb_exit(NULL);
	return 0;
}

编译的时候我们可以用自带的makefile生成可执行文件,也可以用如下操作进行:

gcc -I/usr/local/include/libusb-1.0 listdevs.c -L/usr/local/lib -lusb-1.0 

(-I包含头文件 ;-L链接库)

运行结果:

[root@zx examples]# gcc -I/usr/local/include/libusb-1.0 listdevs.c -L/usr/local/lib -lusb-1.0
[root@zx examples]# ./a.out 
1d6b:0002 (bus 1, device 1)
1d6b:0001 (bus 2, device 1)
0e0f:0003 (bus 2, device 2)
0e0f:0002 (bus 2, device 3)
0cf3:1006 (bus 1, device 3)
[root@zx examples]# lsusb  /* 与lsusb命令得出的是一致 */
Bus 001 Device 003: ID 0cf3:1006 Atheros Communications, Inc. 
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 002 Device 003: ID 0e0f:0002  
Bus 002 Device 002: ID 0e0f:0003  
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hubReference:

若运行时遇到如下问题,解决方法如下:

[root@zx test]# ./a.out 
./a.out: error while loading shared libraries: libusb-1.0.so.0: cannot open shared object file: No such file or directory
 
/* 运行的时候若出现这个错误,只要先运行下面一句话即可 */
[root@zx test]# export LD_LIBRARY_PATH=/usr/local/lib

 


 

转载于:https://blog.csdn.net/jiguangfan/article/details/86492698

猜你喜欢

转载自blog.csdn.net/qq_31094099/article/details/90207776
今日推荐