USB键盘驱动程序
USB-KY驱动

USB-KEY驱动➢驱动安装使用USB-KEY之前,您必须安装USB-KEY驱动。
一、运行USB-KEY驱动程序epsft12_stdSimpChinese.exe二、安装开始后,系统会出现如下图所示界面,点击”下一步”,如图2-1:图2-1三、如果您需要您的USB-KEY支持VPN登录或者智能卡登录(域登录),请勾选‘支持智能卡登录操作系统或VPN’选项,默认为不勾选;点击‘安装’,如图2-2图2-2四、正在安装(此过程约半分钟)…如图2-3图2-3五、安装完毕,如图2-4图2-4六、点击‘完成’后系统托盘中会出现ePassNG证书管理工具图标,如图2-5图2-5至此,USB-KEY驱动安装完成。
建议在安装完成后重启电脑。
➢驱动卸载一、安装了USB-KEY运行库之后,您可以通过控制面板的添加/删除程序来卸载它。
请使用开始->设置->控制面板的步骤打开控制面板,然后点击添加/删除程序打开添加或删除程序对话框,在当前安装的程序列表中选中‘卸载ePass2000_FT12’项,然后单击更改/删除按钮,这会启动USBkey的卸载向导;您也可以通过开始菜单中的快捷方式进行卸载,选择开始->所有程序-> ePass2000_FT12-> ePass2000_FT12->卸载ePass2000_FT12,同样也会启动USB-KEY的卸载向导,如图2-6所示:图2-6二、卸载开始后,出现如下界面,如图2-7:如图2-7三、单击‘卸载’按钮,安装向导会自动完成卸载操作,卸载过程中出现如图2-8的窗口:图2-9四、单击‘完成’按钮系统会重新启动计算机,这样才能完全地卸载USB-KEY;选择‘否,稍后再自行重新启动’按钮后,由您自主重新启动计算机。
图2-10➢修改用户PIN码一、将USB-KEY插入计算机后,证书管理工具将出现‘已插入’提示。
二、当USB-KEY密码为初始PIN码(1234)时,证书管理工具会自动弹出‘请修改用户PIN码’提示框,如图2-11:图2-11三、点击‘确定’,进入修改用户PIN码界面,如图2-12,点击‘取消’,将以后由您自主修改用户PIN码图2-12注:USB-KEY初始用户PIN码为1234,您在使用时请自己设定一个新的PIN 码,注意牢记,每次使用USBKEY时都需要输入这个PIN码;USB-KEY用户PIN码可设置有效长度为2至10000个字符长度,支持特殊字符。
嵌入式LinuxUSB驱动程序

备 三部 分 组 成 的 ,其 结 构 如 图 1 示 。 在 编 写 U B设 备 驱 动 所 S 程 序 设 计 时 ,可 以分 为三 部 分 编 写 :主 机 端 设 备 驱 动 程 序 、主 机 控 制 器 驱 动程 序 设 计 和设 备 端 驱 动程 序 三 部 分 ,在 本 文 中重 点 介 绍 主 机 端 驱 动 程序 的设 计 。
编 写 驱 动 程 序 框 架 ,通 过 调 用 操 作 系统 提 供 的 A I 口函数 可 P接
以完 成 对 U B外 设 的 特 定 访 问 。 S 主 机 控 制 驱 动 主 要 是 对 U B主 机 控 制 器 的 驱 动 。在 大 多 S
双 向 同步 传 输 的支 持 热 插 拔 的数 据 传 输 总 线 ,其 目的是 为 了提 供 一种 兼 容 不 同速 度 的 、 可扩 充 的并 且 使 用 方 便 的外 围设 备接 口 , 同时 也 是 为 了解 决 计 算 机 接 口 的太 多 的弊 端 而设 计 的 。一
U B设备 驱 动 程 序 S
上层 A I函 数 P U B核 S 下 层 ^ I函 P
U B主机 控制器驱动 程序 S
U B主机控 制器驱动程序 S
图 2 U B主 机 端 驱 动 程 序 结 构 S
U B设 备 驱 动程 序 是 常说 的设 备 固 件 程 序 的 一 部 分 ,提 供 S 设 备 信 息 与 主 机 的 通 信 接 口 。设 备 端 U B驱 动 程 序 设 计 由 以 S 下 几 部 分 处 理 程 序 组 成 。 初 始 化 例 程 :完 成 描 述 符 指 针 、端 点 、配 置 改 变等 操 作 。数 据 传输 例 程 :完 成 控 制 传 输 、批 量 传 输 、中 断传 输 及 同 步 传输 等 传输 方 式 下 的 数 据 收 发 工 作 。标 准
修复键盘驱动的方法

修复键盘驱动的方法
以下是修复键盘驱动的方法:
1. 检查键盘连接:首先,确定键盘是否正确连接到计算机。
如果是USB键盘,则确保它插在正确的USB端口上,并尝试在另一个USB端口上重插键盘。
如果是PS/2键盘,则确保键盘插在正确的PS/2插口上,并确保计算机已关闭。
2. 检查设备管理器:进入设备管理器,看看是否有任何关于键盘的警告或错误消息。
如果有,右键单击键盘驱动程序,选择“卸载”选项。
此后,计算机应该自动重新安装驱动程序。
3. 更新驱动程序:有时,键盘出现问题是因为过时的驱动程序。
在这种情况下,建议尝试手动更新键盘驱动程序。
可以在计算机制造商的网站或键盘制造商的网站上查找最新版本的驱动程序。
4. 检查病毒:有时,计算机上的病毒或恶意软件可能会影响键盘的功能。
运行杀毒软件并进行完整的系统扫描,以查找并清除任何病毒或恶意软件。
5. 检查操作系统:最后,如果所有上述步骤都失败,则键盘问题可能与操作系统有关。
在这种情况下,建议使用Windows安装光盘或恢复分区来修复操作系统文件。
mtb usb驱动程序

mtb usb驱动程序MTB USB驱动程序摘要本文档介绍了MTB(Mountain Bike)USB驱动程序的基本知识,并提供了相关信息和指导,以帮助用户安装和使用MTB USB驱动程序。
MTB USB驱动程序是一种允许计算机系统与MTB设备之间进行通信的软件。
本文档包括了USB驱动程序的重要性、安装步骤、常见问题解决方案等内容。
1. 简介MTB USB驱动程序是一种允许计算机系统与MTB设备进行通信的软件。
它通过USB接口连接计算机和MTB设备,使用户能够在计算机上管理和控制MTB设备。
MTB USB驱动程序通常由MTB设备制造商提供,并需将其安装在计算机上,以便实现设备与计算机之间的通信。
2. 安装步骤以下是安装MTB USB驱动程序的基本步骤:1)确定驱动程序版本:在安装MTB USB驱动程序之前,确保在制造商的官方网站上获取最新版本的驱动程序。
2)下载驱动程序:从制造商的官方网站上下载适用于您的操作系统的MTB USB驱动程序。
3)安装驱动程序:双击下载的驱动程序文件以启动安装过程。
按照屏幕上的指示完成安装。
在安装过程中可能需要重启计算机。
4)连接设备:在安装MTB USB驱动程序之后,使用USB线缆将MTB设备与计算机连接。
5)验证连接:确认MTB设备已正确连接到计算机,并可以正常识别。
3. 常见问题解决方案3.1 驱动程序无法安装如果您遇到无法安装MTB USB驱动程序的问题,请检查以下几点:1)确认系统兼容性:确保您的操作系统与驱动程序的兼容性。
有时驱动程序可能仅支持特定的操作系统版本。
2)禁用防病毒软件:某些防病毒软件可能会阻止驱动程序的安装。
尝试禁用防病毒软件,并重新运行安装程序。
3)更新操作系统:将操作系统更新到最新版本可能会解决与驱动程序安装相关的问题。
3.2 设备无法被识别如果您的MTB设备无法被计算机正常识别,请尝试以下解决方案:1)检查连接:确保MTB设备正确连接到计算机,并且USB线缆没有损坏或松动。
基于WINDOWS DDK的USB键盘驱动开发

…
…
…
…
…
…
…
…Leabharlann …一美展. 。 I
基  ̄' W I N DOW S DD K的 USB键 盘 驱 动 开 发
江西赣 州农 业学校 卢晓娟 陈根生
【 摘要】U S B 接 口具有方便快速 等优 点, 已经发展成为一种 比较普遍 的计 算机 与外设 的接口。基于微软w i n d o ws 统D DK,本 文介 绍了一种非标准U S B 键盘  ̄w i n d o w s 设 备 驱 动程序的开发过程与方法 。 【 关键 词】设备驱动 ;驱动开发包 ;非标准键 盘
1 . 引言
w i n m a i n 函数 的控制 下执行 ,驱动 程序不 存在
U S B 总线 的成功 关键 是使用 户感 到 了使 用 这样 的 函数 ,而 只是 一个 由I / 0 管理 组件 根据 U S B 设备 的方便 。即插 即用 ( P n P ) 概念的使用 使 需要 调用 的子例 程 的集合 ,i / 0 管理 组件 根据 某 些硬 件的 安装过 程得 到 了简 化 。U S B 规范 中 不 同的情 况调用 驱动程序 中不同的例程 。构成 指 出,适合迁 移 ̄U S B I . 1 上 的硬 件限定于那 些 内核模 式驱动程序 的主要例程 包括 :初 始化和 / o 系 统服务 调度 例程 ,数据 传输 低 速到 中速 的外设 ,包括键盘 ,鼠标等 。即这 清 除例程 ,i 些 设备 的数据 传输速率低 于1 2 M b / s e c ,并且 能 例程和 资源 回调例程 ,下面 是一个基本 的驱动
通 过单一 的P c 接 口被 系统软件识 别。现在标 准 例程架构 : e x t e r n” C” 的u s b 键盘 设备只 需要 遵循一些h i d 设备 的协 议 N T S T A T U S 就 可 以被 w i n d o w s 操 作系 统 自动 识别无 需设备 制造 商开发驱 动程序 ,但 有些键盘 带有特殊 功 D ri v e r E nt r Y( I N P D RI V E R — O B J EC T
USB键盘无法使用怎么解决

USB键盘无法使用怎么解决
当我们的usb键盘无法识别了怎么办跟着小编一起解决USB 键盘插入电脑上无法识别的问题吧。
USB键盘无法使用的常用解决方法
USB键盘无法使用,插入键盘后电脑检测不到,也不出现叹号设备,替换电脑测试USB盘正常,仔细观察人体学输入设备中有两个设备,通过硬件id确认其中USB输入设备是鼠标,上面的英文设备实际上是键盘。
也就是Windows系统错误的把键盘识别为了别的设备。
操作步骤
右键选择HID Compliant Device更新驱动程序。
浏览计算机以查找驱动程序软件。
从计算机的设备驱动程序列表中选择。
显示用户插入的USB设备,单击下一步。
等待更新驱动程序
最终设备管理器重新检测到键盘。
USB键盘无法使用相关文章:
B键盘无法识别使用情况解决方法
2.台式机键盘不能用怎么办
3.电脑无法使用键盘怎么办
4.台式机无法识别键盘怎么办
5.台式机开机后键盘没反应怎么办
b鼠标无法使用怎么办
7.鼠标插usb无法识别怎么办。
USB键盘驱动程序

USB键盘驱动程序什么是USB键盘驱动程序?USB键盘驱动程序是指用于控制和操作连接到计算机的USB键盘的软件。
它可以让计算机识别和响应键盘上的按键操作,并将其转换为文本或控制命令等计算机可以理解的语言。
USB键盘驱动程序的工作原理USB键盘驱动程序的工作原理是与USB控制器通信,将USB键盘发送的数据转换成可识别和处理的格式。
当用户在键盘上按下一个按键时,键盘会发送一个信号到USB控制器,控制器将该信号传递给USB键盘驱动程序。
驱动程序解析该信号并将其转换为相应的字符代码或控制命令,并将其传输到计算机操作系统的键盘输入队列中。
USB键盘驱动程序的类型USB键盘驱动程序通常分为两种类型:内核驱动程序和用户空间驱动程序。
内核驱动程序内核驱动程序运行在计算机的内核空间中,可以直接访问硬件设备和操作系统资源。
它通常具有较高的性能和稳定性,并具有良好的兼容性。
内核驱动程序可以提供对USB键盘的完整支持,包括高级功能和按键映射等。
用户空间驱动程序用户空间驱动程序运行在计算机的用户空间中,它通过调用内核空间提供的API来与USB键盘进行通信。
用户空间驱动程序通常具有较高的灵活性和可定制性,但对于一些高级功能和安全性较高的应用程序可能不够稳定和可靠。
USB键盘驱动程序的安装和卸载USB键盘驱动程序通常随着操作系统安装而一同安装。
可以通过设备管理器来检查并安装或更新键盘驱动程序。
对于需要卸载键盘驱动程序的情况,可以通过设备管理器或控制面板中的程序和功能来卸载。
USB键盘驱动程序的更新和维护USB键盘驱动程序通常需要定期更新以适应新的操作系统版本和硬件设备。
更新键盘驱动程序可以解决一些已知的问题,并提高键盘的性能和稳定性。
可以通过设备管理器或厂商官方网站下载并更新键盘驱动程序。
在日常使用过程中,USB键盘驱动程序也需要进行维护和保养。
可以定期清除键盘上的灰尘和污垢,检查键盘连接处的电缆和接口,并避免键盘接触水和阳光直射等因素。
usb键盘驱动 (2)

USB键盘驱动简介USB键盘驱动是一种用于连接计算机和USB键盘的软件程序。
它的作用是使计算机能够正确地识别和响应来自USB键盘的输入信号,并将其转化为计算机可以理解的指令。
在计算机发展的早期阶段,键盘通常是通过传统的PS/2接口连接到计算机主机。
但随着USB(Universal Serial Bus,通用串行总线)技术的不断发展,USB键盘开始逐渐取代传统的PS/2键盘。
与PS/2键盘相比,USB键盘具有更高的传输速度、更大的数据带宽和更广泛的兼容性。
为了正常使用USB键盘,用户需要安装正确的USB键盘驱动程序。
本文将介绍USB键盘驱动的工作原理、安装方法和常见问题解决方法。
工作原理USB键盘驱动的工作原理可以简单分为以下几个步骤:1.设备识别:当用户将USB键盘插入计算机时,计算机会自动检测到新的USB设备并尝试识别其类型。
在识别过程中,计算机会自动加载适当的驱动程序。
2.驱动加载:计算机根据USB设备的类型加载相应的驱动程序。
对于USB键盘,计算机会加载USB键盘驱动程序。
驱动程序通常存储在操作系统的驱动库中。
3.功能映射:USB键盘驱动会解析来自键盘的输入信号,并将其转化为计算机可以理解的指令。
这些指令通常与键盘上的特定按键和功能相对应。
4.指令传递:USB键盘驱动将转化后的指令传递给操作系统,操作系统会根据指令执行相应的操作。
例如,当用户按下键盘上的某个按键时,驱动程序会将相应的指令传递给操作系统,并在屏幕上显示相应的字符或执行相应的操作。
安装方法安装USB键盘驱动可以通过以下几种方式实现:1.自动安装:大多数操作系统(如Windows、Mac和Linux)都具有自动安装驱动程序的功能。
当用户将USB键盘插入计算机时,操作系统会自动检测并加载相应的驱动程序。
用户只需要按照系统提示进行操作即可完成安装过程。
2.手动安装:在某些情况下,操作系统可能无法自动安装USB键盘驱动程序。
这时,用户可以尝试手动安装驱动程序。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
/** $Id: usbkbd.c,v 1.27 2001/12/27 10:37:41 vojtech Exp $** Copyright (c) 1999-2001 Vojtech Pavlik** USB HIDBP Keyboard support*//** This program is free software; you can redistribute it and/or modify* it under the terms of the GNU General Public License as published by* the Free Software Foundation; either version 2 of the License, or* (at your option) any later version.** This program is distributed in the hope that it will be useful,* but WITHOUT ANY WARRANTY; without even the implied warranty of* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the* GNU General Public License for more details.** You should have received a copy of the GNU General Public License* along with this program; if not, write to the Free Software* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA ** Should you need to contact me, the author, you can do so either by* e-mail - mail your message to <>, or by paper mail:* Vojtech Pavlik, Simunkova 1594, Prague 8, 182 00 Czech Republic*/#include <linux/kernel.h>#include <linux/slab.h>#include <linux/module.h>#include <linux/input.h>#include <linux/init.h>#include <linux/usb.h>#include <linux/usb_input.h>/** Version Information*/#define DRIVER_VERSION ""#define DRIVER_AUTHOR "Vojtech Pavlik <>"#define DRIVER_DESC "USB HID Boot Protocol keyboard driver"#define DRIVER_LICENSE "GPL"MODULE_AUTHOR(DRIVER_AUTHOR);MODULE_DESCRIPTION(DRIVER_DESC);MODULE_LICENSE(DRIVER_LICENSE);static unsigned char usb_kbd_keycode[256] = {0, 0, 0, 0, 30, 48, 46, 32, 18, 33, 34, 35, 23, 36, 37, 38,50, 49, 24, 25, 16, 19, 31, 20, 22, 47, 17, 45, 21, 44, 2, 3,4, 5, 6, 7, 8, 9, 10, 11, 28, 1, 14, 15, 57, 12, 13, 26,27, 43, 43, 39, 40, 41, 51, 52, 53, 58, 59, 60, 61, 62, 63, 64,65, 66, 67, 68, 87, 88, 99, 70,119,110,102,104,111,107,109,106,105,108,103, 69, 98, 55, 74, 78, 96, 79, 80, 81, 75, 76, 77, 71,72, 73, 82, 83, 86,127,116,117,183,184,185,186,187,188,189,190,191,192,193,194,134,138,130,132,128,129,131,137,133,135,136,113, 115,114, 0, 0, 0,121, 0, 89, 93,124, 92, 94, 95, 0, 0, 0,122,123, 90, 91, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 42, 56,125, 97, 54,100,126,164,166,165,163,161,115,114,113,150,158,159,128,136,177,178,176,142,152,173,140};struct usb_kbd {struct input_dev *dev;struct usb_device *usbdev;unsigned char old[8];struct urb *irq, *led;unsigned char newleds;char name[128];char phys[64];unsigned char *new;struct usb_ctrlrequest *cr;unsigned char *leds;dma_addr_t cr_dma;dma_addr_t new_dma;dma_addr_t leds_dma;};static void usb_kbd_irq(struct urb *urb, struct pt_regs *regs){struct usb_kbd *kbd = urb->context;int i;switch (urb->status) {case 0: /* success */break;case -ECONNRESET: /* unlink */case -ENOENT:case -ESHUTDOWN:return;/* -EPIPE: should clear the halt */default: /* error */goto resubmit;}input_regs(kbd->dev, regs);for (i = 0; i < 8; i++)input_report_key(kbd->dev, usb_kbd_keycode[i + 224], (kbd->new[0] >> i) & 1);for (i = 2; i < 8; i++) {if (kbd->old[i] > 3 && memscan(kbd->new + 2, kbd->old[i], 6) == kbd->new + 8) { if (usb_kbd_keycode[kbd->old[i]])input_report_key(kbd->dev, usb_kbd_keycode[kbd->old[i]], 0);elseinfo("Unknown key (scancode %#x) released.", kbd->old[i]);}if (kbd->new[i] > 3 && memscan(kbd->old + 2, kbd->new[i], 6) == kbd->old + 8) { if (usb_kbd_keycode[kbd->new[i]])input_report_key(kbd->dev, usb_kbd_keycode[kbd->new[i]], 1);elseinfo("Unknown key (scancode %#x) pressed.", kbd->new[i]);}}input_sync(kbd->dev);memcpy(kbd->old, kbd->new, 8);resubmit:i = usb_submit_urb (urb, SLAB_ATOMIC);if (i)err ("can't resubmit intr, %s-%s/input0, status %d",kbd->usbdev->bus->bus_name,kbd->usbdev->devpath, i);}static int usb_kbd_event(struct input_dev *dev, unsigned int type,unsigned int code, int value){struct usb_kbd *kbd = dev->private;if (type != EV_LED)return -1;kbd->newleds = (!!test_bit(LED_KANA, dev->led) << 3) | (!!test_bit(LED_COMPOSE, dev->led) << 3) |(!!test_bit(LED_SCROLLL, dev->led) << 2) | (!!test_bit(LED_CAPSL, dev->led) << 1) |(!!test_bit(LED_NUML, dev->led));if (kbd->led->status == -EINPROGRESS)return 0;if (*(kbd->leds) == kbd->newleds)return 0;*(kbd->leds) = kbd->newleds;kbd->led->dev = kbd->usbdev;if (usb_submit_urb(kbd->led, GFP_ATOMIC))err("usb_submit_urb(leds) failed");return 0;}static void usb_kbd_led(struct urb *urb, struct pt_regs *regs){struct usb_kbd *kbd = urb->context;if (urb->status)warn("led urb status %d received", urb->status);if (*(kbd->leds) == kbd->newleds)return;*(kbd->leds) = kbd->newleds;kbd->led->dev = kbd->usbdev;if (usb_submit_urb(kbd->led, GFP_ATOMIC))err("usb_submit_urb(leds) failed");}static int usb_kbd_open(struct input_dev *dev){struct usb_kbd *kbd = dev->private;kbd->irq->dev = kbd->usbdev;if (usb_submit_urb(kbd->irq, GFP_KERNEL))return -EIO;return 0;}static void usb_kbd_close(struct input_dev *dev){struct usb_kbd *kbd = dev->private;usb_kill_urb(kbd->irq);}static int usb_kbd_alloc_mem(struct usb_device *dev, struct usb_kbd *kbd){if (!(kbd->irq = usb_alloc_urb(0, GFP_KERNEL)))return -1;if (!(kbd->led = usb_alloc_urb(0, GFP_KERNEL)))return -1;if (!(kbd->new = usb_buffer_alloc(dev, 8, SLAB_ATOMIC, &kbd->new_dma)))return -1;if (!(kbd->cr = usb_buffer_alloc(dev, sizeof(struct usb_ctrlrequest), SLAB_ATOMIC, &kbd->cr_dma)))return -1;if (!(kbd->leds = usb_buffer_alloc(dev, 1, SLAB_ATOMIC, &kbd->leds_dma)))return -1;return 0;}static void usb_kbd_free_mem(struct usb_device *dev, struct usb_kbd *kbd){if (kbd->irq)usb_free_urb(kbd->irq);if (kbd->led)usb_free_urb(kbd->led);if (kbd->new)usb_buffer_free(dev, 8, kbd->new, kbd->new_dma);if (kbd->cr)usb_buffer_free(dev, sizeof(struct usb_ctrlrequest), kbd->cr, kbd->cr_dma);if (kbd->leds)usb_buffer_free(dev, 1, kbd->leds, kbd->leds_dma);}static int usb_kbd_probe(struct usb_interface *iface,const struct usb_device_id *id){struct usb_device *dev = interface_to_usbdev(iface);struct usb_host_interface *interface;struct usb_endpoint_descriptor *endpoint;struct usb_kbd *kbd;struct input_dev *input_dev;int i, pipe, maxp;interface = iface->cur_altsetting;if (interface->desc.bNumEndpoints != 1)return -ENODEV;endpoint = &interface->endpoint[0].desc;if (!(endpoint->bEndpointAddress & USB_DIR_IN))return -ENODEV;if ((endpoint->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) != USB_ENDPOINT_XFER_INT)return -ENODEV;pipe = usb_rcvintpipe(dev, endpoint->bEndpointAddress);maxp = usb_maxpacket(dev, pipe, usb_pipeout(pipe));kbd = kzalloc(sizeof(struct usb_kbd), GFP_KERNEL);input_dev = input_allocate_device();if (!kbd || !input_dev)goto fail1;if (usb_kbd_alloc_mem(dev, kbd))goto fail2;kbd->usbdev = dev;kbd->dev = input_dev;if (dev->manufacturer)strlcpy(kbd->name, dev->manufacturer, sizeof(kbd->name));if (dev->product) {if (dev->manufacturer)strlcat(kbd->name, " ", sizeof(kbd->name));strlcat(kbd->name, dev->product, sizeof(kbd->name));}if (!strlen(kbd->name))snprintf(kbd->name, sizeof(kbd->name),"USB HIDBP Keyboard %04x:%04x",le16_to_cpu(dev->descriptor.idVendor),le16_to_cpu(dev->descriptor.idProduct));usb_make_path(dev, kbd->phys, sizeof(kbd->phys));strlcpy(kbd->phys, "/input0", sizeof(kbd->phys));input_dev->name = kbd->name;input_dev->phys = kbd->phys;usb_to_input_id(dev, &input_dev->id);input_dev->cdev.dev = &iface->dev;input_dev->private = kbd;input_dev->evbit[0] = BIT(EV_KEY) | BIT(EV_LED) | BIT(EV_REP);input_dev->ledbit[0] = BIT(LED_NUML) | BIT(LED_CAPSL) | BIT(LED_SCROLLL) | BIT(LED_COMPOSE) | BIT(LED_KANA);for (i = 0; i < 255; i++)set_bit(usb_kbd_keycode[i], input_dev->keybit);clear_bit(0, input_dev->keybit);input_dev->event = usb_kbd_event;input_dev->open = usb_kbd_open;input_dev->close = usb_kbd_close;usb_fill_int_urb(kbd->irq, dev, pipe,kbd->new, (maxp > 8 ? 8 : maxp),usb_kbd_irq, kbd, endpoint->bInterval);kbd->irq->transfer_dma = kbd->new_dma;kbd->irq->transfer_flags |= URB_NO_TRANSFER_DMA_MAP;kbd->cr->bRequestType = USB_TYPE_CLASS | USB_RECIP_INTERFACE;kbd->cr->bRequest = 0x09;kbd->cr->wValue = cpu_to_le16(0x200);kbd->cr->wIndex = cpu_to_le16(interface->desc.bInterfaceNumber);kbd->cr->wLength = cpu_to_le16(1);usb_fill_control_urb(kbd->led, dev, usb_sndctrlpipe(dev, 0),(void *) kbd->cr, kbd->leds, 1,usb_kbd_led, kbd);kbd->led->setup_dma = kbd->cr_dma;kbd->led->transfer_dma = kbd->leds_dma;kbd->led->transfer_flags |= (URB_NO_TRANSFER_DMA_MAP | URB_NO_SETUP_DMA_MAP);input_register_device(kbd->dev);usb_set_intfdata(iface, kbd);return 0;fail2:usb_kbd_free_mem(dev, kbd);fail1:input_free_device(input_dev);kfree(kbd);return -ENOMEM;}static void usb_kbd_disconnect(struct usb_interface *intf){struct usb_kbd *kbd = usb_get_intfdata (intf);usb_set_intfdata(intf, NULL);if (kbd) {usb_kill_urb(kbd->irq);input_unregister_device(kbd->dev);usb_kbd_free_mem(interface_to_usbdev(intf), kbd);kfree(kbd);}}static struct usb_device_id usb_kbd_id_table [] = {{ USB_INTERFACE_INFO(3, 1, 1) },{ } /* Terminating entry */};MODULE_DEVICE_TABLE (usb, usb_kbd_id_table);static struct usb_driver usb_kbd_driver = {.name = "usbkbd",.probe = usb_kbd_probe,.disconnect = usb_kbd_disconnect,.id_table = usb_kbd_id_table,};static int __init usb_kbd_init(void){int result = usb_register(&usb_kbd_driver);if (result == 0)info(DRIVER_VERSION ":" DRIVER_DESC);return result;}static void __exit usb_kbd_exit(void){usb_deregister(&usb_kbd_driver);}module_init(usb_kbd_init);module_exit(usb_kbd_exit);。