2

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)
4

1 に答える 1

0

これで私の質問を終了します。エミュレーターに問題があることがわかりました。通常writel(MASK, IO_ADDRESS(resource->start - IO_START));は動作するはずです。

于 2013-04-12T08:03:10.377 に答える