官方QQ群收藏本站

百问linux嵌入式论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 698|回复: 8

[已解决] 请教:关于输入子系统

[复制链接]

6

主题

17

帖子

70

积分

注册会员

Rank: 2

积分
70
发表于 2016-12-15 17:24:41 | 显示全部楼层 |阅读模式
1,不明白输入子系统中set_bit()中参数是如何根据实际需要设置的,请介绍一下。
2,最新的linux版本和linux2.6.22.6有什么差异?输入子系统有变化吗?
谢谢!
回复

使用道具 举报

发表于 2016-12-15 18:36:21 | 显示全部楼层
1.
一个设备驱动,我们应该通过set_bit()函数来告诉输入子系统它支持哪些事件,哪些按键,例如:
Set_bit(EV_KEY,button_dev.evbit);告诉输入子系统支持按键的时间
Struct input_dev中有两个成员(你可以进入这个结构体看看):例如
Evbit: 事件类型
Keybit: 按键类型

2.编写驱动方法也没有什么变化,因为驱动没改动多少移植成功了。
输入子系统也没什么变化,你也可下载最新内核进入驱动目录的iuput.c看看
回复 支持 反对

使用道具 举报

6

主题

17

帖子

70

积分

注册会员

Rank: 2

积分
70
 楼主| 发表于 2016-12-15 18:49:06 | 显示全部楼层
本帖最后由 GHE 于 2016-12-15 18:51 编辑

谢谢! 再请教:1,怎么知道新增加的设备驱动是和哪个handler连接的呢?挂载后怎么到设备列表里查找这个新设备?

2,最新的内核在2.6版本上都有什么变化?

回复 支持 反对

使用道具 举报

191

主题

1764

帖子

6129

积分

超级版主

答疑助手

Rank: 8Rank: 8

积分
6129
QQ
发表于 2016-12-15 20:07:17 | 显示全部楼层
GHE 发表于 2016-12-15 18:49
谢谢! 再请教:1,怎么知道新增加的设备驱动是和哪个handler连接的呢?挂载后怎么到设备列表里查找这个新设 ...

没分析过最新内核,版本不一样无非就是函数名字变了,目录变了,结构体的成员变了。会用Linux2.6, 这些差异都不难搞定。
新手如何向我们反馈有效的信息,以便解决问题,见此贴:
http://www.100ask.org/bbs/forum. ... id=10914&extra=
回复 支持 反对

使用道具 举报

6

主题

17

帖子

70

积分

注册会员

Rank: 2

积分
70
 楼主| 发表于 2016-12-15 20:20:17 | 显示全部楼层
继续等待答案:
1,怎么知道新增加的设备驱动是和哪个handler连接的呢?挂载后怎么到设备列表里查找这个新设备?
2,最新的内核与2.6版本上都有什么变化?我知道确实有一些的

回复 支持 反对

使用道具 举报

6

主题

17

帖子

70

积分

注册会员

Rank: 2

积分
70
 楼主| 发表于 2016-12-15 21:10:23 | 显示全部楼层
struct input_dev中有很多成员,为何说有两个成员呢?
struct input_dev {

        void *private;

        const char *name;
        const char *phys;
        const char *uniq;
        struct input_id id;

        unsigned long evbit[NBITS(EV_MAX)];
        unsigned long keybit[NBITS(KEY_MAX)];
        unsigned long relbit[NBITS(REL_MAX)];
        unsigned long absbit[NBITS(ABS_MAX)];
        unsigned long mscbit[NBITS(MSC_MAX)];
        unsigned long ledbit[NBITS(LED_MAX)];
        unsigned long sndbit[NBITS(SND_MAX)];
        unsigned long ffbit[NBITS(FF_MAX)];
        unsigned long swbit[NBITS(SW_MAX)];
     ............
回复 支持 反对

使用道具 举报

56

主题

5186

帖子

7811

积分

超级版主

Rank: 8Rank: 8

积分
7811
QQ
发表于 2016-12-16 00:29:07 | 显示全部楼层
1,怎么知道新增加的设备驱动是和哪个handler连接的呢?
答:
你在内核源码中搜 input_register_handler,可以找到几个handler,它里面有id_table,这是用来表示这个input handler支持哪类设备的,一看就知道了,无非就是比较总线、厂家ID、设备ID、EVBIT等。

2. 挂载后怎么到设备列表里查找这个新设备?
答:
input_register_device时,会把input_dev放到input_dev_list链表中。
注册input handler时,就是去这个链表中一一取出input deivce,判断是否能够支持它

3,最新的内核与2.6版本上都有什么变化?我知道确实有一些的
答:
基本没有什么原理上的差别,在编译我们的驱动程序时,连头文件都没有变化
thisway.diy
回复 支持 反对

使用道具 举报

6

主题

17

帖子

70

积分

注册会员

Rank: 2

积分
70
 楼主| 发表于 2016-12-16 08:30:41 | 显示全部楼层
关于问题1,2,老师可否做个视频举例讲解一下,这是实际开发中必然遇到的。有哪位比较明白的可否举几个例子说明一下,谢谢!
比如:a,既然evdec_handler /* Matches all devices */,还要其他的handler何用?
         b,以下的id_table 哪个是总线、厂家ID、设备ID、EVBIT?在设备驱动中如何对应?
      static const struct input_device_id joydev_ids[] = {
        {
                .flags = INPUT_DEVICE_ID_MATCH_EVBIT | INPUT_DEVICE_ID_MATCH_ABSBIT,
                .evbit = { BIT(EV_ABS) },
                .absbit = { BIT(ABS_X) },
        },
        {
                .flags = INPUT_DEVICE_ID_MATCH_EVBIT | INPUT_DEVICE_ID_MATCH_ABSBIT,
                .evbit = { BIT(EV_ABS) },
                .absbit = { BIT(ABS_WHEEL) },
        },
        {
                .flags = INPUT_DEVICE_ID_MATCH_EVBIT | INPUT_DEVICE_ID_MATCH_ABSBIT,
                .evbit = { BIT(EV_ABS) },
                .absbit = { BIT(ABS_THROTTLE) },
        },
        { }        /* Terminating entry */
};
=============================
        static const struct input_device_id kbd_ids[] = {
        {
                .flags = INPUT_DEVICE_ID_MATCH_EVBIT,
                .evbit = { BIT(EV_KEY) },
        },

        {
                .flags = INPUT_DEVICE_ID_MATCH_EVBIT,
                .evbit = { BIT(EV_SND) },
        },

        { },    /* Terminating entry */
};
==========================
static const struct input_device_id mousedev_ids[] = {
        {
                .flags = INPUT_DEVICE_ID_MATCH_EVBIT | INPUT_DEVICE_ID_MATCH_KEYBIT | INPUT_DEVICE_ID_MATCH_RELBIT,
                .evbit = { BIT(EV_KEY) | BIT(EV_REL) },
                .keybit = { [LONG(BTN_LEFT)] = BIT(BTN_LEFT) },
                .relbit = { BIT(REL_X) | BIT(REL_Y) },
        },        /* A mouse like device, at least one button, two relative axes */
        {
                .flags = INPUT_DEVICE_ID_MATCH_EVBIT | INPUT_DEVICE_ID_MATCH_RELBIT,
                .evbit = { BIT(EV_KEY) | BIT(EV_REL) },
                .relbit = { BIT(REL_WHEEL) },
        },        /* A separate scrollwheel */
        {
                .flags = INPUT_DEVICE_ID_MATCH_EVBIT | INPUT_DEVICE_ID_MATCH_KEYBIT | INPUT_DEVICE_ID_MATCH_ABSBIT,
                .evbit = { BIT(EV_KEY) | BIT(EV_ABS) },
                .keybit = { [LONG(BTN_TOUCH)] = BIT(BTN_TOUCH) },
                .absbit = { BIT(ABS_X) | BIT(ABS_Y) },
        },        /* A tablet like device, at least touch detection, two absolute axes */
        {
                .flags = INPUT_DEVICE_ID_MATCH_EVBIT | INPUT_DEVICE_ID_MATCH_KEYBIT | INPUT_DEVICE_ID_MATCH_ABSBIT,
                .evbit = { BIT(EV_KEY) | BIT(EV_ABS) },
                .keybit = { [LONG(BTN_TOOL_FINGER)] = BIT(BTN_TOOL_FINGER) },
                .absbit = { BIT(ABS_X) | BIT(ABS_Y) | BIT(ABS_PRESSURE) | BIT(ABS_TOOL_WIDTH) },
        },        /* A touchpad */

        { },        /* Terminating entry */
};
回复 支持 反对

使用道具 举报

56

主题

5186

帖子

7811

积分

超级版主

Rank: 8Rank: 8

积分
7811
QQ
发表于 2016-12-18 00:26:25 | 显示全部楼层
a,既然evdec_handler /* Matches all devices */,还要其他的handler何用?
答:通过evdev获得的是原始数据,
      比如说对于键盘,你可以通过访问/dev/eventXXX获得原始数据;
      也可以通过keyboard所注册的handler得到加工后的数据

b,以下的id_table 哪个是总线、厂家ID、设备ID、EVBIT?在设备驱动中如何对应?
答:
struct input_dev {
        const char *name;
        const char *phys;
        const char *uniq;
        struct input_id id;
.....

struct input_id {
        __u16 bustype;
        __u16 vendor;
        __u16 product;
        __u16 version;
};


一看即知,在我写的驱动中,没有去设置input_id
thisway.diy
回复 支持 反对

使用道具 举报

技术支持
在线咨询
咨询热线
0755-86200561
微信扫一扫
获取更多资讯!

Archiver|小黑屋|百问linux嵌入式论坛     

GMT+8, 2018-12-18 19:47 , Processed in 0.228590 second(s), 19 queries , File On.

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc. Template By 【未来科技】【 www.wekei.cn 】

快速回复 返回顶部 返回列表