我正在android中处理一个设备的中断。(Android 4.2.2内核2.6.29,运行在Mach Goldfish虚拟设备上)。
到目前为止,我已经用中断17注册了我的设备。它尚未启用,因此发送到此中断的信号将被忽略,并且不会通知我的中断处理程序。
启用设备的寄存器位于偏移量0x00处,内存地址由返回
(char __iomem *)IO_ADDRESS(resource->start - IO_START)
从0xFE016000开始。
我试过:(inmydevice_probe()

writel(0x07, 0xFE016000);
//0x07 is a mask to enable three sub-devices at bit 0, bit 1 and bit 2.

但是内核立刻崩溃了。以下writels也不起作用:
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)

最佳答案

这是结束我的问题。
结果是仿真器出了故障。
通常writel(MASK, IO_ADDRESS(resource->start - IO_START));应该有效。

10-08 11:16