linux 信号量 自旋锁 测试 实验,嵌入式驱个动开发实验指导书.doc

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

《嵌入式驱动开发》实验

实验一

实验题目:Linux计算器应用程序及hello驱动程序

实验目的:掌握Linux常用操作命令、熟悉使用vi编程、掌握gcc/makefile编译基本方法

实验类型:设计

实验要求:必修

仪器设备:计算机

实验内容、方法、步骤:

一、编写一个计算器程序,实现菜单显示、加减乘除功能。

要求:1)基于Linux平台开发

2)使用vi编辑器编写

3)使用gcc编译

一.课搭建samba服务器

二.c编程练习(将10个数放入数组,找出最大的一个数,并输出)

二、 编写hello驱动程序,编译后,进行加载、卸载驱动模块以对驱动进行测试。

一.hello.c驱动程序

实验二

实验题目:简单的字符设备驱动程序

实验目的:掌握Makefile文件编写方法;熟悉字符设备驱动程序设计、开发和使用流程;

实验类型:综合

实验要求:必修

仪器设备:计算机

实验内容、方法、步骤:

编写一个简单的字符设备驱动程序,完成下列功能,并写出运行程序后输出的结果。

编写简单的字符设备驱动程序,能够实现对虚拟设备int类型变量的读写操作;

编写Makefile文件,对驱动程序进行编译;

采用动态模块加载方式对驱动程序进行加载,并查看加载前后效果;

编写测试程序,对虚拟设备进行读写操作,对驱动程序功能进行验证。

实验步骤:

使用如下命令创建驱动源程序文件进行编写。

vim globalvar.c

编写相应的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

提交代码:

globalvar.c/globalvar.o

Makefile

globalvartest.c/globalvartest.o

测试结果(.jpg文件)

一.globalvar.c驱动程序

测试程序

makefile文件

测试结果

实验三

实验题目:并发控制及中断程序

实验目的:

(1)掌握linux内核中并发控制的方法,学会运用信号量/队列/自旋锁进行内核驱动程序中的并发控制;

(2)掌握中断处理机制原理,学会使用tasklet进行软中断处理。

实验类型:综合

实验要求:必修

仪器设备:计算机

实验内容、方法、步骤:

以简单的字符设备驱动程序globalvar为基础,编写程序完成下列功能,并写出运行程序后输出的结果。

在globalvar驱动程序中,使用自旋锁功能,进行设备打开操作控制。实现已打开的设备不能再被其他用户和进程打开;并编写测试程序进行测试;

在globalvar驱动程序中,使用信号量和队列功能,进行设备读写操作控制。实现:a) 设备不能同时被两个及以上用户和进程打开; b) 且仅能先写入设备,才能进行读取设备操作;c) 编程测试程序进行功能测试;

在globalvar驱动程序中,使用tasklet功能,进行中断处理操作。实现在对设备进行写入操作后,通过中断处理方式,打印信息;并编写测试程序进行测试;

实验步骤:

一,基本操作

使用如下命令创建驱动源程序文件进行编写。

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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值