嵌入式驱动开发实验指导书.doc_第1页
嵌入式驱动开发实验指导书.doc_第2页
嵌入式驱动开发实验指导书.doc_第3页
嵌入式驱动开发实验指导书.doc_第4页
嵌入式驱动开发实验指导书.doc_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

嵌入式驱动开发实验实验一实验题目:Linux计算器应用程序及hello驱动程序实验目的:掌握Linux常用操作命令、熟悉使用vi编程、掌握gcc/makefile编译基本方法实验类型:设计实验要求:必修仪器设备:计算机实验内容、方法、步骤:一、编写一个计算器程序,实现菜单显示、加减乘除功能。要求:1)基于Linux平台开发2)使用vi编辑器编写3)使用gcc编译一.课搭建samba服务器二c编程练习(将10个数放入数组,找出最大的一个数,并输出)二、 编写hello驱动程序,编译后,进行加载、卸载驱动模块以对驱动进行测试。一hello.c驱动程序实验二实验题目:简单的字符设备驱动程序实验目的:掌握Makefile文件编写方法;熟悉字符设备驱动程序设计、开发和使用流程;实验类型:综合实验要求:必修仪器设备:计算机实验内容、方法、步骤:编写一个简单的字符设备驱动程序,完成下列功能,并写出运行程序后输出的结果。1) 编写简单的字符设备驱动程序,能够实现对虚拟设备int类型变量的读写操作;2) 编写Makefile文件,对驱动程序进行编译;3) 采用动态模块加载方式对驱动程序进行加载,并查看加载前后效果;4) 编写测试程序,对虚拟设备进行读写操作,对驱动程序功能进行验证。实验步骤:1) 使用如下命令创建驱动源程序文件进行编写。vim globalvar.c2) 编写相应的Makefile文件。vim Makefile3)对驱动程序进行编译、调试,生成globalvar.o目标文件。make(make clean)4)加载驱动程序,并查看是否加载成功。insmod globalvar.ocat /proc/devices(卸载模块命令 rmmod globalvar)(注意:无后缀名)5)编写测试文件globalvartest.c,并进行编译,生成globalvartest.o可执行文件。6)创建虚拟设备文件。mknod /dev/globalvar c 253 07)运行globalvartest.o,查看、记录并提交结果。./globalvartest.o提交代码:1) globalvar.c/globalvar.o2) Makefile3) globalvartest.c/globalvartest.o4) 测试结果(.jpg文件)一globalvar.c驱动程序测试程序makefile文件测试结果实验三实验题目:并发控制及中断程序实验目的:(1)掌握linux内核中并发控制的方法,学会运用信号量/队列/自旋锁进行内核驱动程序中的并发控制;(2)掌握中断处理机制原理,学会使用tasklet进行软中断处理。实验类型:综合实验要求:必修仪器设备:计算机实验内容、方法、步骤:以简单的字符设备驱动程序globalvar为基础,编写程序完成下列功能,并写出运行程序后输出的结果。1) 在globalvar驱动程序中,使用自旋锁功能,进行设备打开操作控制。实现已打开的设备不能再被其他用户和进程打开;并编写测试程序进行测试;2) 在globalvar驱动程序中,使用信号量和队列功能,进行设备读写操作控制。实现:a) 设备不能同时被两个及以上用户和进程打开; b) 且仅能先写入设备,才能进行读取设备操作;c) 编程测试程序进行功能测试;3) 在globalvar驱动程序中,使用tasklet功能,进行中断处理操作。实现在对设备进行写入操作后,通过中断处理方式,打印信息;并编写测试程序进行测试;实验步骤:一,基本操作1) 使用如下命令创建驱动源程序文件进行编写。vim globalvar.c2)编写相应的Makefile文件。vim Makefile3)对驱动程序进行编译、调试,生成globalvar.o目标文件。make(make clean)4)加载驱动程序,并查看是否加载成功。insmod globalvar.ocat /proc/devices(卸载模块命令 rmmod globalvar)(注意:无后缀名)5)编写测试文件globalvartest.c,并进行编译,生成globalvartest.o可执行文件。6)创建虚拟设备文件。mknod /dev/globalvar c 253 07)运行globalvartest.o,查看、记录并提交结果。./globalvartest.o二,自旋锁功能1)定义及初始化:包括头文件/asm/semaphore.hstatic 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.hstatic struct semaphore sem;static wait_queue_head_t outq;static int flag = 0;初始化:在globalvar_init(void)中if(ret).else init_MUTEX(&sem);init_waitqueue_head(&outq);2)获取信号量和并判断是否加入队列在globalvar_read()中获取if(wait_event_interruptible(outq,flag != 0)return ERESTARTSYS;if(down_interruptible(&sem)return ERESTARTSYS;flag = 0;up(&sem);3)在globalvar_write()中唤醒队列if(down_interruptible(&sem)return ERESTARTSYS; up(&sem);flag = 1; wake_up_interruptible(&outq);4)编写应用test1.c test2.c进行测试。5)提交代码和测试结果(参照实验2方式)。四,中断练习1)void tast_tasklet_action(unsigned long t) printk(tasklet is runningn);2)DECLARE_TASKLET(test_tasklet,test_tasklet_action, 0);3) tasklet_schedule(&test_tasklet);4)编写应用test1.c test2.c进行测试。5)提交代码和测试结果(参照实验2方式)。二waitqueue.c驱动程序makefile文件解释代码实验五实验题目:ADC设备驱动开发实验目的:了解s3c2410 ADC 芯片相关寄存器功能;编写驱动和应用程序对ADC进行配置及读取数据。学会交叉编译环境的搭建。实验类型:综合实验要求:必修仪器设备:计算机实验内容、方法、步骤:编写一个ADC设备驱动程序,能够对ADC设备配置及读取数据。将设备驱动程序和应用程序下载到实验箱,测试并写出运行程序后输出的结果。1) 交叉编译环境的搭建。a) 将armv4l-tools-2.95.2.tar.bz2复制到根目录cp armv4l-tools-2.95.2.tar.bz2 /b) 解压工具包tar jxvf armv4l-tools-2.95.2.tar.bz2c) 配置环境变量vim /root/.bashrc输入:export PATH = $PATH:/opt/host/armv4l/binsource /root/.bashrcd) 测试在任意终端下输入arm4v后,按tab键,如能出现arm编译命令armv4l-unknown-linux-gcc即为成功交叉编译环境搭建成功。2) 下载s3c2410实验箱内核源码从百度云盘下载,下载后搭建samba服务器,拷贝到/root目录下。则Makefile中 KERNELDIR = /root/kernel-2410s3) 编写驱动程序myadc.c编写Makefile,并对驱动程序进行测试,成功后,编写用户程序。4) 编写测试程序test.c在Makefile中增加编译语句,对test.c进行编译。5) 运行、测试将编译后的驱动程序和测试程序,拷贝到实验箱所连接的上位机。通过超级终端将程序下载到实验箱,进行测试。观察结果。6) 按照之前实验提交方式,提交源程序、目标程序及测试结果一myadc1、预分频使能位,1为使能,0为禁止启动adc控制位,1为启动,0为不启动预分频值定义通道等待队列读写中断的入口函数2、配置ADC启动指定的通道进入睡眠从ADCDATA0读数据取0-9这10位ADC转换数据4、将预分频值转换成ADCCON可接收形式5、将ADC的通道号转换成ADCCON可接收形式6、初始化等待队列计数器加17、计数器减18、在/dev中建立设备文件,指明它是字符驱动设备,可读写9、注销ADC设备释放中断实验六实验题目:Linux内核编译实验目的:了解Linux内核编译步骤;学会如何将驱动加入到内核,通过内核编译,实现驱动静态加载。实验类型:综合实验要求:必修仪器设备:计算机实验内容、方法、步骤:对编写的globalvar或chrdemo等设备驱动程序,通过内核编译,实现静态加载。内核编译后,重启机器,对驱动功能进行测试,比较静态与动态加载的不同。测试后,写出内核编译步骤及运行程序后的结果。具体步骤如下:1) 将驱动源程序加入到linux系统内核源码中a) 将驱动源程序拷贝到内核源码相应路径。cp globalvar.c /usr/src/linux/driver/charb) 修改/usr/src/linux/driver/char下配置文件Config.in,在文件最后一行endmenu前,加入一行tristate globalvar support CONFIG_GLOBALVARc) 修改/usr/src/linux/driver/char下Makefile文件,在适当位置加入一行obj-$(CONFIG_GLOBALVAR) += globalvar.o2) 内核编译(在内核编译过程中,工作路径始终为:/usr/src/linux)a) make mrproper (清除已编译文件、配置文件及备份文件等);b) make menuconfig (配置内核选项,选中globalvar项)c) make clean (再次清除不必要的文件)d) make dep (建立文件依赖关系)e) make bzImage (编译内核,编译后在/usr/src/linux/arch/i386/boot下生成新内核镜像文件bzImagef) make modules (编译模块)g) make modules_install (安装模块)h) make install (安装内核)3) reboot,测试新内核及静态加载的globalvar驱动程序。a) rebootb) cat /proc/devicesc) mknod /dev/globalvar c 253 0d) ./test.o4) 按照之前实验提交方式,提交源程序、目标程序及测试结果一Chrdemo定义设备号定义设备名指定内核内存地址从用户空间复制数据到内核空间写数据到设备从设备读数据从内核空间复制到用户空间对设备进行初始化计数器加1关闭设备计数器减一命令为1时的处理代码命令为2时的处理代码错误命令的处理代码定义与文件关联的结构体,并对功能函数初始化 是与文件关联的接口驱动注册函数的代码驱动注销函数的代码指定加载函数和卸载函数的代码打开字符设备chrdemo将buf1写到chrdemo中从chrdemo读出到buf2对chrdemo发控制码1对chrdemo发控制码4关闭字符设备chrdemo二内核编译实验七实验题目:块设备驱动程序实验实验目的:编写虚拟块设备驱动程序,了解块设备驱动程序的工作机制,及与字符设备驱动程序工作原理的不同之处;学会如何编写块设备驱动程序,熟悉块设备驱动程序的程序结构,了解块设备驱动程序中各函数模块的功能及涉及的主要内核函数的用法,并对实现的虚拟块设备驱动程序进行功能测试。实验类型:综合实验要求:必修仪器设备:计算机实验内容、方法、步骤:编写blkdemo虚拟块设备驱动程序。实现相应功能,并对驱动程序进行测试。具体步骤如下:1) 编译blkdemo.c虚拟块设备驱动程序2) 编写Makefile文件,编译驱动,生成可执行驱动程序blkdemo.o3) 测试块设备功能,方法1:a) 加载块设备insmod blkdemo.ob) 创建块设备文件mknod /dev/blkdemoa b 200 0mknod /dev/blkdemob b 200 1c) 编写测试文件test;dd if=file1 of=/dev/blkdemoa bs=512 count=2dd if=file1 of=/dev/blkdemob bs=512 count=2dd if=/dev/blkdemoa of=file2 bs=512 count=2dd if=/dev/blkdemob of=file3 bs=512 count=1d) 更改test权限chmod 777 teste) 制作file1文件cp blkdemo.c file1f) 运行test文件./testg) 观察、记录并提交实验结果4) 测试块设备功能,方法2:a) 格式化块设备文件m

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论