大家好,为了进一步提升大家对实验的认识程度,每个控制实验将加入详细控制思路与流程,欢迎交流学习。
今天给大家分享一下,linux系统里面自旋锁操作的具体实现,操作硬件为I.MX6ULL开发板。
第一:自旋锁基本简介
①、自旋锁保护的临界区要尽可能的短,可以使用一个变量来表示设备的使用情况,如果设备被 使用了那么变量就加一,设备被释放以后变量就减 1,我们只需要使用自旋锁保护这个变量即 可。
②、考虑驱动的兼容性,合理的选择 API 函数。
综上所述,我们通过定义一个变量 dev_stats 表示设备的使用情况,dev_stats 为 0 的时候表示设备没有被使用,dev_stats 大于 0 的时候表示设备被使用。驱动 open 函数中先 判断 dev_stats 是否为 0,也就是判断设备是否可用,如果为 0 的话就使用设备,并且将 dev_stats 加 1,表示设备被使用了。使用完以后在 release 函数中将 dev_stats 减 1,表示设备没有被使用 了。因此真正实现设备互斥访问的是变量 dev_stats,但是我们要使用自旋锁对 dev_stats 来做保 护。
第二:驱动程序实现
#include <linux/types.h>
#include <linux/kernel.h>
#include <linux/delay.h>