现在使用的是单核linux系统,我只调用spin_lock_irqsave进行测试该函数功能,不调用spin_unlock_irqrestore,验证该函数是否能关闭cpu所有的中断
,实际并不会,因为我用另外一个驱动程序申请了一个gpio中断,发现gpio中断还是可以正常响应,那么spin_lock_irqsave函数不能关闭cpu所有的中断吗?
代码如下:
static int test_hello_init(void)
{
unsigned long flags;
pr_info("hahaha irqtest\n");
spin_lock_init(&wk_lock);
spin_lock_irqsave(&wk_lock, flags);
return 0;
}
Linux系统
想知道spin_lock_irqsave函数到底能不能关闭cpu所有中断
不知道你这个问题是否已经解决, 如果还没有解决的话:spin_lock_irqsave函数在单核系统中是不能关闭CPU的所有中断的。它只能禁止当前CPU的本地中断,即使使用了spin_lock_irqsave函数,其他CPU仍然可以触发中断并且可以响应。
要关闭CPU的所有中断,您可以使用本地中断禁用指令cli,然后再使用sti指令恢复中断状态。在x86架构上,可以使用以下代码来实现:
#include <asm/irqflags.h>
// 禁用中断
cli();
// 启用中断
sti();
但需要注意的是,在单核系统上禁用中断可能会导致系统失去响应,因为禁用中断将阻止系统处理中断请求。所以在实际开发中,必须谨慎使用禁用中断的操作。
对于其他的中断控制方法,您可以参考Linux内核的文档和相关资料进行进一步学习和研究。