2

我正在处理 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.

但是内核立即崩溃了。以下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)
4

1 回答 1

0

这是结束我的问题。原来是模拟器有问题。通常writel(MASK, IO_ADDRESS(resource->start - IO_START));应该可以工作。

于 2013-04-12T08:03:10.377 回答