usb驱动开发24之接口驱动】的更多相关文章

从第一节我们已经知道,usb_generic_driver在自己的生命线里,以一己之力将设备的各个接口送给了linux的设备模型,让usb总线的match函数,也就是usb_device_match,在自己的那条驱动链表里为它们寻找一个合适的接口驱动程序.那么这些接口驱动都从哪里来? 这就要说到每个玩儿linux的人都会知道的那几个著名的命令insmod,modprobe,rmmod.你insmod或modprobe驱动的时候,经过一个曲折的过程,会调用到你驱动里的那个xxx_init函数,进而…
前面struct usb_interface里表示接口设置的struct usb_host_interface被有意的飘过了,咱们在这节主要讲讲这个结构体,同样在include/linux/usb.h文件里定义. /* host-side wrapper for one interface setting's parsed descriptors */ struct usb_host_interface { struct usb_interface_descriptor desc; /* arr…
平台信息: 内核:linux3.4.39系统:android4.4 平台:S5P4418(cortex a9) 作者:瘋耔(欢迎转载,请注明作者) 欢迎指正错误,共同学习.共同进步!! 关注博主新浪博客:http://weibo.com/cpjphone     以下是Samsung Exynos4412搭配TTL转LVDS芯片SN75LVDS83B.LVDS接口LCD为例说明.从硬件接口.驱动配置.背光PWM调节三部分说明. 一.LCD接口原理以及硬件电路 Samsung Exynos4412…
90%的驱动模型都是按照下图开发的 下面来说下设备描述结构是什么东西 打开Linux-2.6.32.2的Source Insight 工程,搜索cdev 比如一个应用程序需要调用read和write这两个指令,然后内核里肯定也存在read和write,可能是xxx_read和xxx_write这样的函数,而驱动就是衔接这用户空间和内核空间的,read和xxx_read以及write和xxx_write就是属于驱动里面的一部分,而read和xxx_read就属于上述图片的一部分,如果这个文件是只读…
1.申请设备号 #include <linux/fs.h> int register_chrdev_region(dev_t first, unsigned int count, char *name); 静态分配字符设备号,从fist开始的count个,name为设备名称(name会出现在/proc/devices和sysfs中),成功返回0,失败返回一个负的错误码 int alloc_chrdev_region(dev_t *dev, unsigned int firstminor, un…
SDIO-Wifi模块是基于SDIO接口的符合wifi无线网络标准的嵌入式模块,内置无线网络协议IEEE802.11协议栈以及TCP/IP协议栈.可以实现用户主平台数据通过SDIO口到无线网络之间的转换.SDIO具有数据传输快,兼容SD.MMC接口等特点. 对于SDIO接口的wifi,首先,它是一个sdio的卡的设备.然后具备了wifi的功能.所以.注冊的时候还是先以sdio的卡的设备去注冊的. 然后检測到卡之后就要驱动他的wifi功能了.显然,他是用sdio的协议,通过发命令和数据来控制的.以…
HDF(Hardware Driver Foundation)驱动框架是HarmonyOS硬件生态开放的基础,为开发者提供了驱动加载.驱动服务管理和驱动消息机制等驱动能力,让开发者能精准且高效地开发驱动程序. 本期,我们将为大家带来HDF驱动框架中USB DDK的解析与指导. 一.USB DDK介绍 USB(Universal Serial Bus)通用串行总线,用于规范电脑与外部设备的连接和通讯,包含了主机端(Host)和设备端(Device).其中,主机端负责USB总线中的数据传输及端口管理…
在第五节我们说过会专门分析函数usb_device_match,以体现模型的重要性.同时,我们还是要守信用的. 再贴一遍代码,看代码就要不厌其烦. static int usb_device_match(struct device *dev, struct device_driver *drv) { /* devices and interfaces are handled separately */ if (is_usb_device(dev)) { /* interface drivers…
通常以应用移植和系统移植的为Andorid系统移植的主要部分.同时为了适应不同平台硬件设备,对源代码进行相应的修改.除了要移植相适应的CPU架构,最重要是移植Linux驱动. 但是由于一些特别的原因,通常要实现的驱动程序所队形的硬件是自己特有的,这就需要从头开始编写驱动程序以及相关的配置文件.不过在了解编写Linux驱动和Andorid实际上没有看起来的那么复杂.因为驱动和HAL的代码远没有Android SDK 和Android 的应用程序的代码量大. 了解基本的指令操作,例如查看Linux内…
由于Android是基于Linux内核的,因此,Android和其他Linux系统的核心部分差异非常小.然而不同版本的Android使用的Linux内核的版本有细微的差异,所以不同Android驱动可能并不通用,因此需要在不同版本和硬件平台上移植驱动程序.所涉及的内容包括C/C++代码库,Andorid SDK API以及应用程序.这一部分通常以最浅显易懂的方式呈现出来,方便理解阅读. 底层的驱动开发通常有比较严苛的环境要求.包含Linux内核,Ecplise,还有Adnroid SDK以及交叉…
                                                                                                  驱动概述 驱动用在哪里?非标准类设备的编写和标准类设备的驱动移植. 驱动实际上是随着linux内核相伴而生的.某段代码能够控制我们的硬件去工作,去动,这段代码就称为我们的驱动代码. 技术只是一种手段,一种技巧,我们应该利用技术去搞出产品. 5.1.1_2.什么是驱动1_2 5.1.1.1.理解驱动的概念…
以前,初步学习过嵌入式Linux驱动开发的基础课程,对于驱动开发可以说是有了一点点微末的基础吧.首先我们要对Android嵌入式系统有一个初步的认识,Android系统发展到今天已经具备了完善的架构.其架构主要分4层,第一层:Linux内核:第二层:c/c++代码库:第三层:Android sdk api:第四层:应用程序.这种分层的结构就好比鸡尾酒从上到下结构清晰. 说道Android系统移植,它是指让Android操作系统在某一个特定的硬件平台上运行.其首要条件是该系统必须支持硬件平台的CP…
一.开启驱动开发之路 1.驱动开发的准备工作 (1)正常运行linux系统的开发板.要求开发板中的linux的zImage必须是自己编译的,不能是别人编译的.原因在于在安装模块的时候会进行安全性校验 (2)内核源码树,其实就是一个经过了配置编译之后的内核源码.我们需要内核源码编译自己的模块 (3)nfs挂载的rootfs,主机ubuntu中必须搭建一个nfs服务器.这对于驱动开发前期是不可或缺的,能够提高我们的开发效率. 2.驱动开发的步骤 (1)驱动源码编写.Makefile编写.编译 (2)…
[序言]很多人都对驱动开发有兴趣,但往往找不到正确的学习方式.当然这跟驱动开发的本土化资料少有关系.大多学的驱动开发资料都以英文为主,这样让很多驱动初学者很头疼.本人从事驱动开发时间不长也不短,大概也就3~4年时间.大多数人都认为会驱动开发的都是牛人,高手之类的.其实高手,牛人不是这样定义的.我们在学习驱动开发之前,一定要明白一个道理:术业有专攻,不要盲目跟风. [贡献者]1> defddr   看雪学院2> StudyRush看雪学院 [本内容适用环境及工具]1> Windows系统…
[作者] 猪头三 个人网站 :http://www.x86asm.com/ [序言] 很多人都对驱动开发有兴趣,但往往找不到正确的学习方式.当然这跟驱动开发的本土化资料少有关系.大多学的驱动开发资料都以英文为主,这样让很多驱动初学者很头疼.本人从事驱动开发时间不长也不短,大概也就3~4年时间.大多数人都认为会驱动开发的都是牛人,高手之类的.其实高手,牛人不是这样定义的.我们在学习驱动开发之前,一定要明白一个道理:术业有专攻,不要盲目跟风. [贡献者] 1> defddr 看雪学院 2> Stu…
[作者]猪头三个人网站 :http://www.x86asm.com/ [序言]很多人都对驱动开发有兴趣,但往往找不到正确的学习方式.当然这跟驱动开发的本土化资料少有关系.大多学的驱动开发资料都以英文为主,这样让很多驱动初学者很头疼.本人从事驱动开发时间不长也不短,大概也就3~4年时间.大多数人都认为会驱动开发的都是牛人,高手之类的.其实高手,牛人不是这样定义的.我们在学习驱动开发之前,一定要明白一个道理:术业有专攻,不要盲目跟风. [贡献者]1> defddr    看雪学院2> Study…
源: Linux 下wifi 驱动开发(四)—— USB接口WiFi驱动浅析…
回到struct usb_hcd,继续努力的往下看. kref,usb主机控制器的引用计数.struct usb_hcd也有自己专用的引用计数函数,看hcd.c文件. static void hcd_release (struct kref *kref) { struct usb_hcd *hcd = container_of (kref, struct usb_hcd, kref); kfree(hcd); } struct usb_hcd *usb_get_hcd (struct usb_h…
此系列是http://blog.csdn.net/fudan_abc/博文的整理,同时加入了自己的理解.很敬佩fudan_abc的文章,仔细学习和分析受益很多.注:fundan_abc所分析linux内核代码所用的版本是2.6.22.6. Q:学习linux下的usb通信要怎样进行? 熟悉linux驱动开发,同时需要了解usb协议规范,对照linux下的usb驱动代码慢慢分析和学习 Q:为什么要开发usb? 在usb出现以前,设备接口多样化(有串口.并口等),而usb可以实现这些接口的统一和标准…
我们知道如果开发工程师不懂RS232 肯定会让人笑话可以想象面向未来USB 接口无处不在因此掌握USB 的原理固件编程及其驱动开发技术势必成为当务之急USB 即插即用的优点和灵活性运用于各种电子产品现在一定成为卖点未来一定成为一般的基本配置如果您仅仅懂得单片机开发技术要想使用USB 接口技术还是有相当大的难度因为这其中还要牵涉到DDK VC++及其Windos 的底层驱动开发技术怎么办为了帮助您全面揭开USB 驱动技术的设计秘密我们历时8 个月的时间结合理论与实践的心得体会写作了本书人们常说不要…
在学习了这么些天的驱动之后,个人觉得驱动就是个架构的问题,只要把架构弄清楚了 然后往里面添砖加瓦就可以了,所以似乎看起来不是太困难,但也许是是我经验不足吧,这只能算是个人浅见了 这两天在学习USB驱动开发,奇怪的是老师居然不讲USB的代码,让人不理解,后来在网上找资料才发现原来内核已经给我们准备了一个usb_skel的代码向我们介绍几本的USB驱动的架构,于是自己分析了一下代码,画了一个我认为的代码架构(比较难看),写了一些注释 相关阅读: Linux驱动开发:网络设备之虚拟网卡 http://…
在学校的时候,曾经采用DDK+Driverstudio+VC6.0环境做过9054视频采集卡的驱动开发,回想起调试过程,记得最清楚的就是过无数次的计算机蓝屏重启....今天第一天来到新公司,老大就说你以前不是做过PCI驱动的开发嘛,手头上刚好有一个PCI-CAN的通信卡项目,你把驱动程序写一写.那就干活吧. 1. PCI设备上电与驱动加载 PCI总线标准是一种将系统外部设备连接起来的总线标准,是PC中最重要的总线,实际上是系统的各个部分如何交互的接口.在当前的 PC 体系结构中,几乎所有的外部设…
从usb总线的那个match函数usb_device_match()开始到现在,遇到了设备,遇到了设备驱动,遇到了接口,也遇到了接口驱动,期间还多次遇到usb_device_match(),又多次与它擦肩而过,“我们以前都失散过,十三年以后,还不是再遇见?” 其实每个人都有一条共同之路,与正义和良知初恋,失身于上学,嫁给了钱,被世俗包养.每个设备也都有一条共同之路,与hub初恋,失身于usb_generic_driver,嫁给了接口驱动,被usb总线保养.人类从没有真正自由过,少年时我们坐在课室…
本文转载自:http://www.360doc.com/content/12/0504/19/8363527_208666082.shtml 编写USB驱动程序步骤:1所有usb驱动都必须创建主要结构体struct usb_driverstruct usb_driver->struct module *owner   (有他可正确对该驱动程序引用计数,应为THIS_MODULE)->const char *name   (驱动名字,运行时可在查看 /sys/bus/usb/drivers/)-…
我们总是很喜欢高潮,不是吗?那就好好对待她哦.我们来看一下linux中的高潮部分设备是怎么从Address进入Configured的. usb_set_configuration函数的代码就不贴了,可以回顾内核去看. usb_disable_device行函数主要意味着如果设备已经在Configured状态了,就得做些清理工作.都清理些什么怎么去清理?别着急,要想学会,得仔细研究下message.c里的usb_disable_device函数. /* * usb_disable_device -…
现在开始就沿着usb_generic_driver的生命线继续往下走.设备的生命线你可以为是从你的usb设备连接到hub的某个端口时开始,而驱动的生命线就必须得回溯到usb子系统的初始化函数usb_init了. if (retval) goto hub_init_failed; retval = usb_register_device_driver(&usb_generic_driver, THIS_MODULE); if (!retval) goto out; 在usb子系统初始化的时候就调用…
现在已经使用GET_DESCRIPTOR请求取到了包含一个配置里所有相关描述符内容的一堆数据,这些数据是raw的,即原始的,所有数据不管是配置描述符.接口描述符还是端点描述符都挤在一起,所以得想办法将它们给分开.,于是usb_parse_configuration()就做这些事. static int usb_parse_configuration(struct device *ddev, int cfgidx, struct usb_host_config *config, unsigned…
函数usb_control_msg完成一些初始化后调用了usb_internal_control_msg之后就free urb.剩下的活,全部留给usb_internal_control_msg去做了,那就去了解一下它背后的生活吧. /*-------------------------------------------------------------------*/ // returns status (negative) or length (positive) static int…
暂时先告别媒人,我们去分析各自的生命旅程,最后还会回到usb_device_match函数. 首先当你将usb设备连接在hub的某个端口上,hub检测到有设备连接了进来,它会为设备分配一个struct usb_device结构的对象并初始化,并调用设备模型提供的接口将设备添加到usb总线的设备列表里,然后usb总线会遍历驱动列表里的每个驱动,调用自己的match函数看它们和你的设备或接口是否匹配.hub检测到自己的某个端口有设备连接了进来后,它会调用core里的usb_alloc_dev函数为s…
平台信息: 内核:linux3.4.39系统:android4.4 平台:S5P4418(cortex a9) 作者:瘋耔(欢迎转载,请注明作者) 欢迎指正错误,共同学习.共同进步!! 关注博主新浪博客:http://weibo.com/cpjphone 参考:S5PV210显示驱动分析与移植(android) 这篇文章中转载的成分比较多,不过大部分内容是从芯片手册上翻译过来.Framebuffer部分是黄冈老师--<嵌入式Linux之我行>这一系列博客中的,嵌入式Linux之我行这系列博客写…