これはスタック交換での最初のクエリですので、ご容赦ください。私の頭に浮かぶほとんどすべての質問は、フォーラムからすでに解決されていますが、これを見つけることができません.
Linux で単純なデバイス ドライバーを作成しました。ここで、my_init() 関数に次のコードを記述しました。
spinlock_t mylock = SPIN_LOCK_UNLOCKED
static int __init my_init()
{
unsigned long flags;
printk("Testing spinlock\n");
spin_lock_irqsave(&mylock, flag);
printk("Grabbing spinlock and return\n");
}
したがって、スピンロックを解放せずに単純に戻ります。理論と Linux ソース コードによると、割り込みは ARM で無効になっています。そのため、「I」ビットを使用してデバッガを使用している ARM の CPSR レジスタがマスクされ、IRQ が無効になっているのを見ました。しかし、驚いたことに、Linux プロンプトと schedule() 関数でさえ、通常どおりに機能しています。
私の質問は Linux で、一部の周辺機器にのみ IRQ モードを使用しますか? この場合、スレッド コンテキストと割り込みコンテキストの間の完全な同期をどのように保証できますか?
私のターゲットについて少し詳しく説明します:TI81xx Soc、Linux 3.2、Lauterbach Debugger。
ありがとう