目的:按键驱动,通过查询的方式获取按键值。
- 写出框架:
a.file_operation结构体;
b.入口函数中注册file_operation结构体,出口函数中卸载;
c.给sysfs提供更多的信息,用来给udev自动创建设备节点(创建一个class,在这个class下面创建class device); - 硬件操作;
a.看原理图,引脚;
b.看2440的手册;
c.编程:单片机:使用物理地址;驱动:使用虚拟地址;(UA = ioremap(PA, size))
操作:在入口函数做地址映射,在open函数中配置引脚,在read函数中读取引脚状态。
内核态向用户态传数据,使用copy_to_user函数。
test函数中使用read函数进行读取,该函数最终调用内核中注册的second_drv_read函数。
使用./seconddrvtest & 让它在后台运行,然后用top指令查看,可以发现seconddrvtest 对CPU的占用率达到了99%,这是因为我们一直在while(1)中循环,所以CPU一直就在执行这一个进程。
这样做明显是不行的,但是按键的按下经常是不可以预测。使用轮询的方式来查询按键是否按下是很糟糕的做法,正常的做法是在中断中进行判断和操作。