久久精品在这里_成人99免费视频_国产激情视频一区二区在线观看_国产伦精品一区二区三区免费 _亚洲午夜免费福利视频_色狠狠色狠狠综合_av在线综合网_91毛片在线观看_欧美视频一区二区在线观看_极品美女销魂一区二区三区免费_国产亚洲欧美激情_在线免费观看不卡av_日韩不卡一区二区三区_91精品国产麻豆国产自产在线_亚洲国产精品一区二区久久恐怖片_a4yy欧美一区二区三区


曙海教育集團論壇Linux專區Linux驅動開發 → 寫Linux下的USB鍵盤驅動


  共有7765人關注過本帖樹形打印

主題:寫Linux下的USB鍵盤驅動

美女呀,離線,留言給我吧!
wangxinxin
  1樓 個性首頁 | 博客 | 信息 | 搜索 | 郵箱 | 主頁 | UC


加好友 發短信
等級:青蜂俠 帖子:1393 積分:14038 威望:0 精華:0 注冊:2010-11-12 11:08:23
寫Linux下的USB鍵盤驅動  發帖心情 Post By:2010-11-24 10:36:29

1.   指定USB鍵盤驅動所需的頭文件: % x/ M8 {9 G4 Y, G/ O6 o

+ m( H! q+ I2 d8 V. @, D0 Y8 l

#include <linux/kernel.h>/*內核頭文件,含有內核一些常用函數的原型定義*/

6 i' B1 I7 @3 ]1 _

#include <linux/slab.h>/*定義內存分配的一些函數*/


9 |/ l3 Q/ F! }0 D% E# h' B3 W

#include <linux/module.h>/*模塊編譯必須的頭文件*/

( {6 G2 G: U4 L8 b( J

#include <linux/input.h>/*輸入設備相關函數的頭文件*/


$ Z! t- D* ^% J2 H; W+ b# c

#include <linux/init.h>/*linux初始化模塊函數定義*/

1 f8 B0 ?( i4 l. z

#include <linux/usb.h> /*USB設備相關函數定義*/


/ L  {, X, t" U* ?2.   定義鍵盤碼表數組: 7 ]" F0 a( V) p" Z; s

/*使用第一套鍵盤掃描碼表:A-1E;B-30;C-2E*/


- j- S, z% `, s( Y( O

static unsigned char usb_kbd_keycode[256] = {


1 V+ g# X4 S" n

    0, 0, 0, 0, 30, 48, 46, 32, 18, 33, 34, 35, 23, 36, 37, 38,


7 t9 d- b- _9 v; t3 r2 K; Z+ _: o

    50, 49, 24, 25, 16, 19, 31, 20, 22, 47, 17, 45, 21, 44, 2, 3,


& S! S% t* A7 w- P7 d4 c! h7 S

    4, 5, 6, 7, 8, 9, 10, 11, 28, 1, 14, 15, 57, 12, 13, 26,


/ Q+ b. r( D, k" }0 f' {; z

    27, 43, 43, 39, 40, 41, 51, 52, 53, 58, 59, 60, 61, 62, 63, 64,


8 P- y6 M* g; a* w4 M$ [

    65, 66, 67, 68, 87, 88, 99, 70,119,110,102,104,111,107,109,106,

- B0 m) ?7 J- P

    105,108,103, 69, 98, 55, 74, 78, 96, 79, 80, 81, 75, 76, 77, 71,

6 R2 v- Q2 i: p4 N- Y

    72, 73, 82, 83, 86,127,116,117,183,184,185,186,187,188,189,190,

' L; [8 t0 ^8 U8 |8 ?4 F

    191,192,193,194,134,138,130,132,128,129,131,137,133,135,136,113,

2 o/ p0 u- @/ h- I7 z

    115,114, 0, 0, 0,121, 0, 89, 93,124, 92, 94, 95, 0, 0, 0,

* D+ N% W" M5 W- t

    122,123, 90, 91, 85, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,

7 {* N: s  j* u3 t6 w* s4 ^+ c

    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,

) l, D# \8 V; o5 l4 W0 c9 `2 e

    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,

# w# I+ y* j$ b# ]* }4 g7 ]$ h

    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,

! q) k  I3 ^4 v3 e

    0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,


6 ?! P4 F  m- g+ W- `

    29, 42, 56,125, 97, 54,100,126,164,166,165,163,161,115,114,113,

( k, J2 d" i3 h

    150,158,159,128,136,177,178,176,142,152,173,140

, u. ]) |9 R5 v5 e
}; 3 Q5 Z0 m! L% y$ V4 r1 G6 A# R
3.   編寫設備ID表: ( u" @, F2 t0 N) ~

static struct usb_device_id usb_kbd_id_table [] = {

+ h% l/ [8 V; g7 Y4 ]' ~) K

    { USB_INTERFACE_INFO(3, 1, 1) },/*3,1,1分別表示接口類,接口子類,接口協議;3,1,1為鍵盤接口類;鼠標為3,1,2*/


, K( l5 ^& Q8 W" A: a

    { }           /* Terminating entry */


& P3 ^8 E* }* W+ b' u& \

};


4 Z4 ~( {/ _  K1 ]MODULE_DEVICE_TABLE (usb, usb_kbd_id_table);/*指定設備ID表*/ ( Y7 a; y* h' n
4.   定義USB鍵盤結構體: " T5 s( ^. V) K. `. e1 f0 v+ c! U

struct usb_kbd {


& D) _/ ]4 c+ H5 |! P+ ]

    struct input_dev *dev; /*定義一個輸入設備*/


0 `8 \  w* R, ]2 Z3 f" u& V

    struct usb_device *usbdev;/*定義一個usb設備*/

* i/ d" y, \; u" D& E; D/ i# V. E

    unsigned char old[8]; /*按鍵離開時所用之數據緩沖區*/


+ m% u( P! T& d& B

    struct urb *irq/*usb鍵盤之中斷請求塊*/, *led/*usb鍵盤之指示燈請求塊*/;


# b, O; c. u* a( `' F6 v

    unsigned char newleds;/*目標指定燈狀態*/


' A6 Q8 [, E9 J: w2 n# N

    char name[128];/*存放廠商名字及產品名字*/


2 f2 z$ m3 m& D% Z, B& Z

    char phys[64];/*設備之節點*/


6 w/ ?9 ?# E8 Y6 }6 v  O7 Q
, j, ?. y8 g% k/ N& A

    unsigned char *new;/*按鍵按下時所用之數據緩沖區*/


; `4 |+ B8 i2 s. E$ L

    struct usb_ctrlrequest *cr;/*控制請求結構*/

4 q1 N6 R3 ~4 d0 U, O% ?

    unsigned char *leds;/*當前指示燈狀態*/


* U7 i% `* G4 a/ E4 H) A) ?4 `. Z

    dma_addr_t cr_dma; /*控制請求DMA緩沖地址*/

$ ?; S* u% Q! S8 F* {- `

    dma_addr_t new_dma; /*中斷urb會使用該DMA緩沖區*/


8 o9 ?$ K1 B9 T6 z4 F& t

    dma_addr_t leds_dma; /*指示燈DAM緩沖地址*/


( a0 C! {/ a# G' Z) S6 o" c% v}; " `# T6 H$ d# x5 a- B3 ^
5.   編寫USB鍵盤驅動結構(任何一個LINUX下的驅動都有個類似的驅動結構) ( u; \" u" V2 d2 Y

/*USB鍵盤驅動結構體*/

0 P7 V1 G4 I# o# s# N9 n

static struct usb_driver usb_kbd_driver = {


; F) L9 Q/ s$ F# h

    .name =   "usbkbd",/*驅動名字*/

( Z5 |/ Q* X4 Y! \# f9 C

    .probe = usb_kbd_probe,/*驅動探測函數,加載時用到*/


# {" n5 \1 t6 K  j1 v

    .disconnect = usb_kbd_disconnect,/*驅動斷開函數,在卸載時用到*/


2 S) |0 K, a  o/ f, `; F

    .id_table =   usb_kbd_id_table,/*驅動設備ID表,用來指定設備或接口*/

- |" s( J; g! Z; n7 i

};

. K9 [0 h. ?4 a, B( O
6.   編寫模塊加載函數(每個驅動都會有一個加載函數,由module_init調用) 9 H1 \  a( y" t+ t3 [  ^

/*驅動程序生命周期的開始點,向 USB core 注冊這個鍵盤驅動程序。*/


9 K: P) y8 ?- d

static int __init usb_kbd_init(void)


4 O7 @  r. r9 ^$ q. G

{

$ y9 m8 w0 V2 r# h; |6 f  N: G

    int result = usb_register(&usb_kbd_driver);/*注冊USB鍵盤驅動*/


7 w/ S: x. p+ N' g1 R) k9 ]1 H

    if (result == 0) /*注冊失敗*/



支持(0中立(0反對(0單帖管理 | 引用 | 回復 回到頂部

返回版面帖子列表

寫Linux下的USB鍵盤驅動








簽名
久久精品在这里_成人99免费视频_国产激情视频一区二区在线观看_国产伦精品一区二区三区免费 _亚洲午夜免费福利视频_色狠狠色狠狠综合_av在线综合网_91毛片在线观看_欧美视频一区二区在线观看_极品美女销魂一区二区三区免费_国产亚洲欧美激情_在线免费观看不卡av_日韩不卡一区二区三区_91精品国产麻豆国产自产在线_亚洲国产精品一区二区久久恐怖片_a4yy欧美一区二区三区
久久久久久一二三区| 色婷婷av一区二区三区大白胸| 国内精品在线播放| 久久99精品国产.久久久久久| 青青青伊人色综合久久| 奇米888四色在线精品| 久久99最新地址| 国产+成+人+亚洲欧洲自线| 成人精品国产福利| 国产精品v欧美精品∨日韩| 欧美高清性xxxxhdvideosex| 亚洲欧美电影在线观看| 欧美日韩一区二区三区免费看 | 亚洲欧美激情插| 婷婷中文字幕综合| 大胆欧美人体老妇| 久久99精品国产99久久| 正在播放一区二区三区| 777欧美精品| 亚洲欧洲另类国产综合| 男女视频一区二区| 99久久国产综合精品麻豆| 久久99国产精品| 欧美日韩一区二区在线观看| 国产亚洲精久久久久久| 亚洲激情第一区| 国产精品小仙女| 精品国产免费久久久久久尖叫| 在线视频福利一区| 久久免费精品国产久精品久久久久| 一区二区三区精品在线观看| 国产精品一区二区不卡| 日本精品一区二区| 日韩精品一区二区三区swag| 亚洲乱码国产乱码精品精98午夜| 国产一区二区毛片| 欧美福利一区二区三区| 欧美一区二区精品在线| 亚洲伊人伊色伊影伊综合网 | 久久久水蜜桃| 欧美久久久一区| 亚洲精品综合在线| 成人免费福利片| 自拍亚洲欧美老师丝袜| 国产精品情趣视频| 国内精品视频666| 日本一区美女| 国产视频视频一区| 国产精品88888| 亚洲三区在线| 中文字幕一区二区三区不卡在线| 粉嫩在线一区二区三区视频| 伊人情人网综合| 亚洲欧洲av另类| 97久久精品人人澡人人爽| 欧美色爱综合网| 亚洲成人免费电影| 精品欧美国产一区二区三区不卡| 日韩一区二区免费在线电影| 日本女优在线视频一区二区 | 一区二区精品国产| 中文字幕制服丝袜一区二区三区| 国产99久久久久久免费看农村| 亚洲一二区在线| 一区二区三区产品免费精品久久75| 91网站在线观看视频| 6080日韩午夜伦伦午夜伦| 日韩在线一二三区| 日本不卡二区高清三区| 国产精品乱人伦| 91玉足脚交白嫩脚丫在线播放| 在线播放91灌醉迷j高跟美女| 秋霞国产午夜精品免费视频| 涩涩日韩在线| 一区二区三区欧美| 久久亚洲高清| 1024精品合集| 久精品国产欧美| 国产精品沙发午睡系列990531| 91老司机福利 在线| 26uuu另类欧美亚洲曰本| 国产激情精品久久久第一区二区| 日本高清无吗v一区| 超碰97在线播放| 鲁鲁狠狠狠7777一区二区| 久久综合九色综合97_久久久 | 精品一区二区综合| 一本到三区不卡视频| 亚洲gay无套男同| 日本一区二区免费看| 亚洲天堂成人在线观看| 蜜桃日韩视频| 亚洲成人一区在线| 午夜精品一区二区在线观看的| 亚洲福利一区二区三区| 亚洲一区二区三区免费看| 亚洲成a天堂v人片| 色94色欧美sute亚洲13| 麻豆一区二区在线| 欧美麻豆精品久久久久久| 国产一区二区电影| 欧美一级一级性生活免费录像| 国产精品一二三在| 欧美精品一区二区久久婷婷 | 成人a区在线观看| 久久久www成人免费无遮挡大片| 91老师片黄在线观看| 国产精品网曝门| 欧美不卡在线一区二区三区| 亚洲一二三区不卡| 91国产福利在线| 国产·精品毛片| 国产亚洲精品免费| 欧洲一区二区在线| 美女网站色91| 日韩欧美不卡一区| 国内视频一区| 青青草国产精品亚洲专区无| 制服丝袜成人动漫| 99影视tv| 视频一区二区三区入口| 日韩欧美美女一区二区三区| 国产精品免费一区二区三区四区| 一区二区成人在线| 欧美日韩小视频| 91麻豆免费视频| 亚洲一区二区免费视频| 欧美日韩免费电影| 97超级碰碰| 日日噜噜夜夜狠狠视频欧美人| 欧美一区二区久久久| 国产高清自拍一区| 日韩电影在线观看一区| 精品卡一卡二卡三卡四在线| 蜜桃视频在线观看91| 黄页视频在线91| 国产精品毛片无遮挡高清| 一本大道av一区二区在线播放| www.av精品| 亚洲福利一区二区三区| 欧美成人官网二区| 午夜久久资源| 91免费视频大全| 日韩高清在线一区| 国产香蕉久久精品综合网| 亚洲一区三区| 97免费资源站| 精品写真视频在线观看| 专区另类欧美日韩| 欧美一级生活片| 亚洲精品成人久久久998| 99麻豆久久久国产精品免费优播| 午夜影院在线观看欧美| 久久影院午夜片一区| 在线国产精品网| 国产伦精品一区二区三区四区视频| 久热成人在线视频| 亚洲三级在线看| 精品精品欲导航| 91福利视频久久久久| 精品亚洲一区二区三区四区五区高| 国产一区二区在线电影| 亚洲一二三四久久| 国产欧美精品区一区二区三区| 欧美日韩国产一二三| 日韩一区国产在线观看| 91在线精品一区二区三区| 久久er精品视频| 午夜免费欧美电影| 亚洲色图都市小说| 国产午夜精品一区二区三区视频 | 亚洲另类中文字| 2020国产精品| 欧美日韩午夜在线视频| 亚洲欧洲一区二区福利| 国产一区喷水| 91在线码无精品| 国产精品亚洲午夜一区二区三区| 亚洲v中文字幕| 亚洲免费在线视频一区 二区| 久久久综合激的五月天| 日韩欧美一级特黄在线播放| 欧美亚洲高清一区二区三区不卡| 色综合久久88色综合天天提莫| 精品国产一区二区三区麻豆免费观看完整版| 国产激情精品久久久第一区二区 | 2020国产精品自拍| 欧美一区二区三区婷婷月色| 在线免费亚洲电影| 四虎永久国产精品| 欧美日韩视频在线一区二区观看视频 | 国产日韩影视精品| 亚洲精品在线免费播放| 欧美一级午夜免费电影| 欧美伦理视频网站| 欧美日韩一区不卡| 欧美午夜精品一区二区三区| 色综合一区二区三区| 亚洲欧美日韩国产yyy| 日韩av不卡播放|