博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Linux driver 原子操作-管理设备被多个文件(进程)打开
阅读量:7214 次
发布时间:2019-06-29

本文共 2228 字,大约阅读时间需要 7 分钟。

下面程序演示一个设备如何同时被多个进程或者文件访问,或者只允许一个进程或者一个文件访问的原子操作.

操作步骤如下:

<1> : 编写一个atomic.c的驱动程序:

#include
#include
#include
#include
#include
#include
#include
#define DEVICE_NAME "atomic"static int atom=1;static atomic_t int_atomic_available=ATOMIC_INIT(1);static int atomic_open(struct inode *node,struct file *file){ if(atom){ if(!atomic_dec_and_test(&int_atomic_available)){ atomic_inc(&int_atomic_available); return -EBUSY; } } printk("atomic dev open successfully !\n"); return 0;}static int atomic_release(struct inode *node,struct file *file){ if(atom){ atomic_inc(&int_atomic_available); } printk("atomic dev release successfully !\n"); return 0;}static struct file_operations dev_fops={ .owner=THIS_MODULE, .open=atomic_open, .release=atomic_release};static struct miscdevice misc={ .minor=MISC_DYNAMIC_MINOR, .name=DEVICE_NAME, .fops=&dev_fops};static int __init atomic_init(void){ int ret=misc_register(&misc); printk("atomic_init_success\n"); return ret;}static void __exit atomic_exit(void){ printk("atomic_exit_success\n"); misc_deregister(&misc);}module_init(atomic_init);module_exit(atomic_exit);module_param(atom,int,S_IRUGO|S_IWUSR);MODULE_LICENSE("GPL");MODULE_AUTHOR("zhibao.liu");

写多了就是这个套路...

<2> : 编写Makefile文件:

obj-m :=atomic.o

<3> : 编写一个shell脚本,一次编写,多次简单运行:

#!bash/binmake -C /usr/src/linux-headers-3.8.0-29-generic M=/root/workspace/drivers/atomicmodule/

<4> : 再编一个转载卸载和显示设备信息的脚本,方便build后,看看效果:

#!bash/bininsmod atomic.kolsmod | grep atomicdmesg | grep atomic | tail -n 2modinfo atomic.kormmod atomic

<5> : 编写完上面的,基本上,只需要在终端运行脚本就可以了,可以将脚本设置为可执行:

chmod u+x ***.sh

<6> : 上面运行上面的run.sh并没有转载好atomic这个设备,因为它最后一句话rmmod atomic卸载了,所以要装载,在终端输入insmod atomic.ko

<7> : 测试程序就简单了,只需要打开这个设备:

atomic_test.c

#include
#include
int main(){ int handler=open("/dev/atomic",0); printf("handler : %d\n",handler); if(handler>0){ getchar(); close(handler); }else{ printf("errno:%d\n",errno); }}

编译:

gcc -c atomic_test.c -o atomic_testgcc -o atomic_test atomic_test.o

 

<8> 如果驱动里面的atom的值设为0,那么可以被多个文件和进程打开,如果设置为1,那么只能被一个文件和进程打开.

测试在多个终端中运行./atomic_test

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

你可能感兴趣的文章
springboot整合shiro使用shiro-spring-boot-web-starter
查看>>
Express4.x api 翻译(draft)
查看>>
我为什么晚上写代码?
查看>>
React+Redux开发实录(一)搭建工程脚手架
查看>>
我来阅读lodash源码——Math(一)
查看>>
Laravel 5.5 使用 Passport 实现 Auth 认证
查看>>
用python写通用restful api service(一)
查看>>
javascript this指针详解
查看>>
Hystrix:HystrixCollapser请求合并
查看>>
three.js 入门详解(一)
查看>>
Android基础之Java接口
查看>>
Angular开发实践(一):环境准备及框架搭建
查看>>
Vue2 源码漫游(二)
查看>>
微信浏览器下拉黑边的终极解决方案---wScroollFix
查看>>
我是如何学会爱上 Vim 的
查看>>
小tips:JS中typeof与instanceof用法
查看>>
阿里云Ecs挂载云盘
查看>>
《Kotlin项目实战开发》第1章 Kotlin是什么
查看>>
基于 react, redux 最佳实践构建的 2048
查看>>
云栖大会看技术人成长之路
查看>>