Android でデバイスの割り込みを処理しています。(Android 4.2.2 カーネル 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
の 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)