上一页 1 2 3 4 5 6 ··· 11 下一页
  2012年2月13日
摘要: usb firmware主要工作是满足usb 协议所定义的标准请求(usb协议第9章第4节),不同的firmware因为硬件不同而操作有所不同,但目的都是完成主控制器对设备的标准请求,大致框图如下: 阅读全文
posted @ 2012-02-13 14:36 image eye 阅读(1389) 评论(0) 推荐(0) 编辑
  2012年2月10日
摘要: 有了前面的设备驱动基础,以及usb方面的基础知识,则可以很轻松的就理解usb-skeleton例程,并轻松的就能写出自己的简易usb driver了。下面是usb-skeleton例程的简易解析:/** USB Skeleton driver - 2.0** Copyright (C) 2001-2004 Greg Kroah-Hartman (greg@kroah.com)**This program is free software; you can redistribute it and/or*modify it under the terms of the GNU General Pu 阅读全文
posted @ 2012-02-10 17:00 image eye 阅读(3351) 评论(1) 推荐(0) 编辑
  2012年2月4日
摘要: Hub正常工作后,主控制器就会定时询问hub是否有中断产生,当hub端口上有一个设备插入或拔除,hub就向主控制器发送urb请求,即把hub端口的变化状况告诉主控制器,这是通过urb请求来完成的,主机在处理完了这个urb后,就会调用urb所提供的完成函数,来调用hub的中断函数,即hub_irq。Hub_irq是hub的中断处理函数,处理程序首先判断主控制器处理urb的结果状态,如果状态是OK的,则继续处理。1.扫描hub的所有端口,确定是哪个端口发生了变化。端口是用位图来表示的,一个long型数据可以表示32个hub端口(每位表示一个端口),有多少个端口,就用多少位表示,而8位用一个字节表示 阅读全文
posted @ 2012-02-04 20:09 image eye 阅读(3256) 评论(0) 推荐(0) 编辑
  2012年2月2日
摘要: 在终端下执行 ps –A| grep khubd,会显示出khubd的进程,这个就是hub的守护进程,我们的设备插入usb接口(不论是插入跟集线器,还是子集线器)后,就是这个守护进程发现的,然后通过中断的方式通知主控制,主控制器才开始调用hub的探测函数,来解析我们的设备的。在上节hub驱动安装OK后,系统会调用kthread_run(hub_thread, NULL, "khubd")来启动守护进程的,其中的khubd,就是守护进程名称,这个进程几乎是个死循环,只有在执行kthread_should_stop时才会退出,而进程也不是时时都在执行的,当hub没有设备插入时, 阅读全文
posted @ 2012-02-02 17:21 image eye 阅读(3781) 评论(0) 推荐(0) 编辑
  2012年1月31日
摘要: 按照设备模型的总线,设备,驱动模式,一条总线会把所有这条总线上的设备和驱动都挂载到总线的设备链表和驱动链表上,具体到usb总线上,就是usb主控制器,hub等设备,都需要按照设备模型的要求,作为设备挂载到usb总线的设备链表上,同时也需要把usb主控制器,hub的驱动也挂载到驱动链表上,并且使得设备和设备驱动能够相互关联起来,才能使得设备能够使用,完成应有的设备功能。那么usb hub驱动是如何被挂载的,驱动又是如何跟hub设备关联在一起的?首先,要有一条usb总线,就必须有一个usb主控制器,一个usb主控制器对应一条usb总线。一个系统有多少个usb主控制器,就有多少条usb总线,我们常见 阅读全文
posted @ 2012-01-31 16:06 image eye 阅读(18624) 评论(0) 推荐(0) 编辑
  2012年1月30日
摘要: 经过对设备模型的整理,消化,就有了编写一个设备驱动程序的基础。因工作关系,需要熟悉usb设备驱动,因此,就选择usb设备驱动作为开始。一个usb设备,是如何被usb系统发现并安装对应的设备驱动程序的,从而使得usb设备可以正常工作?当一个usb设备通过usb接口,连接到主机时,实际上是链接到了一个usb集线器( hub)的一个接口上,集线器的接口上有了电平的变化(高速设备在D+上有上拉,低速设备D+上有上拉),从而知道这个端口上有了设备的接入,从而可以通知usb主控制器,在集线器的某一个接口上有设备插入了,此时,要采取什么行动,就由usb主机来决定。一般的usb设备可以直接连接到跟集线器上,也 阅读全文
posted @ 2012-01-30 11:37 image eye 阅读(2271) 评论(0) 推荐(0) 编辑
  2012年1月29日
摘要: Kobject,kset是设备模型的基本结构体,设备模型使用这两个结构体来完成设备的层次关系,但在实际的设备驱动编写中,我们基本上用不到kobject,kset这些结构体,是因为这些结构体又被嵌入到更大的结构体中,原因在于kobject,kset结构体只能表征设备的层次关系,但是一个设备的驱动,并不是简单的一个层次关系而已,因此,必需要把kobject,kset结构体嵌入到更大的结构体中,使用kobject,kset来表征层次关系,用其他的成员表示设备驱动的具体功能。在设备模型中,我们将看到,设备驱动主要是由总线,驱动程序,设备三个部分构成,通过这三个标准部件,把各种纷繁杂乱的设备归结过来,达 阅读全文
posted @ 2012-01-29 16:40 image eye 阅读(3398) 评论(0) 推荐(2) 编辑
摘要: Linux2.6以后的设备驱动,都是在设备模型的基础上构建的,因此,要编写linux下的设备驱动程序,不论是usb设备,pci设备等,都需要了解设备模型。设备模型的基础结构体主要是kobject,kset这两个结构体:struct kobject { char * k_name; char name[KOBJ_NAME_LEN]; struct kref kref; struct list_head entry; struct kobject * parent; struct kset * kset; struct kobj_type * ktype; struct dentry * dent 阅读全文
posted @ 2012-01-29 09:48 image eye 阅读(7768) 评论(2) 推荐(2) 编辑
  2012年1月18日
摘要: 链路层经过对上层协议的检查,把数据包上传到了对应的上层协议层,在这里,就是IP层协议。数据到达IP层后,IP层需要进行相应的检查,判断后,才决定是否需要把数据上传到上层。下面就是IP层所需要做的事情.1.首先检测数据包的IP首部是否正确,即对数据包的IP部分的IP首部长度,版本,数据包的大小进行检查,如果符合要求,则继续进行下面的步骤,不符合要求,则释放数据包,直接退出2.检测IP首部是否包含了选项部分,方法就是查看IP首部的总长度字段是否大于IP首部的长度,如果是,则需要把选项部分解析,这个选项部分会在上传到上层协议时就告知是否有选项的。3.检测数据包是否是一个分片数据,如果是一个分片数据, 阅读全文
posted @ 2012-01-18 15:32 image eye 阅读(824) 评论(0) 推荐(0) 编辑
摘要: Connect函数在发送了数据之后,就进入了休眠等待的状态,等待远方发过来的数据来确认链接是否成功。那么数据是如何从网卡那里传递到链路层?数据在网卡的内存中,形成了以256字节为1页的环形缓冲链,每当有数据到达,网卡就会发生一个中断信号,告诉CPU已经有数据到达,此时,CPU通过DMA的方式,去读取网卡内存中的数据,并把数据存放在一个专门开辟来接收这个数据包的skb_buff中,之后,就把接收数据的skb_buff进行排列,并且累加所有skb_buff的个数,如果超过一定的数量在排队等待被取走,则后面不能再继续从网卡中读取数据包,以防止系统内存被过度的消耗掉。因此,在数据链路层,skb_buf 阅读全文
posted @ 2012-01-18 12:16 image eye 阅读(870) 评论(0) 推荐(0) 编辑
上一页 1 2 3 4 5 6 ··· 11 下一页