色yeye在线视频观看_亚洲人亚洲精品成人网站_一级毛片免费播放_91精品一区二区中文字幕_一区二区三区日本视频_成人性生交大免费看

當前位置:首頁 > 嵌入式培訓 > 嵌入式學習 > 講師博文 > Linux下編寫zlg7290驅動(2)--鍵盤驅動編寫

Linux下編寫zlg7290驅動(2)--鍵盤驅動編寫 時間:2018-09-25      來源:未知

2.1. 驅動框架搭建

鍵盤驅動是典型的字符設備驅動,由于zlg7290使用的是I2C總線,所以這里首先搭建一個基于input子系統的驅動框架

static int zlg7290_probe(struct i2c_client *client, const struct i2c_device_id *id)

{

return 0;

}

static int zlg7290_remove(struct i2c_client *client)

{

return 0;

}

static const struct i2c_device_id zlg7290_id[] = {

{ZLG7290_NAME, 0 },

{ }

};

MODULE_DEVICE_TABLE(i2c, zlg7290_id);

static struct i2c_driver zlg7290_driver= {

.probe = zlg7290_probe,

.remove = zlg7290_remove,

.id_table = zlg7290_id,

.driver = {

.name = ZLG7290_NAME,

.owner = THIS_MODULE,

},

};

static int __init zlg7290_init(void)

{

return i2c_add_driver(&zlg7290_driver);

}

static void __exit zlg7290_exit(void)

{

i2c_del_driver(&zlg7290_driver);

}

MODULE_AUTHOR("farsight");

MODULE_DESCRIPTION("zlg7290 driver");

MODULE_LICENSE("GPL");

module_init(zlg7290_init);

module_exit(zlg7290_exit);

2.2. Input驅動框架搭建

鍵盤一般在內核中被注冊為input設備,所以本例也需要將我們的鍵盤注冊為一個input設備,input設備注冊相關函數及結構體如下:

struct input_dev;

struct input_dev *input_allocate_device();

int input_register_device(struct input_dev *);

input_dev是linux內核中用來描述一個input設備的結構體,這個結構體用來描述一個input設備。

input_allocate_device內核中用來為input_dev分配空間的函數,這個函數不能被kmalloc等分配內存空間的函數替代,因為這個函數處理分配空間外還做了一些基本的初始化。

input_register_device內核中用來注冊input_dev到linux內核中的函數,在調用這個函數前必須完成input_dev的初始化。

如下:

C++ Code

zlg7290->key = input_allocate_device();

if (zlg7290->key == NULL) {

kfree(zlg7290);

return -ENOMEM;

}

key_dev = zlg7290->key;

key_dev->name = "zlg7290";

key_dev->id.bustype = BUS_HOST;

key_dev->id.vendor = 0x0001;

key_dev->id.product = 0x0001;

key_dev->id.version = 0x0001;

key_dev->evbit[0] = BIT_MASK(EV_KEY);

for(i = 1; i <= 64; i++) {

key_dev->keybit[BIT_WORD(key_value[i])] |= BIT_MASK(key_value[i]);

}

ret = input_register_device(key_dev);

if (ret < 0) {

printk("Failed to register input device\n");

goto err1;

}

這部分代碼input_allocate_device()和input_register_device()的使用比較好理解,需要注意的是input_dev初始化這部分內容

在這個input_dev一般需要初始化的主要有如下成員:

key_dev->name = "zlg7290";

key_dev->id.bustype = BUS_HOST;

key_dev->id.vendor = 0x0001;

key_dev->id.product = 0x0001;

key_dev->id.version = 0x0001;

這些成員主要是一些描述類信息。

key_dev->evbit[0] = BIT_MASK(EV_KEY);

for(i = 1; i <= 64; i++) {

key_dev->keybit[BIT_WORD(key_value[i])] |= BIT_MASK(key_value[i]);

}

key_dev->evbit[0] = BIT_MASK(EV_KEY);

evbit是設備所支持的事件類型,在這里我們使用EV_KEY作為我們的事件類型,有些設備支持多種事件類型。Linux內核時間類型很多,不同設備在注冊時使用不同事件類型:

#define EV_SYN 0x00

#define EV_KEY 0x01

#define EV_REL 0x02

#define EV_ABS 0x03

#define EV_MSC 0x04

#define EV_SW 0x05

#define EV_LED 0x11

#define EV_SND 0x12

#define EV_REP 0x14

#define EV_FF 0x15

#define EV_PWR 0x16

key_dev->keybit[BIT_WORD(key_value[i])] |= BIT_MASK(key_value[i]);

keybit中每一位對應一個按鍵,初始化所有位都為0,當某一位被置1時,對應按鍵才能生效。按鍵需要初始化keybit,如果是其他的input設備則需要初始化其他成員,如下:

unsigned long evbit[BITS_TO_LONGS(EV_CNT)];

unsigned long keybit[BITS_TO_LONGS(KEY_CNT)];

unsigned long relbit[BITS_TO_LONGS(REL_CNT)];

unsigned long absbit[BITS_TO_LONGS(ABS_CNT)];

unsigned long mscbit[BITS_TO_LONGS(MSC_CNT)];

unsigned long ledbit[BITS_TO_LONGS(LED_CNT)];

unsigned long sndbit[BITS_TO_LONGS(SND_CNT)];

unsigned long ffbit[BITS_TO_LONGS(FF_CNT)];

unsigned long swbit[BITS_TO_LONGS(SW_CNT)];

上一篇:Linux下編寫zlg7290驅動(1)

下一篇:Linux下編寫zlg7290驅動(3)-鍵盤驅動編寫

熱點文章推薦
華清學員就業榜單
高薪學員經驗分享
熱點新聞推薦
前臺專線:010-82525158 企業培訓洽談專線:010-82525379 院校合作洽談專線:010-82525379 Copyright © 2004-2022 北京華清遠見科技集團有限公司 版權所有 ,京ICP備16055225號-5京公海網安備11010802025203號

回到頂部

主站蜘蛛池模板: 把腿张开老子cao烂你 | 色欲人妻AV久久无码精品 | 欧美午夜一区二区福利视频 | 丁香花在线观看免费观看图片 | 无码内射中文字幕岛国片 | 狼色精品人妻在线视频免费 | 四虎院影亚洲永久 | 18禁肉肉无遮挡无码网站 | 欧美成人看片一区二区 | 爱爱免费| 好男人好资源神马在线观看 | 国色天香免费视频日本 | 久久久国产精品ⅴa麻豆ai换脸 | 国产精品人妻熟女毛片av久久 | 日韩精品内射视频免费观看 | 啦啦啦在线观看免费版中文 | 亚洲中文日文韩文 | 中文人妻AV大区中文不卡 | 国内精品伊人久久久久影院对白 | 我把护士日出水了视频 | gogogo高清在线播放免费观看免费 | 18禁黄网站禁片无遮挡观看 | 无码国产精品一区二区免费式芒果 | 性生交裸片免费看 | 在线免费观看黄色av | "欧美 日韩 国产在线" | 色播影院私人影院免费 | 亚洲无人区编码国产激情 | 日本精品少妇一区二区三区 | 亚洲av中文无码字幕色本草 | 国产无线乱码一区二三区 | 色哟哟网站在线观看 | 欧美精品黄色片 | 欧美三级不卡在线观看 | 国产午夜福利久久精品 | 亚洲精品无码专区在线在线播放 | wwww.国产 | 美女高潮无遮挡喷水视频 | 在线无码VA中文字幕无码 | 久久天天躁夜夜躁狠狠85台湾 | 成年黄页网站大全免费 |