嵌入式驱动开发实验指导书

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) ...

联系客服:779662525#qq.com(#替换为@) 苏ICP备20003344号-4