怎么写usb驱动

1. 怎么做usb的驱动

你用的是笔记本吗?从本人的维修经验来看无法识别,一是电脑无法识别USB设备。

二是USB设备不能被电脑识别。我们先要判断是电脑的问题还是USB设备的问题。我们可以用其他的USB设备来测试电脑有没有问题。

如果是电脑的问题。你的电脑是不是被病毒破坏。USB2.0的驱动是不是安装完好或版本不兼容。有没有软件冲突(先解决软件问题)一般情况出来一个安装驱动程序的提示。

如果是电脑硬件问题。我们先用万用表测量USB的四条线(红+5V 白DATA-数据- 绿DATA-数据- 黑 地线)万用表红表笔对地黑表笔测量(白线和渌线。的阻值不相差50欧,这两条线都是从南桥出来的,如果阻值变化过大则可以判断是南桥问题。说明USB在南桥内部的模块烧毁。

在来看看外面的USB设备现在很多都要驱动程序。即使没有驱动程序也不会出来无法识别的情况。出现无法识别的情况有几种。一USB数据线不通或接触不良一般都接触那个地方因为时间长可能里面生锈有胀东西还可能有东西在里面挡住了。二 USB线不通。红线不通什么反应也不会有,白线不通无法识别。绿线不通也是无法识别。白线和绿线不可以接反。也是无法识别。黑线不通也没有反应,这个测量的方法上面已经讲到。

注意.红线5V电压低也可导致无法识别.

三 USB机板内部问题。1晶振不良,不起振。2晶振电容不良(20P)有两个

3复位电容电阻不良。复位电压偏底偏高 4三端IC不良为IC提供电压不够5.

主IC不良

祝你好运!

2. 如何写一个Android USB接口驱动

说到 android 驱动是离不开 Linux 驱动的。

Android 内核采用的是 Linux2.6 内核 (最近Linux 3.3 已经包含了一些 Android 代码)。但 Android 并没有完全照搬 Linux 系统内核,除了对Linux 进行部分修正,还增加了不少内容。

android 驱动 主要分两种类型:Android 专用驱动 和 Android 使用的设备驱动(linux)。 Android 专有驱动程序: 1)Android Ashmem 匿名共享内存; 为用户空间程序提供分配内存的机制,为进程间提供大块共享内存,同时为内核提供回收和管理这个内存。

2)Android Logger 轻量级的LOG(日志) 驱动; 3)Android Binder 基于 OpenBinder 框架的一个驱动; 4)Android Power Management 电源管理模块; 5)Low Memory Killer 低内存管理器; 6)Android PMEM 物理内存驱动; 7)USB Gadget USB 驱动(基于 gaeget 框架); 8)Ram Console 用于调试写入日志信息的设备; 9)Time Device 定时控制设备; 10)Android Alarm 硬件时钟; Android 上的设备驱动: 1)Framebuff 显示驱动; 2)Event 输入设备驱动; 3)ALSA 音频驱动; 4)OSS 音频驱动; 5)v412摄像头:视频驱动; 6)MTD 驱动; 7)蓝牙驱动; 8)WLAN 设备驱动; Android 专有驱动程序 1.Android Ashmem 为用户空间程序提供分配内存的机制,为进程间提供大块共享内存,同时为内核提供回收和管理这个内存。 设备节点:/dev/ashmen .主设备号 10. 源码位置: include/linux/ashmen.h Kernel /mm/ashmen.c 相比于 malloc 和 anonymous/named mmap 等传统的内存分配机制,其优势是通过内核驱动提供了辅助内核的内存回收算法机制(pin/unoin) 2.Android Logger 无论是底层的源代码还上层的应用,我们都可以使用 logger 这个日志设备看、来进行调试。

设备节点: /dev/log/main /dev/log/event /dev/log/radio 源码位置:include/linux/logger.h include/linux/logger.c 3.Android Binder IPC Binder 一种进程间通信机制。他的进程能够为其它进程提供服务 ----- 通过标准的 Linux 系统调用 API。

设备节点 :/dev/binder 源码位置:Kernel/include/linux/binder.h Kernel/drivers/misc/binder.c 4.Android Power Management 一个基于标准 linux 电源管理的轻量级 Android 电源管理系统,在 drivers/android/power.c kernel/power/ 5.Low Memory Killer 它在用户空间中指定了一组内存临界值,当其中某个值与进程描述中的 oom_adj 值在同一范围时,该进程将被Kill掉(在parameters/adj中指定oome_adj 的最小值)。它与标准的Linux OOM机制类似,只是实现方法不同 源码位置:drivers/misc/lowmemorykiller.c 6.Android PMEM PMEM 主要作用就是向用户空间提供连续的物理内存区域。

1.让 GPU 或 VPU 缓冲区共享 CPU 核心。 2.用于 Android service 堆。

源码位置:include/linux/android_pmem.h drivers/android/pmem.c 7.USB Gadget 基于标准 Linux USB gaeget 驱动框架的设备驱动。 源码位置:drivers/usb/gadet/ 8.Ram Console 为了提供调试功能,android 允许将调试日志信息写入这个设备,它是基于 RAM 的 buffer. 源码位置: drivers/staging/android/ram_console.c 9.Time Device 定时控制,提供了对设备进行定时控制的功能。

源码位置:drivers/staging/android/timed_output.c(timed_gpio.c) 10.Android Alarm 提供一个定时器,用于把设备从睡眠状态唤醒,同时它还提供了一个即使在设备睡眠时也会运行的时钟基准。 设备节点:/dev/alarm 源码位置:drivers/trc/alarm.c Android 设备驱动 1. Framebuffer 帧缓存设备 Framebuffer 驱动在 Linux 中是标准的显示设备的驱动。

对于 PC 系统,它是显卡的驱动 ; 对于嵌入式 SOC 处理器系统,它是 LCD 控制器或者其他显示控制器的驱动。它是一个字符设备,在文件系统中设备节点通常是 /dev/fbx 。

每个系统可以有多个显示设备 , 依次用 /dev/fbO 、/dev/fb l 等来表示。在 Android 系统中主设备号为 29 ,次设备号递增生成。

Android 对 Framebuffer 驱动的使用方式是标准的 , 在 / dev / graphie / 中的 Framebuffer 设备节点由 init 进程自动创建 , 被 libui 库调用 。 Android 的 GUI 系统中 , 通过调用 Framebuffer 驱动的标准接口,实现显示设备的抽象。

Framebuff的结构框架和实现 : linux LCD驱动(二)--FrameBuffer Linux LCD驱动(四)--驱动的实现 2.Event输入设备驱动 Input 驱动程序是 Linux 输入设备的驱动程序 , 分为游戏杆 (joystick) 、鼠标 (mouse 和 mice)和事件设备 (Event queue)3 种驱动程序。其中事件驱动程序是目前通用的程序,可支持键盘 、鼠标、触摸屏等多种输入设备。

Input 驱动程序的主设备号是 l3 ,每一种 Input 设备从设备号占 用5 位 , 3 种从设备号分配是 : 游戏杆 0 ~ 61 ; Mouse 鼠标 33 ~ 62 ; Mice 鼠标 63 ; 事件设备 64 ~ 95 ,各个具体的设备在 misc 、touchscreen 、keyboard 等目录中。 Event 设备在用户空问使用 read 、ioctl 、poll 等文件系统的接口操作, read 用于读取输入信息, ioctl 用于获取和设置信息, poll 用于用户空间的阻塞,当内核有按键等中断时,通过在中断中唤醒内核的 poll 实现。

3. 怎样写Linux下的USB设备驱动程序

写一个USB的驱动程序最 基本的要做四件事:驱动程序要支持的设备、注册USB驱动程序、探测和断开、提交和控制urb(USB请求块) 驱动程序支持的设备:有一个结构体struct usb_device_id,这个结构体提供了一列不同类型的该驱动程序支持的USB设备,对于一个只控制一个特定的USB设备的驱动程序来说,struct usb_device_id表被定义为:/* 驱动程序支持的设备列表 */ static struct usb_device_id skel_table [] = { { USB_DEVICE(USB_SKEL_VENDOR_ID, USB_SKEL_PRODUCT_ID) }, { } /* 终止入口 */ }; MODULE_DEVICE_TABLE (usb, skel_table); 对 于PC驱动程序,MODULE_DEVICE_TABLE是必需的,而且usb必需为该宏的第一个值,而USB_SKEL_VENDOR_ID和 USB_SKEL_PRODUCT_ID就是这个特殊设备的制造商和产品的ID了,我们在程序中把定义的值改为我们这款USB的,如:/* 定义制造商和产品的ID号 */#define USB_SKEL_VENDOR_ID 0x1234#define USB_SKEL_PRODUCT_ID 0x2345 这两个值可以通过命令lsusb,当然你得先把USB设备先插到主机上了。

或者查看厂商的USB设备的手册也能得到,在我机器上运行lsusb是这样的结果:Bus 004 Device 001: ID 0000:0000 Bus 003 Device 002: ID 1234:2345 Abc Corp. Bus 002 Device 001: ID 0000:0000 Bus 001 Device 001: ID 0000:0000 得到这两个值后把它定义到程序里就可以了。注册USB驱动程序:所 有的USB驱动程序都必须创建的结构体是struct usb_driver。

这个结构体必须由USB驱动程序来填写,包括许多回调函数和变量,它们向USB核心代码描述USB驱动程序。创建一个有效的 struct usb_driver结构体,只须要初始化五个字段就可以了,在框架程序中是这样的:static struct usb_driver skel_driver = { .owner = THIS_MODULE, .name = "skeleton", .probe = skel_probe, .disconnect = skel_disconnect, .id_table = skel_table,}; 探测和断开:当 一个设备被安装而USB核心认为该驱动程序应该处理时,探测函数被调用,探测函数检查传递给它的设备信息,确定驱动程序是否真的适合该设备。

当驱动程序因 为某种原因不应该控制设备时,断开函数被调用,它可以做一些清理工作。探测回调函数中,USB驱动程序初始化任何可能用于控制USB设备的局部结构体,它 还把所需的任何设备相关信息保存到一个局部结构体中,提交和控制urb:当驱动程序有数据要发送到USB设备时(大多数情况是在驱动程序的写函数中),要分配一个urb来把数据传输给设备: /* 创建一个urb,并且给它分配一个缓存*/ urb = usb_alloc_urb(0, GFP_KERNEL); if (!urb) { retval = -ENOMEM; goto error; } 当urb被成功分配后,还要创建一个DMA缓冲区来以高效的方式发送数据到设备,传递给驱动程序的数据要复制到这块缓冲中去: buf = usb_buffer_alloc(dev->udev, count, GFP_KERNEL, &urb->transfer_dma); if (!buf) { retval = -ENOMEM; goto error; } if (copy_from_user(buf, user_buffer, count)) { retval = -EFAULT; goto error; } 当数据从用户空间正确复制到局部缓冲区后,urb必须在可以被提交给USB核心之前被正确初始化: /* 初始化urb */ usb_fill_bulk_urb(urb, dev->udev, usb_sndbulkpipe(dev->udev, dev->bulk_out_endpointAddr), buf, count, skel_write_bulk_callback, dev); urb->transfer_flags |= URB_NO_TRANSFER_DMA_MAP; 然后urb就可以被提交给USB核心以传输到设备了: /* 把数据从批量OUT端口发出 */ retval = usb_submit_urb(urb, GFP_KERNEL); if (retval) { err("%s - failed submitting write urb, error %d", __FUNCTION__, retval); goto error; } 当urb被成功传输到USB设备之后,urb回调函数将被USB核心调用,在我们的例子中,我们初始化urb,使它指向skel_write_bulk_callback函数,以下就是该函数:static void skel_write_bulk_callback(struct urb *urb, struct pt_regs *regs) { struct usb_skel *dev; dev = (struct usb_skel *)urb->context; if (urb->status && !(urb->status == -ENOENT || urb->status == -ECONNRESET || urb->status == -ESHUTDOWN)) { dbg("%s - nonzero write bulk status received: %d", __FUNCTION__, urb->status); } /* 释放已分配的缓冲区 */ usb_buffer_free(urb->dev, urb->transfer_buffer_length, urb->transfer_buffer, urb->transfer_dma); } 有时候USB驱动程序只是要发送或者接收一些简单的数据,驱动程序也可以不用urb来进行数据的传输,这是里涉及到两个简单的接口函数:usb_bulk_msg和usb_control_msg ,在这个USB框架程序里读操作就是这样的一个应用:/* 进行阻塞的批量读以从设备获取数据 */ retval = usb_bulk_msg(dev->udev, usb_rcvbulkpipe(dev->udev, dev->bulk_in_endpointAddr), dev->bulk_in_buffer, min(dev->bulk_in_size, count), &count, HZ*10); /*如果读成功,复制到用户空间 */ if (!retval) { if (copy_to_user(buffer, dev->bulk_in_buffer, count)) retval = -EFAULT; else retval = count; } usb_bulk_msg接口函数的定义如下:int usb_bulk_msg(struct usb_device *usb_dev,unsigned int pipe,void *data,int len,。

怎么写usb驱动

转载请注明出处育才学习网 » 怎么写usb驱动

知识

大楼日语怎么写

阅读(257)

本文主要为您介绍大楼日语怎么写,内容包括建筑物用日语怎么说,“楼”用日语怎么写,急会的快点教下,问下教学大楼日文是怎么说的。谢谢:ありがとう/a ri ga to u。ありがとう ございます/a ri ga to u go za i ma su(敬语)。 どう

知识

西英语单词怎么写

阅读(267)

本文主要为您介绍西英语单词怎么写,内容包括西英文怎么写,伊西朵拉的英文怎么写,西字英文怎么写。中文名:《西游记》外文名:Journey to the West作者:吴承恩《西游记》是中国古代第一部浪漫主义长篇神魔小说。该书以“唐僧

知识

古诗句作文怎么写

阅读(208)

本文主要为您介绍古诗句作文怎么写,内容包括古诗词作文怎么写,求强调写文章时一个字的重要性的古诗句最好全一点,比如说,印象中,关于古诗的作文怎么写。《唐诗纪事》及陶岳《五代史补》卷三载:晚唐诗僧齐已作《早梅》诗:“万木冻欲折,孤根暖独

知识

结婚文书怎么写

阅读(660)

本文主要为您介绍结婚文书怎么写,内容包括怎样写结婚文书,给女方家的结婚日子文书怎么写,结婚发喜包袱的文书怎么写。结婚吉课天作之合佳偶天成大德郭府亲家翁先生、亲家母女士台鉴:乾造:吾门幼男张小刚〄农历一九八一年 十二 月 初八 日(公历

知识

芯字繁体怎么写

阅读(165)

本文主要为您介绍芯字繁体怎么写,内容包括心的繁体字怎么写,心字繁体字怎么写,芯的繁体字怎么写。繁体字也是”心“心,读音:xīn笔划:4五笔:NYNY部首:心结构:单一结构五行:金笔顺:点、斜钩、点、点释义:人和高等动物体内主管血液

知识

书架单词怎么写

阅读(171)

本文主要为您介绍书架单词怎么写,内容包括书架的英语单词怎么写,书架的单词怎么写,书架的英语单词怎么写。bookshelf 英 [bʊkʃelf] 美 [ˈbʊkʃɛlf] n. 书架 短语 library bookshelf 图书馆书架

知识

小屁孩日记怎么写

阅读(194)

本文主要为您介绍小屁孩日记怎么写,内容包括小屁孩日记读后感怎么写大概两百字左右,小学生怎样写小屁孩日记的读后感,小屁孩日记拼音怎么写。我很喜欢看《小屁孩日记》这一套书。日记的主人公名叫格雷,日记里一件件有趣的事会让我捧腹大笑。

知识

委托书卖车怎么写

阅读(165)

本文主要为您介绍委托书卖车怎么写,内容包括卖车委托书怎么写,卖车委托书怎么写,车辆委托书该怎么写。授权委托书委托人:(也就是你)姓名、性别、出生年月日、住址。代理人:(帮你卖车的朋友)姓名、性别、出生年月日、住址。现XXX(委托人姓名

知识

职业工种怎么写

阅读(215)

本文主要为您介绍职业工种怎么写,内容包括工种怎么填写,工种怎么填,工种怎么填写。一,工种是根据劳动管理的需要,按照生产劳动的性质、工艺技术的特征、或者服务活动的特点而划分的工作种类。根据不同行业划分。二,常见行业类别

知识

著小篆怎么写

阅读(211)

本文主要为您介绍著小篆怎么写,内容包括著字的小篆怎么写9461,怎样学写小篆,人字小篆怎么写。学写小篆,先要识篆.而要识篆,就要有文字学知识,要掌捤八朽,并学会使用有关:具书。“六书”是关于汉字造字结构的蓰本理论。“六IV一名,最

知识

走字繁体怎么写

阅读(170)

本文主要为您介绍走字繁体怎么写,内容包括走的繁体字怎么写,走字的繁体字怎么写,走的繁体字怎么写。

知识

实训报告心得怎么写

阅读(179)

本文主要为您介绍实训报告心得怎么写,内容包括实训报告怎么写啊,实训心得体会该怎么写,实训心得怎么写。我不确定你的实训是不是实习?你可以追问一下,不过给你个建议。网上收点吧,百度没有的话就去google,如果还没有就去土豆,慢慢找。给你个

知识

晚上好维语怎么写

阅读(507)

本文主要为您介绍晚上好维语怎么写,内容包括“各位评委.同学们大家晚上好”用维语怎么翻译呢,能不能交一些基本维语1.你好2.早上好、中午好、晚上好3我不懂你,维语你好怎么写。yahximusiz(亚克西木三)/你好, yahxi turdigizmu(亚克西 图尔定子

知识

中文日期怎么写

阅读(523)

本文主要为您介绍中文日期怎么写,内容包括中文签字日期怎么写,日期大写怎么写,正规的日期写法。中文金额数字大写分别为“壹、贰、叁、肆、伍、陆、柒、捌、玖、拾、佰、仟、万、亿、圆、角、分、零、整(正)”。出票日期(大写):数字必须大

知识

易语言怎么写驱动

阅读(499)

本文主要为您介绍易语言怎么写驱动,内容包括易语言怎样写驱动,易语言程序怎么写成驱动级的,如何用易语言写删除驱动服务。和必要用驱动器框呢 直接选择文件夹就可以.版本 2.支持库 shell.程序集 窗口程序集1.子程序 __启动窗口_创建完毕.子

知识

底层驱动怎么写

阅读(174)

本文主要为您介绍底层驱动怎么写,内容包括MCU底层驱动该如何写有什么具体的好的方法吗,那几种语言可以写底层驱动,现在底层驱动一般都是用什么语言写的。你看看这篇文章吧,写得非常好 转帖]关于ARM和嵌入式系统方向嵌入式系统无疑是当前最热

知识

驱动是怎么写的

阅读(181)

本文主要为您介绍驱动是怎么写的,内容包括怎么写驱动,驱动是什么意思啊,C语言如何编写驱动。这个可是一个艰巨的工程,计算器的驱动都是用计算机语言写的,想学习写东西,那得从最简单的C C++ JAVA BASIC等等一套的配合,可

知识

屏驱动怎么写

阅读(160)

本文主要为您介绍屏驱动怎么写,内容包括如何写入液晶显示器驱动程序,液晶电视万能驱动板怎么写程序,stc51单片机彩屏驱动程序怎么写希望具体点,谢谢。1。人的面部掉色什么意思?关机了还要亮点?还是说关机的瞬间会出现亮点?听你的描述我揣测应

知识

动怎么写驱动

阅读(158)

本文主要为您介绍动怎么写驱动,内容包括怎么写驱动,如何编写驱动程序,电脑怎么做程序、驱动。这个可是一个艰巨的工程,计算器的驱动都是用计算机语言写的,想学习写东西,那得从最简单的C C++ JAVA BASIC等等一套的配合,可

知识

怎么写任务驱动型作文

阅读(174)

本文主要为您介绍怎么写任务驱动型作文,内容包括怎样写好任务驱动型作文,任务驱动型作文怎么写,《任务型驱动作文怎么写》。语文教学一线盛行一个名词,叫做“任务驱动型作文”。大到省级的教研会议,小到普通的语文课堂,谈及这个名词,有人深感莫

知识

驱动英文怎么写

阅读(561)

本文主要为您介绍驱动英文怎么写,内容包括驱动英文怎样写,所有驱动程序英文名称怎么写,驱动,用英语怎么拼写。Audio声卡--包括品牌:ADI. ALT. C-Media. Conexant. Creative. HDAudio. nVIDIA

知识

驱动型作文怎么写

阅读(158)

本文主要为您介绍驱动型作文怎么写,内容包括驱动型作文万能句子,任务驱动型作文怎么写,《任务驱动型作文怎么写》。母爱是多么的圣洁啊!她们宁愿自己生命受到危险,也要让孩子平安无事……她就像一个尽责的卫士,保卫着子女的安全。2:大雾弥漫的

[/e:loop]