• linuxlibusb的安装与测试 2013-05-14 15:06 10016人阅读 评论(1) 收藏 举报 本文章已收录于: 分类: Libusb 版权声明:本文为博主原创文章,未经博主允许不得转载。 @2013/5...
    
        

    linux下libusb的安装与测试

    10016人阅读 评论(1) 收藏 举报
    本文章已收录于:
    分类:

    @2013/5/14

    0.libusb的介绍:参考[1]

    1.环境:vmware_fedora_10(Linux-2.6.x)

    2.获取源代码:http://sourceforge.net/projects/libusb/  (最好选择libusb-1.0.9版本,下载次数最多,自是有它的道理)

    3.解压源码tar xjvf libusb-1.0.9.tar.bz2 按照INSTALL文件给出的提示进行安装:主要分为./configure ->make -> make install

    4.安装过程如下:

    configure略去......(看不懂......)

    /* make的动作主要是编译libusb的源代码 */

    [root@zx libusb-1.0.9]# make
    make  all-recursive
    make[1]: Entering directory `/share/libusb-1.0.9'
    Making all in libusb
    make[2]: Entering directory `/share/libusb-1.0.9/libusb'
      CC     libusb_1_0_la-core.lo
      CC     libusb_1_0_la-descriptor.lo
      CC     libusb_1_0_la-io.lo
      CC     libusb_1_0_la-sync.lo
      CC     libusb_1_0_la-linux_usbfs.lo
      CC     libusb_1_0_la-threads_posix.lo
      CCLD   libusb-1.0.la
    make[2]: Leaving directory `/share/libusb-1.0.9/libusb'
    Making all in doc
    make[2]: Entering directory `/share/libusb-1.0.9/doc'
    make[2]: Nothing to be done for `all'.
    make[2]: Leaving directory `/share/libusb-1.0.9/doc'
    make[2]: Entering directory `/share/libusb-1.0.9'
    make[2]: Nothing to be done for `all-am'.
    make[2]: Leaving directory `/share/libusb-1.0.9'
    make[1]: Leaving directory `/share/libusb-1.0.9'

    /* make install的动作主要是编译出libusb库并加入到系统文件夹下 */
    [root@zx libusb-1.0.9]# make install
    Making install in libusb
    make[1]: Entering directory `/share/libusb-1.0.9/libusb'
    make[2]: Entering directory `/share/libusb-1.0.9/libusb'
    test -z "/usr/local/lib" || /bin/mkdir -p "/usr/local/lib"
     /bin/sh ../libtool   --mode=install /usr/bin/install -c   libusb-1.0.la '/usr/local/lib'
    libtool: install: /usr/bin/install -c .libs/libusb-1.0.so.0.1.0 /usr/local/lib/libusb-1.0.so.0.1.0
    libtool: install: (cd /usr/local/lib && { ln -s -f libusb-1.0.so.0.1.0 libusb-1.0.so.0 || { rm -f libusb-1.0.so.0 && ln -s libusb-1.0.so.0.1.0 libusb-1.0.so.0; }; })
    libtool: install: (cd /usr/local/lib && { ln -s -f libusb-1.0.so.0.1.0 libusb-1.0.so || { rm -f libusb-1.0.so && ln -s libusb-1.0.so.0.1.0 libusb-1.0.so; }; })
    libtool: install: /usr/bin/install -c .libs/libusb-1.0.lai /usr/local/lib/libusb-1.0.la
    libtool: install: /usr/bin/install -c .libs/libusb-1.0.a /usr/local/lib/libusb-1.0.a
    libtool: install: chmod 644 /usr/local/lib/libusb-1.0.a
    libtool: install: ranlib /usr/local/lib/libusb-1.0.a
    libtool: finish: PATH="/usr/lib/qt-3.3/bin:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/lib/ccache:/opt/EmbedSky/4.3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/sbin" ldconfig -n /usr/local/lib
    ----------------------------------------------------------------------
    Libraries have been installed in:
       /usr/local/lib /* 这里提示已经将库加入到/usr/local/lib目录,所以我们基于libusb编程的时候,需要包含这个库 */

    If you ever happen to want to link against installed libraries
    in a given directory, LIBDIR, you must either use libtool, and
    specify the full pathname of the library, or use the `-LLIBDIR'
    flag during linking and do at least one of the following:
       - add LIBDIR to the `LD_LIBRARY_PATH' environment variable
         during execution
       - add LIBDIR to the `LD_RUN_PATH' environment variable
         during linking
       - use the `-Wl,-rpath -Wl,LIBDIR' linker flag
       - have your system administrator add LIBDIR to `/etc/ld.so.conf'

    See any operating system documentation about shared libraries for
    more information, such as the ld(1) and ld.so(8) manual pages.
    ----------------------------------------------------------------------
    test -z "/usr/local/include/libusb-1.0" || /bin/mkdir -p "/usr/local/include/libusb-1.0"
     /usr/bin/install -c -m 644 libusb.h '/usr/local/include/libusb-1.0'
    make[2]: Leaving directory `/share/libusb-1.0.9/libusb'
    make[1]: Leaving directory `/share/libusb-1.0.9/libusb'
    Making install in doc
    make[1]: Entering directory `/share/libusb-1.0.9/doc'
    make[2]: Entering directory `/share/libusb-1.0.9/doc'
    make[2]: Nothing to be done for `install-exec-am'.
    make[2]: Nothing to be done for `install-data-am'.
    make[2]: Leaving directory `/share/libusb-1.0.9/doc'
    make[1]: Leaving directory `/share/libusb-1.0.9/doc'
    make[1]: Entering directory `/share/libusb-1.0.9'
    make[2]: Entering directory `/share/libusb-1.0.9'
    make[2]: Nothing to be done for `install-exec-am'.
    test -z "/usr/local/lib/pkgconfig" || /bin/mkdir -p "/usr/local/lib/pkgconfig"
     /usr/bin/install -c -m 644 libusb-1.0.pc '/usr/local/lib/pkgconfig'
    make[2]: Leaving directory `/share/libusb-1.0.9'
    make[1]: Leaving directory `/share/libusb-1.0.9'

    5.源码目录下有example目录,是libusb提供的测试程序listdev.c (列出usb设备)

    1. #include <stdio.h>  
    2. #include <sys/types.h>  
    3. #include <libusb.h>  
    4.   
    5. static void print_devs(libusb_device **devs)  
    6. {  
    7.     libusb_device *dev;  
    8.     int i = 0;  
    9.   
    10.     while ((dev = devs[i++]) != NULL) {  
    11.         struct libusb_device_descriptor desc;  
    12.         int r = libusb_get_device_descriptor(dev, &desc);  
    13.         if (r < 0) {  
    14.             fprintf(stderr, "failed to get device descriptor");  
    15.             return;  
    16.         }  
    17.   
    18.         printf("%04x:%04x (bus %d, device %d)\n",  
    19.             desc.idVendor, desc.idProduct,  
    20.             libusb_get_bus_number(dev), libusb_get_device_address(dev));  
    21.     }  
    22. }  
    23.   
    24. int main(void)  
    25. {  
    26.     libusb_device **devs;  
    27.     int r;  
    28.     ssize_t cnt;  
    29.   
    30.     r = libusb_init(NULL);  
    31.     if (r < 0)  
    32.         return r;  
    33.   
    34.     cnt = libusb_get_device_list(NULL, &devs);  
    35.     if (cnt < 0)  
    36.         return (int) cnt;  
    37.   
    38.     print_devs(devs);  
    39.     libusb_free_device_list(devs, 1);  
    40.   
    41.     libusb_exit(NULL);  
    42.     return 0;  
    43. }  
    #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生成可执行文件,也可以用如下操作进行:(参考[2])

    [root@zx examples]# gcc -I/usr/local/include/libusb-1.0 listdevs.c -L/usr/local/lib -lusb-1.0

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

    6.listdev的运行结果如下:

    [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:

    7.若想打开调试开关,看出libusb内部的运行情况

    在libusb/libusbi.h中有如下代码

    1. #ifdef ENABLE_DEBUG_LOGGING  
    2. #define usbi_dbg(...) _usbi_log(NULL, LOG_LEVEL_DEBUG, __VA_ARGS__)  
    3. #else  
    4. #define usbi_dbg(...) do {} while(0)  
    5. #endif  
    #ifdef ENABLE_DEBUG_LOGGING
    #define usbi_dbg(...) _usbi_log(NULL, LOG_LEVEL_DEBUG, __VA_ARGS__)
    #else
    #define usbi_dbg(...) do {} while(0)
    #endif

    所以说在makefile加上-DENABLE_DEBUG_LOGGING=1这个编译选项即可.

    在libusb的目录下找到makefile(configure之后才会生成),找到CFLAGS = -g -O2,替换为CFLAGS = -g -O2 -DENABLE_DEBUG_LOGGING=1

    再次make和make install,切换到之前的listdev程序,可以看见已经打出libusb内部的调用顺序:

    [root@zx examples]# ./listdevs
    libusb: 0.000000 debug [libusb_init] libusb-1.0.9
    libusb: 0.003326 debug [find_usbfs_path] found usbfs at /dev/bus/usb
    libusb: 0.004064 debug [op_init] found usb devices in sysfs
    libusb: 0.004939 debug [usbi_add_pollfd] add fd 3 events 1
    libusb: 0.005519 debug [usbi_io_init] using timerfd for timeouts
    libusb: 0.006147 debug [usbi_add_pollfd] add fd 5 events 1
    libusb: 0.006710 debug [libusb_init] created default context
    libusb: 0.007273 debug [libusb_get_device_list]
    libusb: 0.011264 debug [sysfs_scan_device] scan usb1
    libusb: 0.012133 debug [sysfs_scan_device] bus=1 dev=1
    libusb: 0.012681 debug [enumerate_device] busnum 1 devaddr 1 session_id 257
    libusb: 0.013244 debug [enumerate_device] allocating new device for 1/1 (session 257)
    libusb: 0.013956 debug [sysfs_scan_device] scan usb2
    libusb: 0.014740 debug [sysfs_scan_device] bus=2 dev=1
    libusb: 0.015685 debug [enumerate_device] busnum 2 devaddr 1 session_id 513
    libusb: 0.016251 debug [enumerate_device] allocating new device for 2/1 (session 513)
    libusb: 0.016984 debug [sysfs_scan_device] scan 2-1
    libusb: 0.017761 debug [sysfs_scan_device] bus=2 dev=2
    libusb: 0.018467 debug [enumerate_device] busnum 2 devaddr 2 session_id 514
    libusb: 0.018988 debug [enumerate_device] allocating new device for 2/2 (session 514)
    libusb: 0.019789 debug [sysfs_scan_device] scan 2-2
    libusb: 0.020473 debug [sysfs_scan_device] bus=2 dev=3
    libusb: 0.021145 debug [enumerate_device] busnum 2 devaddr 3 session_id 515
    libusb: 0.021742 debug [enumerate_device] allocating new device for 2/3 (session 515)
    libusb: 0.022440 debug [sysfs_scan_device] scan 1-1
    libusb: 0.023203 debug [sysfs_scan_device] bus=1 dev=3
    libusb: 0.023986 debug [enumerate_device] busnum 1 devaddr 3 session_id 259
    libusb: 0.024548 debug [enumerate_device] allocating new device for 1/3 (session 259)
    libusb: 0.025266 debug [libusb_get_device_descriptor]
    1d6b:0002 (bus 1, device 1)
    libusb: 0.026017 debug [libusb_get_device_descriptor]
    1d6b:0001 (bus 2, device 1)
    libusb: 0.026479 debug [libusb_get_device_descriptor]
    0e0f:0003 (bus 2, device 2)
    libusb: 0.026516 debug [libusb_get_device_descriptor]
    0e0f:0002 (bus 2, device 3)
    libusb: 0.026576 debug [libusb_get_device_descriptor]
    0cf3:1006 (bus 1, device 3)
    libusb: 0.026616 debug [libusb_unref_device] destroy device 1.1
    libusb: 0.026636 debug [libusb_unref_device] destroy device 2.1
    libusb: 0.026652 debug [libusb_unref_device] destroy device 2.2
    libusb: 0.026667 debug [libusb_unref_device] destroy device 2.3
    libusb: 0.026682 debug [libusb_unref_device] destroy device 1.3
    libusb: 0.026698 debug [libusb_exit]
    libusb: 0.026731 debug [libusb_exit] destroying default context
    libusb: 0.026747 debug [usbi_remove_pollfd] remove fd 3
    libusb: 0.026778 debug [usbi_remove_pollfd] remove fd 5

    PS:这里还有一个问题:

    [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]# /* 运行的时候若出现这个错误,只要先运行下面一句话即可 */
    [root@zx test]# export LD_LIBRARY_PATH=/usr/local/lib

    展开全文
  • 一、前言: 在这家公司真的多个平台都搞过了,最近,销售接了个单,客户是个台湾佬,客户这家公司也是他们... 奈何,客户的另外一个客户,将我们公司产品用户Pos机上,需要我们提供Linux 平台的二次开发包,。可是...

     

    一、前言:

            在这家公司真的多个平台都搞过了,最近,销售接了个单,客户是个台湾佬,客户这家公司也是他们瑞士代工厂之一。其中要求我们提供产品的二次开发包。我在公司职位属于Windows平台开发,因此,Windows平台的二次开发包,理所当然有我开发并提供。

            奈何,客户的另外一个客户,将我们公司产品用户Pos机上,需要我们提供Linux 平台的二次开发包,。可是公司,没有这方面资料和开发工程师,本想这肯定和我没有关系,于是乎私底下还庆幸着两天。结果,那个销售都没有问我,直接答应客户可以做,而且还发邮件给老板并抄送给我,无奈,老板下令,必须接手这破项目。因此,记录下这个过程,下次也可以继续使用。

     

    二、概述:

            上述过程吐槽完,接下来该进入正题了。

            在网上查资料和百度过后,发现在Linux平台上与单片机等设备进行USB-HID通讯,一般是使用开源项目libusb 使用是最多,不像Windows 那样,直接使用win32 api 进行操作。既然如此,就是决定用libusb。

     

    三、libusb 下载

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

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

     

    四、libusb的安装

    1、环境 Ubuntu 12.04  (第一次安装时使用14.04 版本,有问题,后面将提到)

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

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

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

    c:执行make install安装

    这三个步骤,如果熟悉libusb的大神,可能觉得很简单,但是对于新手,却不一般。然而我第一次安装时就是遇到非常多的问题,所以才要写这篇博客,记录下来,方便像我一样的新手可以有帮助。

     

    3、解压压缩包,如下图:

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

    将下载 libusb-1.0.22.tar.bz2 的压缩包拷贝到libusb目录下,tar xjvf libusb-1.0.22.tar.bz2 解压,如下图:

    解压后,目录如下:

     

    4、执行./configure 命令,来配置安装包,如下图:

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

    如下图:

    借用其中一篇大神的原文

    ------------------------------------------------------

     

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

    --build=i686-linux指明软件的编译平台
    --host=arm-linux 指明软件的运行平台
    --prefix 指明软件的安装目录

    CC=arm-linux-gcc       若为交叉编译那么需要指定该工具链

    CXX=arm-linux-g++)   若为交叉编译那么需要指定该工具链

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

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

    可见我的机器cpu架构是 x86_64, 

    -----------------------------------------------------------------------

    还有就是遇到上面的错误,此时,需要在 ./configure 命令后加上 --disable -udev 就可以了

    如:我的电脑是 x86_64,  因此命令是:   ./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 就是这个原因,库放在这个目录下,需要链接上。

    如下图:

     

    好了,上面就是Ubuntu 下libusb 安装,后面就可以开始编写usb 驱动代码了,详情。

    libusb在linux如何与USB hid 设备通讯,请看下回分解。

     

     

     

    参考文章:

    https://blog.csdn.net/ymangu666/article/details/39500923

    https://blog.csdn.net/g200407331/article/details/51724642

    https://blog.csdn.net/yongwenn163/article/details/70241830

    展开全文
  • libusb linux 无法打开设备 问题: 在使用Qt或者其他开发工具,开发Linux端的程序时。遇到 libusblinux下无法正常打开,需要 root 权限才可以打开,而普通权限能调用库,但是无法打开设备进行通讯。 解决方案 ...

    libusb linux 无法打开设备

    问题:

    在使用Qt或者其他开发工具,开发Linux端的程序时。遇到 libusb 在linux下无法正常打开,需要 root 权限才可以打开,而普通权限能调用库,但是无法打开设备进行通讯。

    解决方案

    需要在 Linux的系统下的 /etc/udev/rules.d 系统文件下,创建 .rules 文件。文件内容如下:

     # Put this file in /etc/udev/rules.d/ 
     # idVendor VID ,MODE 读写权限
    SUBSYSTEM=="usb", ATTRS{idVendor}=="4745", MODE="0666"
    SUBSYSTEM=="usb_device", ATTRS{idVendor}=="4745", MODE="0666"
    
    
    展开全文
  • linuxlibusb驱动安装文件及其测试程序
  • 一、前言 上一篇文章提到了怎样使用Ubuntu 安装libusb,忘了如何将如何编译。二、libusb使用GCC 编译正常来讲,使用 gccc xxx.c -o xxx -I/usr/include -lusb-1.0 就可以了,如下图:但是,当使用Ubuntu 12.04 使用...

    一、前言

            上一篇文章提到了怎样使用Ubuntu 安装libusb,忘了如何将如何编译。尴尬


    二、libusb使用GCC 编译

    正常来讲,使用  gccc xxx.c -o xxx -I/usr/include -lusb-1.0   就可以了,如下图:


    但是,当使用Ubuntu 12.04 使用这条命令编译,则会报错,如下图:


    提示,未找到这个`clock_gettime' 这个函数。惊恐

    经测试,分别使用 Ubuntu 12.04   Ubuntu 14.04   Ubuntu 16.04   Ubuntu 17.10

    只有在 Ubuntu 12.04  才会报错,也许这个太老了。

    解决办法就是在命令后面,加上  -lrt  连接上实时库(real time)

    如下图,在Ubuntu 12.04 上编译通过


    当连接多个文件是,建议最好使用Makefile,因为太久没有用了,当同时编译多个.c 文件,竟然忘了需要在命令上加上其他.c 文件,结果纠结几个小时才发现。害羞在Windows 上用集成开发环境用多了。

    如下图,同时连接多个文件,每次敲这个命令非常麻烦。


    直接使用make, 方便又省事。


    我的Makefile

    LD		:= $(CROSS_COMPILE)ld
    CC		:= $(CROSS_COMPILE)gcc
    CPP		:= $(CROSS_COMPILE)g++
    AR		:= $(CROSS_COMPILE)ar
    STRIP	:= $(CROSS_COMPILE)strip
    
    CFLAGS += -fPIC
    
    SOURCES = $(wildcard *.c)
    DEP = $(wildcard *.h)
    OBJS = $(patsubst %.c, %.o,$(SOURCES))
    
    ICMLIB_O = BulkTransfer.o ControlTranfser.o ErrorCode.o M235API.o UsbHid.o
    ICMLIB_C = BulkTransfer.c ControlTranfser.c ErrorCode.c M235API.c UsbHid.c
    
    TARGET_SO = libm235.so
    TARGET_TEST = m235module 
    
    $(TARGET_TEST): 
    	$(CC) $(CFLAGS) *.c -o $(TARGET_TEST) -I/usr/include/ -lusb-1.0 -lrt
    
    $(TARGET_SO): $(ICMLIB_O)
    	$(CC) $(CFLAGS) -shared -o $@ $(ICMLIB_O) $(LIB) 
    	if [ ! -z "$(STRIP)" ]; then $(STRIP) --strip-all $@; fi;
    
    $(ICMLIB_O): %.o: %.c $(DEP)
    	$(CC) $(CFLAGS) -c $< -o $@ -I/usr/include/ -lusb-1.0 -lrt
    
    clean:
    	rm -f $(TARGET_SO) *~ *.swp $(OBJS) a.out *.gc* $(TARGET_TEST)

    三、动态库的编译

    需要将libub的函数封装到用户自己的动态库中,有几个注意的问题,动态库的编译命令和正常的一样。

    但是,当别人使用你的调用你的动态库时,千万记得需要将 /usb/local/lib 的libusb-1.0.so  提供给别人,

    不然当用户调你的动态库编译会报如下错误,


    所以,需要提供那个库,如下图:


    记录,结束。

    展开全文
  • Ubuntu下最简单的安装方法: sudo apt-get install libusb-dev 也可按照下面的方法,自己编译,安装,新手建议使用apt-get install 的方法安装 一、参考文档:  1. libusb1 fails do_configure task with ...

    Ubuntu下最简单的安装方法: sudo apt-get install libusb-dev

    也可按照下面的方法,自己编译,安装,新手建议使用apt-get install 的方法安装

    一、参考文档:

        1. libusb1 fails do_configure task with “udev support requested but libudev not installed”
            http://stackoverflow.com/questions/23712859/libusb1-fails-do-configure-task-with-udev-support-requested-but-libudev-not-ins
        2. libusb compilation error on slackware 14
            http://stackoverflow.com/questions/29552267/libusb-compilation-error-on-slackware-14
        3. Jan Axelson's Generic HID example under Linux with libusb
            http://www.microchip.com/forums/m340898.aspx
        4. Slackware- usb library
            http://www.linuxquestions.org/questions/slackware-14/slackware-usb-library-4175475048/

    二、下载libusb:
        1. 网址:http://www.libusb.org/
        2. 下载:libusb-1.0.9,跳转到解压,并安装:
            ./configure && make && make install;
        3. 下载:libusb-compat-0.1.4,跳转到解压,并安装(一定要安装,否则总是报各种错,本人用的是64位系统):
            ./configure && make && make install;

    三、libusb安装错误:
        1. 错误提示:
            checking for inline... inline
            checking operating system... Linux
            checking for library containing clock_gettime... -lrt
            checking libudev.h usability... no
            checking libudev.h presence... no
            checking for libudev.h... no
            configure: error: "udev support requested but libudev not installed"
        2. 解决方法:
            sudo apt-get install libudev-dev

    四、Example:
       
    #include <usb.h>
    #include <stdio.h>
    
    
    void print_endpoint(struct usb_endpoint_descriptor *endpoint)
    {
        printf(" bEndpointAddress: %02xh\n", endpoint->bEndpointAddress);
        printf(" bmAttributes: %02xh\n", endpoint->bmAttributes);
        printf(" wMaxPacketSize: %d\n", endpoint->wMaxPacketSize);
        printf(" bInterval: %d\n", endpoint->bInterval);
        printf(" bRefresh: %d\n", endpoint->bRefresh);
        printf(" bSynchAddress: %d\n", endpoint->bSynchAddress);
    }
    
    
    void print_altsetting(struct usb_interface_descriptor *interface)
    {
        int i;
    
        printf(" bInterfaceNumber: %d\n", interface->bInterfaceNumber);
        printf(" bAlternateSetting: %d\n", interface->bAlternateSetting);
        printf(" bNumEndpoints: %d\n", interface->bNumEndpoints);
        printf(" bInterfaceClass: %d\n", interface->bInterfaceClass);
        printf(" bInterfaceSubClass: %d\n", interface->bInterfaceSubClass);
        printf(" bInterfaceProtocol: %d\n", interface->bInterfaceProtocol);
        printf(" iInterface: %d\n", interface->iInterface);
    
        for (i = 0; i < interface->bNumEndpoints; i++)
            print_endpoint(&interface->endpoint);
    }
    
    
    void print_interface(struct usb_interface *interface)
    {
        int i;
    
        for (i = 0; i < interface->num_altsetting; i++) {
            print_altsetting(&interface->altsetting);
        }
    }
    
    
    void print_configuration(struct usb_config_descriptor *config)
    {
        int i;
    
        printf(" wTotalLength: %d\n", config->wTotalLength);
        printf(" bNumInterfaces: %d\n", config->bNumInterfaces);
        printf(" bConfigurationValue: %d\n", config->bConfigurationValue);
        printf(" iConfiguration: %d\n", config->iConfiguration);
        printf(" bmAttributes: %02xh\n", config->bmAttributes);
        printf(" MaxPower: %d\n", config->MaxPower);
    
        for (i = 0; i < config->bNumInterfaces; i++) {
            print_interface(&config->interface);
        }
    }
    
    
    int main(void)
    {
        struct usb_bus *bus;
        struct usb_device *dev;
    
        usb_init();
        usb_find_busses();
        usb_find_devices();
    
        printf("bus/device idVendor/idProduct\n");
    
        for (bus = usb_busses; bus; bus = bus->next) {
            for (dev = bus->devices; dev; dev = dev->next) {
                int ret, i;
                char string[256];
                usb_dev_handle *udev;
    
                printf("%s/%s %04X/%04X\n", bus->dirname, dev->filename,
                       dev->descriptor.idVendor, dev->descriptor.idProduct);
    
                udev = usb_open(dev);
                if (udev) {
                    if (dev->descriptor.iManufacturer) {
                        ret = usb_get_string_simple(udev, dev->descriptor.iManufacturer, string, sizeof(string));
                        if (ret > 0)
                            printf("- Manufacturer : %s\n", string);
                        else
                            printf("- Unable to fetch manufacturer string\n");
                    }
    
                    if (dev->descriptor.iProduct) {
                        ret = usb_get_string_simple(udev, dev->descriptor.iProduct, string, sizeof(string));
                        if (ret > 0)
                            printf("- Product : %s\n", string);
                        else
                            printf("- Unable to fetch product string\n");
                    }
    
                    if (dev->descriptor.iSerialNumber) {
                        ret = usb_get_string_simple(udev, dev->descriptor.iSerialNumber, string, sizeof(string));
                        if (ret > 0)
                            printf("- Serial Number: %s\n", string);
                        else
                            printf("- Unable to fetch serial number string\n");
                    }
    
                    usb_close (udev);
                }
    
                if (!dev->config) {
                    printf(" Couldn't retrieve descriptors\n");
                    continue;
                }
    
                for (i = 0; i < dev->descriptor.bNumConfigurations; i++)
                    print_configuration(&dev->config);
            }
        }
    
        return 0;
    }

    展开全文
  • ![图片说明]...我在unbuntu中的ROS框架下跑深度相机kinectv2也出现了这种情况,因为图像处理量大提示LIBUSB_OPTION_TIMEOUT,Libusb阻塞 请问一下如何解决
  • libusb函数库来完成电脑与USB设备的数据交互功能,主要有以下步骤: 1)初始化libusb函数库; 2)根据vid和pid查找某一具体设备,并获取设备描述符;(vid和pid为设备的id,且每台设备的都vid和pid是唯一的) 3...
  • Linux平台上,内核驱动的开发由于内核的复杂和版本问题,初学者难以入手,驱动程序也不易升级和维护。本文主要介绍Linux平台下使用libusb库基于usb文件系统的驱动开发,并将其应用到嵌入式系统中,可显著降低开发...
  • libusb移植到ARM linux

    2017-05-16 13:48:13
    环境:ubuntu16.04 x64版本, arm-linux-gcc (Sourcery G++ Lite 2010.09-50) 4.5.1 1. 下载源码 https://sourceforge.net/projects/libusb/ 2. 解压源码 tar -xvf libusb-1.0.20.tar.bz2 3. 进入解压后的文件...
  • 转自:... linux交叉编译libusb的方法 #### 下载libusb  下载网址:http://sourceforge.net/projects/libusb/files/#### 交叉编译libusb ####  将下载好的libusb压缩包解压后进入该
  • 在终端用户看来,USB设备为主机提供了多种多样的附加功能,如文件传输,声音播放等,但对USB主机来说,它与所有USB设备的接口都是一致的。一个USB设备由3个功能模块组成:USB总线接口、USB逻辑设备和功能单元: ...
  • linux下为QT安装libusb

    2014-04-14 11:47:36
    使用apt-get install libusb* 来安装usb相关的库文件。只不过安装的文件会比较多,dan
  • 下载源码libusb-1.0.9.tar.bz2解压到当前目录,我是在64位Ubuntu14.04,内核版本3.13上编译的。终端进入到源码目录,先进行配置./configure--build=x86_64-unknown-linux-uclibc--host=arm-unknown-linux-gnu--...
  • 1,$git clone https://github.com/libusb/libusb.git 2,$sudo apt install autoconf 3,$sudo apt install automake 4,$sudo apt install libtool-bin 5,$sudo apt install libudev-dev 6,$sudo apt install lib...
  • libusb 介绍 libusb 设计了一系列的外部API 为应用程序所调用,通过这些API应用程序可以操作硬件,从libusb的源代码可以看出,这些API 调用了内核的底层接口,和kernel driver中所用到的函数所实现的功能差不多...
  • 1.下载libusb:https://sourceforge.net/projects/libusb/files/libusb-1.0/ 2.在linux下解压之后,执行命令 configure-&gt;make-&gt;make install   但是当你执行configure的时候会出现以下问题: ...
  • linux系统 编译libusb

    2018-08-20 14:29:06
    在 编译libusb 的事已经过去差不多两个月多了,只要模模糊糊的记得大概的步骤和碰到一些问题.并且要在linux平台 使用usb 打印 编译环境在虚拟机中 linux 系统最好是安装最全最大的,如果不懂的话会很麻烦. 1.编译 ...
1 2 3 4 5 ... 20
收藏数 4,513
精华内容 1,805
热门标签
关键字:

libusb版本 linux