LinuxGod

LinuxGod.net
Linux大神网——精选每一篇高品质的技术干货
  1. 首页
  2. 开源快讯
  3. 正文

Linux平台上的usb驱动开发,基于libusb的无驱设计

2023年6月30日 225点热度

驱动开发向来是内核开发中工作量最多的一块,随着USB设备的普及,大量的USB设备的驱动开发也成为驱动开发者手身上做的最多的事情。本文主要介绍Linux平台下基于libusb的驱动开发,希望才能给从事Linux驱动开发的同事带来些帮助,更希望才能给其他平台上的无驱设计带来些帮助。文章是我在工作中使用libusb的一些总结,难免有错误,如有不当的地方,还请见谅。[1]Linux平台上的usb驱动开发,主要有内核驱动的开发和基于libusb的无驱设计。对于内核驱动的大部份设备,例如带usb插口的hid设备,linux本身早已自带了相关的驱动,我们只要操作设备文件便可以完成对设备大部份的操作,而另外一些设备,例如自己设计的硬件产品,这种驱动就须要我们驱动工程师开发出相关的驱动了。内核驱动有它的优点,但是内核驱动在个别情况下会碰到如下的一些问题:1当使用我们产品的顾客有2.4内核的平台linux查看系统句柄数,同时也有2.6内核的平台,我们要设计的驱动是要兼容两个平台的,就连makefile我们都要写两个。2当我们要把linux移植到嵌入平台上,你会发觉原来linux自带的驱动移过去还挺大的,我的内核其实是越小越好拉,这样有必要么。

这还不是最苦恼的地方,假如嵌入平台是顾客的,顾客要订购你的产品,你忽然发觉顾客设备里的系统和你的环境不一样,它没有你要的驱动了,你的程序运行不了,你会先想:“没关系,我写个内核驱动加载一下不就行了“。却发觉顾客连insmod加载模块的工具都没移植,那时你就瞧瞧老天,说声我如何这么倒霉啊,顾客可不想你动他花了n时间移植的内核哦3花了些工夫写了个新产品的驱动linux虚拟主机,挺有成就感啊,代码质量也是相当的有水准啊。正当你陶醉在你的代码中时,客服不断的电邮来了,“客户须要2.6.5内核的驱动,config文件我早已发你了”“客户须要四核的2.6.18-smp的驱动”“客户的平台是自己订制的是2.6.12-xxx“你恨不得把驱动的源代码给顾客,这样省得编译了。你的一部份工作时间编译内核,订制驱动有问题形成必然会有想办法解决问题的人,libusb的出现给我们带来了个别便捷,即节省了我们的时间,也减少了公司的成本。所以在一些情况下,就可以考虑使用libusb的无驱设计了。下边我们就来详尽讨论一下libusb,并以写一个hid设备的驱动来讲解怎样运用libusb,至于文章中涉及的usb合同的知识,限于篇幅,就不详尽讲解了,相关的可自行查看usb相关合同。

linux系统镜像iso文件_linux查看系统句柄数_linux系统怎么编辑文件

一libusb介绍libusb设计了一系列的外部API为应用程序所调用,通过这种API应用程序可以操作硬件,从libusb的源代码可以看出,这种API调用了内核的底层插口,和kerneldriver中所用到的函数所实现的功能差不多,只是libusb愈加接近USB规范。促使libusb的使用也比开发内核驱动相对容易的多。Libusb的编译安装请查看Readme,这儿不做解读二libusb的外部插口2.1初始化设备插口这种插口也可以称为核心函数,它们主要拿来初始化并找寻相关设备。usb_init函数定义:voidusb_init(void);从函数名称可以看出这个函数是拿来初始化相关数据的,这个函数你们只要记住必须调用就行了,并且是一开始就要调用的.usb_find_busses函数定义:intusb_find_busses(void);找寻系统上的usb总线,任何usb设备都通过usb总线和计算机总线通讯。因而和其他设备通讯。此函数返回总线数。usb_find_devices函数定义:intusb_find_devices(void);找寻总线上的usb设备,这个函数必要在调用usb_find_busses()后使用。

以上的三个函数都是一开始就要用到的,此函数返回设备数目。usb_get_busses函数定义:structusb_bus*usb_get_busses(void);这个函数返回总线的列表,在高一些的版本中早已用不到了,这在下边的实例中会有讲解2.2操作设备插口usb_open函数定义:usb_dev_handle*usb_open(struct*usb_devicedev);打开要使用的设备red hat linux,在对硬件进行操作前必需要调用usb_open来打开设备,这儿你们看见有两个结构体usb_dev_handle和usb_device是我们在开发中常常见到的,有必要把它们的结构看一看。在libusb中的usb.h和usbi.h中有定义。这儿我们不妨理解为返回的usb_dev_handle表针是指向设备的句柄linux查看系统句柄数,而行参里输入就是须要打开的设备。usb_close函数定义:intusb_close(usb_dev_handle*dev);与usb_open相对应,关掉设备,是必须调用的,返回0成功,操作系统通讯的插口,这个函数必须被调用,由于只有注册插口,能够做相应的操作。

linux查看系统句柄数_linux系统镜像iso文件_linux系统怎么编辑文件

Interface指bInterfaceNumber.(下边介绍的usb_release_interface与之相对应,也是必须调用的函数)usb_release_interface函数定义:intusb_release_interface(usb_dev_handle*dev,intinterface);注销被usb_claim_interface函数调用后的插口,释放资源,和usb_claim_interface对应使用。2.3控制传输插口usb_control_msg函数定义:intusb_control_msg(usb_dev_handle*dev,intrequesttype,intrequest,intvalue,intindex,char*bytes,intsize,inttimeout);从默认的管线发送和接受控制数据usb_get_string函数定义:intusb_get_string(usb_dev_handle*dev,intindex,intlangid,char*buf,size_tbuflen);usb_get_string_simple函数定义:intusb_get_string_simple(usb_dev_handle*dev,intindex,char*buf,size_tbuflen);usb_get_descriptor函数定义:intusb_get_descriptor(usb_dev_handle*dev,unsignedchartype,unsignedcharindex,void*buf,intsize);usb_get_descriptor_by_endpoint函数定义:intusb_get_descriptor_by_endpoint(usb_dev_handle*dev,intep,unsignedchartype,unsignedcharindex,void*buf,intsize);2.4批传输插口usb_bulk_write函数定义:intusb_bulk_write(usb_dev_handle*dev,intep,char*bytes,intsize,inttimeout);usb_interrupt_read函数定义:intusb_interrupt_read(usb_dev_handle*dev,intep,char*bytes,intsize,inttimeout);2.5中断传输插口usb_bulk_write函数定义:intusb_bulk_write(usb_dev_handle*dev,intep,char*bytes,intsize,inttimeout);usb_interrupt_read函数定义:intusb_interrupt_read(usb_dev_handle*dev,intep,char*bytes,intsize,inttimeout);

本作品采用 知识共享署名 4.0 国际许可协议 进行许可
标签: 内核 函数 定义 接口 驱动
最后更新:2023年6月30日

Linux大神网

每日更新,欢迎收藏♥ 不积跬步无以至千里,加油,共勉。

点赞
< 上一篇
下一篇 >

Linux大神网

每日更新,欢迎收藏♥
不积跬步无以至千里,加油,共勉。

最新 热点 随机
最新 热点 随机
Linux文件系统种类 如何卸载用源码包安装的软件?在线视频教程推荐 「职位」ASP.、PHP、Linux服务器集群开发 Torvalds:Linux内核开发的创新前景充满了热情 Linux文件系统的结构从终端窗口探索Linux目录树结构 卸载软件命令Linux.You linux软件开发如何入门?学习Linux步骤及学习方法介绍 14年Linux发行版的有趣历史观点 Linux中不像Windows可以直接在控制面板中卸载? 2018年波及众多Linux发行版的性能对比会更加深入 如何用源码包安装的软件?name的方法总结 Linux之父李纳斯托瓦兹开发的Linux只是一个内核 Linux系统中的apt和apt-get的区别及解决办法! Linux系统发行版的一种方法,除此以外 MacM1上安装Docker和CentOS,您需要遵循的步骤 linux光驱启动怎么设置 常见的几种设置方法,你知道几个? 关于ESXi主机磁盘空间回收的具体操作步骤及步骤 Linux设置显示中文和设置字体设置中文一个都不能少 如何在Linux系统中使用命令查看Linux发行版版本信息 电脑的系统出现问题需要修复时光驱,两种设置方法
嵌入式Linux操作系统学习规划+LINUX路线,主攻江苏电信天翼校园客户端故障指引及解决办法(101)英特尔GMAGMA950显卡驱动程序/WIN8/8.1电信校园网宽带用USB数据线共享给电脑无线上网国防科大开源操作系统:它只是一个吉祥的象征10个常用Linux文本查看命令及其详细说明和使用示例Linux嵌入式系统内核裁剪与定制方法的介绍情况淘宝教育热卖C语言编程开发C++程序设计零基础入门课程从CPU、内存、硬盘、显卡等这些方面安装Linux系统的最低配置Linux通过chkconfig设置开机启动服务创建的几种常见方式(技术分析)Linux多线程的使用与操作系统的区别通常rar命令由一个主命令加若干选项(可选)构成RedHatLinux中自动运行程序中的应用linux 读写文件 关于Linux内核的神秘面纱,你知道几个?使用wget实用程序的有用命令行工具的使用怎么设置linux开机项自启动?方式是怎样的?嵌入式Linux应用层与驱动层要想学习关于Linux内核的交叉编译步骤和方法:步骤、方法STM32嵌入式linux开发流程及应用程序分析-STMlinux下有哪些文件在介绍lsof命令实用用法介绍?
示例demo最简单的demo:线程终止的4种方式 如何在Linux系统上下载和安装Steam呢?如何操作 我们要干什么?编程,对,编程的编程! 如何远程连接服务器桌面?如何保证在ssh故障情况下还能够访问到服务器? 红旗Linux桌面版4.0从软盘启动硬盘最详细的安装图解 Linux系统修改文件夹权限的常见用法及管理 一段程序是告诉计算机应该如何完成一个任务的程序 unix系统界面 没有最好的Linux发行版是什么样的? mputrose,并改名为333bmp文件传送至服务器 (知识点)Linux文件权限详解:执行权限 安卓在Linux上运行安卓应用比在Windows上更简单 及帐户管理、bash内部命令帮助$helppwd2 完后,目录可以自动生成,如何生成可参考右边的帮助 Linux上架构示意图munin的架构非常简单的配置和客户端插件 linux文件空间常用的命令有df、du和ls等 阿里云>社区>主题地图S>查看存储推荐 我们还学会了检查系统的内核版本的Linux内核。 主频93.75MHz的MIPS64NECVR4300处理器在N64上运行 《深入linux设备驱动程序内核机制》(1)_社会万象_光明网(图) 高效搭建Linux Android开发环境,轻松提升开发体验
标签聚合
命令 虚拟机 linux服务器 linux系统 文件目录 内核 软件 文件 操作 应用
书籍
课程
技术群
技术干货大合集↓
  • 2023年9月 / 69篇
  • 2023年8月 / 93篇
  • 2023年7月 / 94篇
  • 2023年6月 / 90篇
  • 2023年5月 / 93篇
  • 2023年4月 / 90篇
  • 2023年3月 / 129篇
  • 2023年2月 / 84篇
  • 2023年1月 / 161篇
  • 2022年12月 / 187篇
  • 2022年11月 / 76篇
友情链接:

Linux书籍 | Linux命令 | Linux系统 | RHCE红帽认证 | Linux软件 | Linux教程 | CentOS系统 | Linux内核 | Linux服务器 | Linux大神 | IT资源

COPYRIGHT © 2023 linuxgod.net ALL RIGHTS RESERVED.