分层设计的驱动程序 及gpio驱动(Linux驱动5)

说明:

  通过借用面向对象的思想linux中的驱动程序呈现两个特点,分层与分离.就是将重复的代码抽象出来,用户仅需关心不一样的部分.通过抽象,将一些设备的共同部分抽取出来,内核实现
    通用部分,用户实现具体不一样部分.输入驱动,rtc驱动,i2c驱动等都是这样实现的.

gpio输入驱动:
说明:

gpio驱动是指用gpio来实现的按键输入驱动.内核drivers/input/keyboard/gpio_keys.c中实现通用的按键驱动.从这个例子可以看出,通过抽象,将数据与程序分离.用户只需关心按键的定义即可.

变量:

struct gpio_keys_button{//用于描述gpio按键的资源
code
gpio
type
desc
active_low
wakeup

}
struct gpio_keys_platform_data{
buttons //上面描述的资源
nbuttons//数量
}

函数:

input_dev* input_allocate_device(void)
input_free_device(input_dev*)

        input_register_device(input_dev*)
        input_unregister_device(input_dev*)

        input_event(input_dev*,unsigned int code,unsigned int type,int value)
        input_report_key(input_dev*,unsigned int code,unsigned int type,int value)
        input_report_rel(input_dev*,unsigned int code,unsigned int type,int value)
        input_report_abs(input_dev*,unsigned int code,unsigned int type,int value)
        input_sync(input_dev*)

用法:

定义gpio_keys_button结构成员
xx_buttons[]={
{
.gpio=
.code=
.wakeup=
.desc=
.active_low=
},
{
.gpio=
.code=
.wakeup=
.desc=
.active_low=
},

}
//定义platform_data
xx_key_platform_data={
.buttons=&xx_buttons;
.nbuttons=ARRAY_SIZE(xx_buttons)
}
//将platform_data赋予dev
xx_device={
.name=”xx”,//名字要为gpio-keys或者gpio-keys-polled
.id=1;
.dev={
.platform_data=&xx_key_platforn_data;
}
}
//在合适的地方调用platform_device,系统自动回匹配相应的驱动
xx_fun()
{
platform_device_register(&xx_device);
}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值