实验十三 内核同步实验

上传人:第*** 文档编号:30561411 上传时间:2018-01-30 格式:DOC 页数:4 大小:32.50KB
返回 下载 相关 举报
实验十三 内核同步实验_第1页
第1页 / 共4页
实验十三 内核同步实验_第2页
第2页 / 共4页
实验十三 内核同步实验_第3页
第3页 / 共4页
实验十三 内核同步实验_第4页
第4页 / 共4页
亲,该文档总共4页,全部预览完了,如果喜欢就下载吧!
资源描述

《实验十三 内核同步实验》由会员分享,可在线阅读,更多相关《实验十三 内核同步实验(4页珍藏版)》请在金锄头文库上搜索。

1、实验十三 内核同步实验实验目的掌握字符设备驱动程序编写的框架;掌握内核中同步操作函数的使用;实验原理自旋锁:只有两种状态:锁上,没锁上。 (lock, unlock)当一个线程上锁自旋锁时,别的线程想要锁上该自旋锁的时候,会自旋(轮询)。直到第一个线程释放该自旋锁。信号量:跟自旋锁相比:不能获得时,休眠(而不是自旋) ;有数值(不是两种状态) ;读写自旋锁:读可以多个线程一起;但写操作时,只能一个线程;读写信号量:休眠互斥体:只有两种状态的信号量(1,0) ;实验要求(1)修改 fs2410 开发板上的 LED 灯驱动程序(基于下面的代码 ) ;使用应用层打开设备文件时,同一时间,只能有一个进

2、程能够使用该文件。一个进程打开设备文件后,另外一个进程打不开这个设备文件。主要修改驱动的:open, release 方法;使用信号量实现;(2)驱动中对全局变量 led_states 的同步保护;主要修改驱动的:read,write 方法;分别使用:自旋锁,读写自旋锁,读写信号量,互斥体实现;Led 驱动程序如下:#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include static

3、 struct class *led_class;static unsigned long gpfbase;#define GPFCON (*(volatile unsigned long *)(gpfbase +0x0)#define GPFDAT (*(volatile unsigned long *)(gpfbase +0x4)#define GPFUP (*(volatile unsigned long *)(gpfbase +0x8)static int fs2410_led_open(struct inode *inode, struct file *file)printk(fir

4、st drver open calln);GPFCON= 0x5500;GPFUP = 0xf0;GPFDAT=0x0;return 0;static int fs2410_led_release(struct inode * inode, struct file * file)printk(first dirver release call!n);GPFDAT=0xf0;return 0;/全局变量的读写使用读写自旋锁static char led_states = 0x0;static ssize_t fs2410_led_write(struct file *file, const ch

5、ar _user *userbuf,size_t bytes, loff_t *off)char val;copy_from_user(printk(%d,val);GPFDAT = (valowner = THIS_MODULE;gpfbase = ioremap(0x56000050, 12);if(gpfbase = NULL)printk(ioremap error!n);return -1;/*注册 cdev*/cdev_add(fs2410_led_cdev, dev, 1);led_class = class_create(THIS_MODULE, fs2410_led);dev

6、ice_create(led_class, NULL, dev, NULL, fs2410_led);return 0;static void _exit fs2410_led_exit(void)dev_t dev;dev = MKDEV(major,0);/*注销 cdev*/cdev_del(fs2410_led_cdev);/*注销设备号*/unregister_chrdev_region(dev, 1);iounmap(gpfbase);device_destroy(led_class, dev);class_destroy(led_class);module_init( fs2410_led_init);module_exit( fs2410_led_exit);MODULE_LICENSE(GPL);

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 其它办公文档

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号