前提:我们公司买的是Yosun公司的开发板,BSP是:YosunAP-Android EC_2.1_RTM1.0-20101124-9a5

一个驱动开发(修改)的思路很重要,对于按键驱动我认为只要抓住4点就可以了,

1.硬件按下后,软件可控制的入口在哪里。这里我找到了/driver/input/keyboad/gpio_keys.c中的static int __devinit gpio_keys_probe(struct platform_device *pdev),那么我就要仔细的加输出信息帮助我们理解。

ints3c_gpio_keys[]=

{

IRQ_EINT(0),

IRQ_EINT(1),

IRQ_EINT(2),

IRQ_EINT(3),

IRQ_EINT(4),

};

2.对于具体的操作系统处理上的区别:

wince:外部中断只要中断,事件,线程,就可以清晰了。

linux:也一样,这里她有自己的处理逻辑,我们只能按照这个来。

gpio_keys_probe处理所有按键,假如我们这里只处理IRQ_EINT(15)。

那么根据下面

1.arch/arm/amch-s3c6410/mach-smdk6410.c

staticstructgpio_keys_buttonsmdk6410_buttons[]={

{

.gpio=S3C64XX_GPN(15),

.code=KEY_ENTER,

.desc="Enter",

.active_low=1,

.wakeup=0,

}; 将会发给android上层为enter键码。

3.内核层如何与应用层交互。
此时上层android-sdk就可以使用onKeyDown来实现上下等等操作。我们这里按照硬件的顺序添加 0 1 2 ,分别运行test0 test1, test2应用程序,从而完成整个开发。

4.如何将你的驱动添加到系统中去。
static struct gpio_keys_button smdk6410_buttons[] = {

{

.gpio = S3C64XX_GPN(0),

.code = 158,

.desc = "Down",

.active_low = 1,

.wakeup = 0,

},

{

.gpio = S3C64XX_GPN(1),

.code = KEY_ENTER,

.desc = "Enter",

.active_low = 1,

.wakeup = 0,

},

{

.gpio = S3C64XX_GPN(2),

.code = KEY_HOME,

.desc = "Home",

.active_low = 1,

.wakeup = 0,

},

{

.gpio = S3C64XX_GPN(3),

.code = KEY_POWER,

.desc = "Power",

.active_low = 1,

.wakeup = 0,

},

{

.gpio = S3C64XX_GPN(4),

.code = KEY_TAB,

.desc = "Tab",

.active_low = 1,

.wakeup = 0,

},

};

static struct gpio_keys_platform_data smdk6410_button_data = {

.buttons = smdk6410_buttons,

.nbuttons = ARRAY_SIZE(smdk6410_buttons),

};

static struct platform_device smdk6410_device_button = {

.name = "gpio-keys",

.id = 1,

.dev = {

.platform_data = &smdk6410_button_data,

},

};

static struct platform_device *smdk6410_devices[] __initdata = {

更多相关文章

  1. android键盘钩子 android按键劫持
  2. android arm64硬件实现加速crc32算法
  3. Android 输入系统 与 按键
  4. 关于Android上面配置硬件加速的问题
  5. Android 7.1 Launcher3 支持按键操作显示所有应用
  6. Android系统移植(二)-按键移植
  7. 为Android扩展一个硬件模块需要做两件事:

随机推荐

  1. 浅谈Mysql多表连接查询的执行细节
  2. Mysql基础之常见函数
  3. MySQL分库分表与分区的入门指南
  4. MySQL8.0.24版本Release Note的一些改进
  5. 详解MySQL的半同步
  6. 详解MySQL事务的隔离级别与MVCC
  7. MySQL之高可用集群部署及故障切换实现
  8. 教你用eclipse连接mysql数据库
  9. MySQL 慢查询日志深入理解
  10. MySQL root密码的重置方法