这是我在堆栈交换中的第一个查询,请耐心等待。我想到的几乎所有问题都已经从论坛中解决了,但我无法找到这个问题。
我在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中被禁用。所以我看到ARM的CPSR寄存器使用调试器,'I'位被屏蔽,因此IRQ被禁用。但令我惊讶的是,Linux提示符甚至schedule()函数正常工作。
所以我的查询是在Linux中我们只对某些外设使用IRQ模式吗?如果是这种情况,我们怎样才能保证线程上下文和中断上下文之间的完美同步?
关于我的目标的一些细节:TI81xx Soc,Linux 3.2,Lauterbach Debugger。
谢谢