C 如何设置寄存器值以启用中断?

C 如何设置寄存器值以启用中断?,c,linux,linux-kernel,C,Linux,Linux Kernel,我正在处理Android设备的中断。(Android 4.2.2内核2.6.29,运行在Mach Goldfish虚拟设备上) 到目前为止,我已经用中断17注册了我的设备。它尚未启用,因此发送到此中断的信号将被忽略,并且不会通知我的中断处理程序 启用我的设备的寄存器位于偏移量0x00处,内存地址由返回 (char\uu iomem*)IO\u地址(资源->开始-IO\u开始) 从0xFE016000开始 我试过:(在mydevice\u probe()) 但是内核马上崩溃了。以下writels也

我正在处理Android设备的中断。(Android 4.2.2内核2.6.29,运行在Mach Goldfish虚拟设备上)

到目前为止,我已经用中断17注册了我的设备。它尚未启用,因此发送到此中断的信号将被忽略,并且不会通知我的中断处理程序

启用我的设备的寄存器位于偏移量0x00处,内存地址由返回

(char\uu iomem*)IO\u地址(资源->开始-IO\u开始)

从0xFE016000开始

我试过:(在
mydevice\u probe()

但是内核马上崩溃了。以下
writel
s也不起作用:

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(掩码,IO_地址(资源->启动-IO_启动))
应该可以工作。

@Mellowcandle它是一个传感器。我指的是哪个设备,它是哪个板?你是如何得到
0xFE016000
地址的?我将大胆猜测,您使用的是物理地址而不是虚拟地址。在这种情况下,您需要将其输入到
ioremap()
中,以获得一个虚拟地址,用于
writel()
。或者更好的是,只需使用
ioremap()
。即
void\u iomem*io\u base=ioremap(资源->开始,资源->结束-资源->开始+1)然后使用写入(值,io_基+偏移量)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)