分层设计的驱动程序 及gpio驱动(Linux驱动5)
2017-03-12 15:23
302 查看
说明:
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*)
用法:
定义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);
}
通过借用面向对象的思想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);
}
相关文章推荐
- Linux设备驱动的分层设计思想
- Linux设备驱动程序学习(基于2440的GPIO字符设备驱动)
- 基于mini6410的linux驱动学习总结(四 设计字符设备驱动程序)
- Linux设备驱动的分层设计思想
- 按键驱动程序设计---混杂设备、中断分层处理、工作队列、阻塞型驱动
- 基于Gpio的Linux字符型驱动设计--…
- 09-S3C2440驱动学习(三)嵌入式linux-platform平台总线驱动程序及分离分层构建驱动框架
- linux下的cmos摄像头驱动设计2-应用程序的调用与驱动程序的关系
- Linux设备驱动的分层设计思想
- Linux-USB驱动(5)-USB驱动程序设计
- Linux按键驱动程序设计(4)-中断分层技术
- 嵌入式Linux驱动学习之路(十七)驱动程序分层分离概念-平台设备驱动
- Linux按键驱动程序设计(1)-混杂设备驱动模型
- Linux USB设备驱动程序设计 和 USB下载线驱动设计
- Linux设备驱动的分层设计思想[转]
- 嵌入式Linux中基于 Qt/Embeded触摸屏驱动的设计
- 嵌入式Linux系统下MPEG-4专用编码器驱动设计
- Linux字符设备驱动程序的设计
- Linux驱动程序开发(4) - 字符设备驱动(3)-LED设备驱动和应用程序
- 转:Linux设备驱动程序设计实例