-
我又仔细看了一下,如果是完整的程序的话,还有些问题呀。
你用户空间的应用程序使用open打开设备节点,可是你的驱动程序里,并没有open这个方法,同时也没有程序来调用你自己编写的这个 request_irqs函数,所以根本没有注册中断,所以没有显示。
你应该编写一个open函数,添加到结构体:
static struct file_operations s3c2440_key_fops = {
.owner = THIS_MODULE,
.open = (你的函数)
};
在open函数里在调用request_irqs函数,最后你最好还是要设置一下触发类型。差不多就这样吧,你可以试一下。
-
ret=request_irq(IRQ_EINT0,key_isr,IRQF_SHARED,DEVICE_NAME,NULL);
如果使用IRQF_SHARED的话,最后就不能用NULL了,你可以随便指定一个地址,但是不能为NULL的。
-
在Linux系统中,支持部分arm可以在运行中调节CPU的频率来节省电量,我看了下代码,根据平台不同可能设置的方法也不同,但是就我熟悉的来看,应该是设置寄存器就可以了。CPU的频率会在文件系统中的/sys/目录下面的文件中有所体现,当内核调用改变频率的函数的时候,同时也会知会/sys/下的相关文件。如果需要的动态调节的话,可以自己编写一个驱动,对用户空间提供一个接口,然后在用户空间编写一个守护进程来判断是否需要调节频率,然后控制驱动对应的节点就可以了。简单的看了下,只了解些Linux系统,说的不对的话,请指教,呵呵。
[ 本帖最后由 lntuabc 于 2011-4-10 15:31 编辑 ]