万事开头难,有了上一篇LED的基础,这次就可以仿照LED的驱动来实现按键驱动。。。可以说是一模一样。。所以写的很简单,有需要可理解上一篇,在来参照代码理解。
【本文默认使用交叉编译:arm-linux-gcc-3.4.5-glibc-2.3.6 和 linux-2.6.22.6内核】
其实思路都是一模一样的:注册dev --> 通过虚拟地址调用物理地址(ioremap)--> 读取按键对应寄存器的值并得到某一位的值-->取消注册。。
代码:https://github.com/zion6135/CPP-study/tree/develop/2.Linux/button
需要实现read,open,init,exit等四个相关的函数
static struct file_operations button_drv_fops = {
.owner = THIS_MODULE,
.open = button_drv_open,
.read = button_drv_read,
};
module_init(button_drv_init);
module_exit(button_drv_exit);
执行步骤:
- 执行compile.sh生成button_drv.ko和可执行文件button
- insmod button_drv.ko
- button
- 按下按键可看到相关信息