一. 简介
前面学习了不考虑中断的自旋锁的代码举例,文章地址:
Linux内核自旋锁驱动代码举例一-CSDN博客
但是在 Linux系统中,中断时存在的。所以,这里学习使用带保存中断状态的自旋锁API函数,实现对Led设备的互斥访问。
二. 带保存中断状态的自旋锁函数使用
1. 准备工程代码
这里在前面 8_spinlock工程代码的基础上,进行更改。通过 vscode软件打开 8_spinlock工程代码。
主要在 spinlock.c文件中添加原子操作,实现对Led灯的互斥访问。
这里所使用的关键的自旋锁 API函数为:
函数 | 描述 |
void spin_lock_irqsave(spinlock_t *lock, unsigned long flags) | 保存中断状态,禁止本地中断,并获取自旋锁。 |
void spin_unlock_irqrestore(spinlock_t *lock, unsigned long flags) | 将中断状态恢复到以前的状态,并且激活本地中断, 释放自旋锁。 |