我正在为Android中的设备处理中断。 (Android 4.2.2 Kernel 2.6.29,在Mach-Goldfish虚拟设备上运行)。
到目前为止,我已经使用中断#17注册了我的设备。它尚未启用,因此忽略发送到此中断的信号,并且不会通知我的中断处理程序。
启用我的设备的寄存器位于偏移量0x00,以及
返回的内存地址 (char __iomem *)IO_ADDRESS(resource->start - IO_START)
从0xFE016000开始。
我尝试过:(在mydevice_probe()
)
writel(0x07, 0xFE016000);
//0x07 is a mask to enable three sub-devices at bit 0, bit 1 and bit 2.
但是内核马上就崩溃了。以下writel
也不起作用:
writel(0x00, 0xFE016000);
writel(0x01, 0xFE016000);
我错过了什么?任何人都可以告诉我如何完成这项工作吗?如果我的起始地址错误,你能指出正确的方法吗?
感谢。
P / S:内核恐慌:qemu: fatal: mydevice_write: Bad offset fea000
R00=c02ef00b R01=00000000 R02=00000007 R03=e0808000
R04=c0340864 R05=c031e3b0 R06=c0173b6c R07=c031e3cc
R08=00000000 R09=00100100 R10=00000000 R11=df827e34
R12=ff016000 R13=df827e18 R14=c002e96c R15=c0030aac
PSR=20000013 --C- A svc32
Aborted (core dumped)
答案 0 :(得分:0)
这是为了结束我的问题。
事实证明,模拟器有问题。
通常writel(MASK, IO_ADDRESS(resource->start - IO_START));
应该有效。