libusb 源码(win32 & linux USB开发)

上传者: rendao0563 | 上传时间: 2021-09-14 09:42:01 | 文件大小: 337KB | 文件类型: RAR
驱动开发向来是内核开发中工作量最多的一块,随着USB设备的普及,大量的USB设备的驱动开发也成为驱动开发者手头上做的最多的事情。本文主要介绍Linux平台下基于libusb的驱动开发,希望能够给从事Linux驱动开发的朋友带来些帮助,更希望能够给其他平台上的无驱设计带来些帮助。文章是我在工作中使用libusb的一些总结,难免有错误,如有不当的地方,还请指正。 [1]   Linux 平台上的usb驱动开发,主要有内核驱动的开发和基于libusb的无驱设计。   对于内核驱动的大部分设备,诸如带usb接口的hid设备,linux本身已经自带了相关的驱动,我们只要操作设备文件便可以完成对设备大部分的操作,而另外一些设备,诸如自己设计的硬件产品,这些驱动就需要我们驱动工程师开发出相关的驱动了。内核驱动有它的优点,然而内核驱动在某些情况下会遇到如下的一些问题:   1 当使用我们产品的客户有2.4内核的平台,同时也有2.6内核的平台,我们要设计的驱动是要兼容两个平台的,就连makefile 我们都要写两个。   2 当我们要把linux移植到嵌入平台上,你会发现原先linux自 带的驱动移过去还挺大的,我的内核当然是越小越好拉,这样有必要么。这还不是最郁闷的地方,如果嵌入平台是客户的,客户要购买你的产品,你突然发现客户设 备里的系统和你的环境不一样,它没有你要的驱动了,你的程序运行不了,你会先想:“没关系,我写个内核驱动加载一下不就行了“。却发现客户连insmod加载模块的工具都没移植,那时你就看看老天,说声我怎么那么倒霉啊,客户可不想你动他花了n时间移植的内核哦   3 花了些功夫写了个新产品的驱动,挺有成就感啊,代码质量也是相当的有水准啊。正当你沉醉在你的代码中时,客服不断的邮件来了,“客户需要2.6.5内核的驱动,config文件我已经发你了” “客户需要双核的 2.6.18-smp 的驱动” “客户的平台是自己定制的是2.6.12-xxx “ 你恨不得把驱动的源代码给客户,这样省得编译了。你的一部分工作时间编译内核,定制驱动   有问题产生必然会有想办法解决问题的人, libusb的出现给我们带来了某些方便,即节约了我们的时间,也降低了公司的成本。 所以在一些情况下,就可以考虑使用libusb的无驱设计了。   下面我们就来详细讨论一下libusb, 并以写一个hid设备的驱动来讲解如何运用libusb,至于文章中涉及的usb协议的知识,限于篇幅,就不详细讲解了,相关的可自行查看usb相关协议。   一 libusb 介绍   libusb 设计了一系列的外部API 为应用程序所调用,通过这些API应用程序可以操作硬件,从libusb的源代码可以看出,这些API 调用了内核的底层接口,和kernel driver中所用到的函数所实现的功能差不多,只是libusb更加接近USB 规范。使得libusb的使用也比开发内核驱动相对容易的多。   Libusb 的编译安装请查看Readme,这里不做详解   二 libusb 的外部接口   2.1 初始化设备接口   这些接口也可以称为核心函数,它们主要用来初始化并寻找相关设备。   usb_init   函数定义: void usb_init(void);   从函数名称可以看出这个函数是用来初始化相关数据的,这个函数大家只要记住必须调用就行了,而且是一开始就要调用的.   usb_find_busses   函数定义: int usb_find_busses(void);   寻找系统上的usb总线,任何usb设备都通过usb总线和计算机总线通信。进而和其他设备通信。此函数返回总线数。   usb_find_devices   函数定义: int usb_find_devices(void);   寻找总线上的usb设备,这个函数必要在调用usb_find_busses()后使用。以上的三个函数都是一开始就要用到的,此函数返回设备数量。   usb_get_busses   函数定义: struct usb_bus *usb_get_busses(void);   这个函数返回总线的列表,在高一些的版本中已经用不到了,这在下面的实例中会有讲解   2.2 操作设备接口   usb_open   函数定义: usb_dev_handle *usb_open(struct *usb_device dev);   打开要使用的设备,在对硬件进行操作前必须要调用usb_open 来打开设备,这里大家看到有两个结构体 usb_dev_handle 和 usb_device 是我们在开发中经常碰到的,有必要把它们的结构看一看。在libusb 中的usb.h和usbi.h中有定义。   这里我

文件下载

资源详情

[{"title":"( 43 个子文件 337KB ) libusb 源码(win32 & linux USB开发)","children":[{"title":"libusb-1.0.8","children":[{"title":"missing <span style='color:#111;'> 10.87KB </span>","children":null,"spread":false},{"title":"ltmain.sh <span style='color:#111;'> 237.55KB </span>","children":null,"spread":false},{"title":"COPYING <span style='color:#111;'> 25.82KB </span>","children":null,"spread":false},{"title":"compile <span style='color:#111;'> 3.62KB </span>","children":null,"spread":false},{"title":"aclocal.m4 <span style='color:#111;'> 311.63KB </span>","children":null,"spread":false},{"title":"INSTALL <span style='color:#111;'> 9.20KB </span>","children":null,"spread":false},{"title":"config.h.in <span style='color:#111;'> 2.32KB </span>","children":null,"spread":false},{"title":"examples","children":[{"title":"lsusb.c <span style='color:#111;'> 1.61KB </span>","children":null,"spread":false},{"title":"Makefile.in <span style='color:#111;'> 17.85KB </span>","children":null,"spread":false},{"title":"dpfp_threaded.c <span style='color:#111;'> 11.37KB </span>","children":null,"spread":false},{"title":"dpfp.c <span style='color:#111;'> 10.53KB </span>","children":null,"spread":false},{"title":"Makefile.am <span style='color:#111;'> 356B </span>","children":null,"spread":false}],"spread":true},{"title":"configure <span style='color:#111;'> 383.10KB </span>","children":null,"spread":false},{"title":"ChangeLog <span style='color:#111;'> 57.38KB </span>","children":null,"spread":false},{"title":"PORTING <span style='color:#111;'> 3.76KB </span>","children":null,"spread":false},{"title":"install-sh <span style='color:#111;'> 12.88KB </span>","children":null,"spread":false},{"title":"Makefile.in <span style='color:#111;'> 25.08KB </span>","children":null,"spread":false},{"title":"TODO <span style='color:#111;'> 290B </span>","children":null,"spread":false},{"title":"depcomp <span style='color:#111;'> 17.16KB </span>","children":null,"spread":false},{"title":"AUTHORS <span style='color:#111;'> 415B </span>","children":null,"spread":false},{"title":"libusb-1.0.pc.in <span style='color:#111;'> 245B </span>","children":null,"spread":false},{"title":"configure.ac <span style='color:#111;'> 3.96KB </span>","children":null,"spread":false},{"title":"config.guess <span style='color:#111;'> 44.40KB </span>","children":null,"spread":false},{"title":"README <span style='color:#111;'> 684B </span>","children":null,"spread":false},{"title":"config.sub <span style='color:#111;'> 32.86KB </span>","children":null,"spread":false},{"title":"NEWS <span style='color:#111;'> 1.21KB </span>","children":null,"spread":false},{"title":"doc","children":[{"title":"Makefile.in <span style='color:#111;'> 9.82KB </span>","children":null,"spread":false},{"title":"doxygen.cfg.in <span style='color:#111;'> 52.78KB </span>","children":null,"spread":false},{"title":"Makefile.am <span style='color:#111;'> 182B </span>","children":null,"spread":false}],"spread":false},{"title":"THANKS <span style='color:#111;'> 215B </span>","children":null,"spread":false},{"title":"Makefile.am <span style='color:#111;'> 621B </span>","children":null,"spread":false},{"title":"libusb","children":[{"title":"sync.c <span style='color:#111;'> 10.95KB </span>","children":null,"spread":false},{"title":"os","children":[{"title":"linux_usbfs.h <span style='color:#111;'> 4.03KB </span>","children":null,"spread":false},{"title":"darwin_usb.c <span style='color:#111;'> 51.37KB </span>","children":null,"spread":false},{"title":"darwin_usb.h <span style='color:#111;'> 4.27KB </span>","children":null,"spread":false},{"title":"linux_usbfs.c <span style='color:#111;'> 58.89KB </span>","children":null,"spread":false}],"spread":false},{"title":"libusb.h <span style='color:#111;'> 40.72KB </span>","children":null,"spread":false},{"title":"io.c <span style='color:#111;'> 87.21KB </span>","children":null,"spread":false},{"title":"Makefile.in <span style='color:#111;'> 25.40KB </span>","children":null,"spread":false},{"title":"core.c <span style='color:#111;'> 53.94KB </span>","children":null,"spread":false},{"title":"descriptor.c <span style='color:#111;'> 18.97KB </span>","children":null,"spread":false},{"title":"libusbi.h <span style='color:#111;'> 28.49KB </span>","children":null,"spread":false},{"title":"Makefile.am <span style='color:#111;'> 512B </span>","children":null,"spread":false}],"spread":false}],"spread":false}],"spread":true}]

评论信息

  • khf0623 :
    说实话不知道为啥下载了这个。再下载看看
    2019-01-07
  • xdayong :
    还在学习中,与官网上下的有区别
    2015-07-10
  • allen4361 :
    挺有用的,用LIBUSB可实现HID USB读写。。。。
    2014-10-22
  • manshenmin :
    非常有用,学东西了。
    2014-08-11
  • longting1111 :
    不知道怎么在CentOS上编译,和官网上下载的一样
    2014-06-18

免责申明

【只为小站】的资源来自网友分享,仅供学习研究,请务必在下载后24小时内给予删除,不得用于其他任何用途,否则后果自负。基于互联网的特殊性,【只为小站】 无法对用户传输的作品、信息、内容的权属或合法性、合规性、真实性、科学性、完整权、有效性等进行实质审查;无论 【只为小站】 经营者是否已进行审查,用户均应自行承担因其传输的作品、信息、内容而可能或已经产生的侵权或权属纠纷等法律责任。
本站所有资源不代表本站的观点或立场,基于网友分享,根据中国法律《信息网络传播权保护条例》第二十二条之规定,若资源存在侵权或相关问题请联系本站客服人员,zhiweidada#qq.com,请把#换成@,本站将给予最大的支持与配合,做到及时反馈和处理。关于更多版权及免责申明参见 版权及免责申明