- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
Linux驱动并发控制之位原子操作
Linux 驱动并发控制之位原子操作
本节实验和 “Linux驱动并发控制之整型原子操作”对照着来学习。
位原子操作是利用位操作来实现并发控制 ,整型原子操作是利用整型来实现并发控制。这
两种方式的原理类似。
本章导读
主要内容
并发和竞态
位原子操作
位原子操作
常用的位原子操作函数如下。
设置位
void set_bit (nr ,void *ptr);
清除位
clear_bit (nr ,void *ptr);
改变位
change_bit (nr ,void *ptr );
测试位
test_and_set_bit (nr ,void *ptr);
测试并操作位
test_and_clear_bit (nr ,void *ptr);
test_and_change_bit (nr ,void *ptr );
1
北京迅为电子有限公司 精英版 驱动实验文档
代码
设备注册
在内核平台文件 “arch/arm/mach-exynos/mach-itop4412.c”中定义设备结构体。
struct platform_device s3c_device_atomic_bit_ctl ={
.name = atomic_bit,
.id = -1,
};
注册设备
s3c_device_atomic_bit_ctl,
驱动
如下所示 ,驱动源码文件 atomic_bit.c ,注意 open 和 release 函数中位原子变量的操
作。
#include linux/init.h
#include linux/module.h
/*驱动注册的头文件 ,包含驱动的结构体和注册和卸载的函数*/
#include linux/platform_device.h
/*注册杂项设备头文件*/
#include linux/miscdevice.h
/*注册设备节点的文件结构体*/
#include linux/fs.h
//原子操作的函数头文件
#include asm/atomic.h
#include asm/types.h
#define DRIVER_NAME atomic_bit
#define DEVICE_NAME atomic_bit
MODULE_LICENSE(Dual BSD/GPL);
MODULE_AUTHOR(TOPEET);
2
版本号 :V1.0 日期 :2016-05-10
北京迅为电子有限公司 精英版 驱动实验文档
//定义原子变量,并初始化为 0
//static atomic_t value_atomic =ATOMIC_INIT(0);
//定义位原子变量
unsigned long int value_bit =0;
static int atomic_bit_open(struct inode *inode, struct file *file){
printk(KERN_EMERG atomic_bit open in!\n);
/*if(atomic_read(value_atomic)){
return -EBUSY;
}*/
//atomic_inc(value_atomic);
if(test_bit(0,value_bit)!=0){
return -EBUSY;
}
set_bit(0,value_bit);
printk(KERN_EMERG atomic_bit open success!\n);
return0;
}
static int atomic_bit_release(struct inode *inode, struct file *file){
printk(KERN_EMERG at
您可能关注的文档
- 2017中美独角兽研究报告.pptx
- 2017全球人工智能发展报告(投资与融资篇).pptx
- 2017年全球财富报告——财富管理数字转型,打造全新客户体验.pptx
- 2017年全球保险科技(InsurTech)调查报告.保险业“新常态”以保险科技驱动创新.pptx
- 2017中国人才趋势报告.洞察中国人才就业观.pptx
- 2017年小程序发展状况报告.pptx
- 360kr-打扮家调研报告_以VR/AR为切入点,用所见即所得的“预装修”模式,为家装企业提供SaaS服务.pptx
- 2017计生用品相关消费系列研究报告.docx
- 5G毫米波相控阵芯片与系统解决方案.pdf
- ARM NB-IoT报告acceletating the ruoute to secure scable iot.pdf
最近下载
- the-new-age-of-invention高一英语新外研版必修三unit3课件.pptx VIP
- (2025)呼伦贝尔市入团积极分子考试题库(含答案).docx VIP
- HG∕T 5677-2020 石油炼制行业绿色工厂评价要求.pdf VIP
- 《基于三菱FX2N控制系统的自动剥线机设计》9500字(论文) .pdf
- 奔驰500系列发动机操作手册.pdf VIP
- 天津大学学生宿舍文明住宿承诺书.DOC VIP
- 2025年中国半乳甘露聚糖项目创业计划书.docx
- The new age of invention课件新外研版必修三unit3.pdf VIP
- 2024辽宁中考数学二轮专题复习 微专题 遇到角平分线如何添加辅助线(课件).pptx VIP
- xx集团粮食仓储及加工基地可行性研究报告.docx
文档评论(0)