精华内容
下载资源
问答
  • Linuxlibusb安装与调试

    万次阅读 多人点赞 2018-04-12 14:32:17
    一、前言: 在这家公司真的多个平台都搞过了,最近,销售接了个单,客户是个台湾佬,客户这家公司也是他们... 奈何,客户的另外一个客户,将我们公司产品用户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

    展开全文
  • Linux libusb 安装及简单使用

    千次阅读 2018-01-29 22:22:19
    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;
    }

    展开全文
  • linux libusb通信

    2018-08-20 14:25:19
    linux libusb通信linux libusb通信linux libusb通信linux libusb通信
  • 一、libusb 下载 ...二、libusb安装  1、环境 Ubuntu 16.04  2、安装主要分3个步骤,如下: a:执行./configure来配置安装包。 b:执行make编译该安装包。 c:执行make install安装 3、具体操作流...

    一、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)解压 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 指明软件的安装目录

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

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

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

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

    3)执行sudo make install 命令

    记得sudo,否则报错!

     上面红色圈中 /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/gd6321374/article/details/79903132

    https://blog.csdn.net/zhengxianghdu/article/details/8925602

    展开全文
  • 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"
    
    
    展开全文
  • 基于LibUsblinux相机驱动 鄙人毕设

    热门讨论 2011-07-16 09:10:46
    鄙人毕设(89分),使用libusb这个库写得一个Linux相机驱动。通过该代码可以获悉libusb与usb设备进行通信的一般方法。对于了解libusb库以及usb2.0特征有帮助。里面有关于图像处理插值算法。
  • libusblinux下的配置

    2020-07-04 16:20:19
    libusb下载与编译 1.在官网下载libusb-1.0.23 2.解压tar -xvf libusb-1.0.23.tar.bz2 3../configure 4.make 5.sudo make install 在加载配置和编译的时候难免会遇到报错,执行下面代码下载 sudo apt-get install ...
  • linuxlibusb驱动安装文件及其测试程序
  • Libusb安装编译

    2019-10-08 04:49:09
    概述 Linux 平台上的usb驱动开发,主要有内核驱动的开发和基于libusb的无驱设计。libusb是一个C库,提供对USB设备的通用访问。通过他来进行无驱的USB设备访问控制。支持哪些平台 Linux,OS X,Windows,Windows CE...
  • linuxlibusb库的安装

    2021-04-09 16:27:24
    1. 环境: Linux 2. libusb源码:http://sourceforge.net/projects/libusb/ 3. 解压tar xjvf libusb-1.0.24.tar.bz2 (这里我下载的是1.0.24版本,根据你自己的版本改) 4. 看解压出来的文件夹,里面有个文件,叫...
  • linux libusb-1.0.9 安装

    2019-05-09 22:07:00
    libusb下载链接: https://libusb.info/ ...安装libusb: 进入libusb目录,依次执行:→aclocal→autoconf→autoheader。 可能遇到的问题: 1.aclocal: warning: couldn't open directory 'm...
  • linuxlibusb安装与测试

    千次阅读 2017-02-20 15:14:23
    linuxlibusb安装与测试 2013-05-14 15:06 10016人阅读 评论(1) 收藏 举报 本文章已收录于: 分类: Libusb 版权声明:本文为博主原创文章,未经博主允许不得转载。 @2013/5...
  • libusb is a library for USB device access from Linux, macOS, Windows, OpenBSD/NetBSD, Haiku and Solaris userspace. It is written in C (Haiku backend in C++) and licensed under the GNU Lesser General ...
  • 1、版本pcsc:pcsc-lite-1.6.0libusblibusb-0.1.12ccid:ccid-1.3.12硬件环境是友坚恒天的idea6410开发板,软件环境是linux-2.6.242、编译:a、libusb:./configure --host=arm-linux --prefix=/usr/ccid/ CC=/usr...
  • ubuntu18.04 libusb安装与调试

    千次阅读 2019-11-13 16:27:25
     在网上查资料和百度过后,发现在Linux平台上与单片机等设备进行USB-HID通讯,一般是使用开源项目libusb 使用是最多,不像Windows 那样,直接使用win32 api 进行操作。既然如此,就是决定用libusb。   三、...
  • Linux系统(如Ubuntu)在与一些USB设备通信时(如单片机、相机等),往往需要安装usb驱动,而其中最常见的便是libusb。本文将简单介绍libusb安装与配置,同时介绍如何利用libusb控制相机采集图像以及中间可能...
  • ubuntu下libusb安装与测试

    千次阅读 2017-04-19 16:01:12
    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 按照...
  • 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...
  • 1、版本pcsc:pcsc-lite-1.6.0libusblibusb-0.1.12ccid:ccid-1.3.12硬件环境是友坚恒天的idea6410开发板,软件环境是linux-2.6.242、编译:a、libusb:./configure --host=arm-linux --prefix=/usr/ccid/ CC=/usr...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 5,429
精华内容 2,171
关键字:

libusb安装linux

linux 订阅