内容发布更新时间 : 2024/12/23 17:57:19星期一 下面是文章的全部内容请认真阅读。
1) 在globalvar驱动程序中,使用自旋锁功能,进行设备打开操
作控制。实现已打开的设备不能再被其他用户和进程打开;并编写测试程序进行测试; 2)
在globalvar驱动程序中,使用信号量和队列功能,进行设备
读写操作控制。实现:a) 设备不能同时被两个及以上用户和进程打开; b) 且仅能先写入设备,才能进行读取设备操作;c) 编程测试程序进行功能测试; 3)
在globalvar驱动程序中,使用tasklet功能,进行中断处理
操作。实现在对设备进行写入操作后,通过中断处理方式,打印信息;并编写测试程序进行测试; 实验步骤: 一,基本操作
1)使用如下命令创建驱动源程序文件进行编写。 vim globalvar.c
2)编写相应的Makefile文件。 vim Makefile
3)对驱动程序进行编译、调试,生成globalvar.o目标文件。 make(make clean)
4)加载驱动程序,并查看是否加载成功。 insmod globalvar.o cat /proc/devices
(卸载模块命令 rmmod globalvar)(注意:无后缀名)5)编写测试文件globalvartest.c,并进行编译,globalvartest.o可执行文件。 6)创建虚拟设备文件。
mknod /dev/globalvar c 253 0
7)运行globalvartest.o,查看、记录并提交结果。 ./globalvartest.o 二,自旋锁功能 1)定义及初始化:
包括头文件/asm/semaphore.h
static spinlock_t spin = SPIN_LOCK_UNLOCKED; static int count = 0; 2)获取自旋锁
生成
在globalvar_open()中获取自旋锁, spin_lock(&spin); 3)释放自旋锁
在globalvar_open()中释放自旋锁, if(count) {
spin_unlock(&spin); return –EBUSY; } count++;
spin_unlock(&spin);
4) 在globalvar_release()中, count--;
5) 测试MOD_INC_USE_COUNT/ MOD_DEC_USE_COUNT功能。 6)编写应用测试进行测试。
7)提交代码和测试结果(参照实验2方式)。 一. spin.c驱动程序
测试程序
运行结果
解释代码
三,信号量和队列功能 1)定义及初始化:
包括头文件/asm/semaphore.h 以及 /linux/wait.h static struct semaphore sem; static wait_queue_head_t outq; static int flag = 0; 初始化:
在globalvar_init(void)中
if(ret) ...