嵌入式实验报告2011

上传人:20****03 文档编号:172601934 上传时间:2021-03-09 格式:DOC 页数:20 大小:878.50KB
返回 下载 相关 举报
嵌入式实验报告2011_第1页
第1页 / 共20页
嵌入式实验报告2011_第2页
第2页 / 共20页
嵌入式实验报告2011_第3页
第3页 / 共20页
嵌入式实验报告2011_第4页
第4页 / 共20页
嵌入式实验报告2011_第5页
第5页 / 共20页
点击查看更多>>
资源描述

《嵌入式实验报告2011》由会员分享,可在线阅读,更多相关《嵌入式实验报告2011(20页珍藏版)》请在金锄头文库上搜索。

1、嵌入式操作系统期末实验考试OK6410环境下的设备驱动及进程间通信综合实验专 业 通信工程(物联网) 班 级 1104 学 号 08 指导教师 熊旭辉 起止时间 2012.12.24至2013.01.06湖北师范学院 2012 年 03 学期目录一、考试内容简介3二、准备硬件环境3三、准备软件环境3四、实验原理3五、把登录系统后的终端的默认用户改为root。4五、按照飞凌新版光盘A的用户手册6-5安装交叉编译工具链5六、编译内核7七、NFS挂载网络文件系统7八、执行led驱动程序12九、编写生产者与消费者代码14十、三个问题20一、考试内容简介1、采用生产者-消费者模型,控制OK6410的le

2、d灯的显示。生产者每秒产生一个015数字,放入共享缓冲区;消费者每秒从共享缓冲区取出一个数字,并用该数字设置OK6410的led灯的显示。2、考试目的3、掌握进程同步原理及Linux同步机制的编程4、掌握进程间通信原理及Linux进程间通信的编程5、掌握设备驱动原理及Linux设备驱动机制的编程6、掌握操作系统调用原理及Linux系统调用的编程7、掌握嵌入式开发环境的搭建8、配置交叉编译工具链9、配置nfs服务器和共享文件夹10、配置OK6410开发板的IP网络地址11、OK6410开发板的arm Linux 3.0.1内核的编译12、配置minicom终端及串口通信13、设备驱动模块的加载及

3、编程接口14、Linux命令的使用和程序的运行(包含后台运行)二、准备硬件环境高性能PC一台开发板一块计算机网络USB转串口网线三、准备软件环境Linux操作系统四、实验原理进程通信原理 OS提供了沟通的媒介供进程之间“对话”用。既然要沟通,如同人类社会的沟通一样,沟通要付出时间和金钱,计算机中也一样,必然有沟通需要付出的成 本。出于所解决问题的特性,OS提供了多种沟通的方式,每种方式的沟通成本也不尽相同,使用成本和沟通效率也有所不同。我们经常听到的 管道、消息队列、共享内存都是OS提供的供进程之间对话的方式。 既然是沟通,必然是沟通双方有秩序的说话,否则就成吵架了,谁也听不到对方说什么。如同

4、法庭中法官控制控辩双方的发言时机和发言时间一样,OS也必须提供 此类的管制方式使得进程的沟通显的有序和谐。我们经常听到的 互斥锁、条件变量、记录锁、文件锁、信号灯均属此列。生产者和消费者问题原理生产者-消费者问题是一个经典的进程同步问题,该问题最早由Dijkstra提出,用以演示他提出的信号量机制。在同一个进程地址空间内执行的两个线程生产者线程生产物品,然后将物品放置在一个空缓冲区中供消费者线程消费。消费者线程从缓冲区中获得物品,然后释放缓冲区。当生产者线程生产物品时,如果没有空缓冲区可用,那么生产者线程必须等待消费者线程释放出一个空缓冲区。当消费者线程消费物品时,如果没有满的缓冲区,那么消费

5、者线程将被阻塞,直到新的物品被生产出来。如果将两个wait操作即wait(full)和wait(mutex)互换位置,或者将release(mutex)与release(full)互换 位置,当缓冲区存满产品时,生产者又生产了一件产品,它欲向缓冲区存放时将在empty上等待,但它已经占有了使用缓冲区的权利。这时消费者要取产品时将 停留在mutex上得不到使用缓冲区的权利,导致生产者等待消费者取走产品,而消费者却在等待生产者释放使用缓冲区的权利,这种相互等待永远结束不了。因此进程将会发生死锁。五、把登录系统后的终端的默认用户改为root。1、在终端中输入:sudo gedit /etc/gdm/

6、custom.conf2、这时会弹出文本编辑器,将custom.conf内容修改成下面所示内容(若原来文件为空的话就输入这些内容),保存关闭,重新启动Ubuntu 就会发现已经自动用root 用户登录了。daemonTimedLoginEnable=trueAutomaticLoginEnable=trueTimedLogin=rootAutomaticLogin=rootTimedLoginDelay=30五、按照飞凌新版光盘A的用户手册6-5安装交叉编译工具链将arm-linux-gcc-4.3.2.tgz 文件拷贝到Ubuntu 的/forlinx 目录下,该文件位于用户基础资料光盘的“

7、实用工具”文件夹中。在Ubuntu 中新建一个终端,输入下面的命令安装交叉编译器:cd /forlinx (进入/forlinx 目录)mkdir /usr/local/arm (创建目录,若目录已存在会提示错误,跳过即可)tar zxvf arm-linux-gcc-4.3.2.tgz -C /编译器解压到/usr/local/arm把交叉编译器路径添加到系统环境变量中,以后可以直接在终端窗口中输入arm-linx-gcc 命令来编译程序。在终端中执行:gedit /etc/profile添加以下四行到该文件中:export PATH=/usr/local/arm/4.3.2/bin:$PA

8、THexport TOOLCHAIN=/usr/local/arm/4.3.2export TB_CC_PREFIX=arm-linuxexportPKG_CONFIG_PREFIX=$TOOLCHAIN/arm-none-linux-gnueabi保存,退出。重新启动系统,在终端里面执arm-linux-gcc v六、编译内核编译 Linux-3.0.1将压缩包FORLINX_linux-3.0.1.tar.gz 拷贝到你的工作目录下,解压缩:tar zxf FORLINX_linux-3.0.1.tar.gz在终端执行:make 编译结束后将在内核源码目录的arch/arm/boot 中得

9、到Linux 内核映像文件:zImage七、NFS挂载网络文件系统1、准备NFS文件系统目录启动nfs 服务之前,必须在Ubuntu 上准备好NFS 共享目录。例如,我们采用Ubuntu 的“/forlinx/root”作为NFS 共享目录,就需要将用户基础资料光盘中的FileSystem-Yaffs2.tar.gz 压缩文件拷贝到这个目录下,然后解压缩,得到根文件系统所需要的目录。在Ubuntu 上打开一个终端,输入以下命令:mkdir /forlinx/root将FileSystem-Yaffs2.tar.gz 文件拷贝到该目录下,解压:tar zxf FileSystem-Yaffs2.

10、tar.gz解压完成后如图所示:2. 配置NFS服务在Ubuntu 上新建一个终端,依次输入以下命令:sudo yum install portmapsudo yum install nfs-utilssudo gedit /etc/exports在弹出的文本编辑器中编辑exports 文件,在最后一行添加:/forlinx *(rw,sync,no_root_squash)3. 启动NFS服务Service portmap startService nfs start4 检查服务是否已经运行service rpcbind statusservice nfs status在终端里面执行ifco

11、nfig命令,查看fedaro的IP地址。开发板的IP地址,要修改与PC的IP地址在一个局域网里。5、连接到开发板由于我用的是Fedaro,而不是Ubuntu,所以我在linux系统下安装了minicom,相当于windows下的secureCRT. 其操作过程如下:安装安装好之后,执行下面的命令设置选项选择Serial port setup,将A改为/dev/ttyUSB0,其他不变修改后,保存返回。再进入Modem and dialing,删除A、B、K的参数。、若/dev目录下有ttyUSB0,则安装成功。如何实现minicom与secureCRT相同的功能?在终端输入:minicom+

12、回车,立即打开开发板,即可实现。注意:minicom命令必须在root权限下才能执行。6、Ping网观查看是否有连接在开发板上执行下面一条命令:mkdir tempmount -t nfs -o nolock 192.168.100.197:/forlinx /temp查看终端中的forlinx中的文件:八、执行led驱动程序1、修改Makefile文件在终端中执行:cd /forlinx/led执行:gedit Makefile修改代码,使KDIR :=/forlinx/linux-3.0.1保存,关闭。2、执行:make,产生led.ko 文件3、进行模块加载:insmod *.koarm

13、-linux-gcc o app-led app-led.c4、执行LED驱动程序在终端执行minicom,并重新打开开发板:cd test再执行:cd /led执行:./app-led 1010执行:./app-led 1110九、编写生产者与消费者代码#include #include #include #include #include #include #include #include #include #include #include led.h#define DEV_NAME /dev/ DEVICE_NAME#define SIZE 16 /定义缓冲大小为16个字符 int

14、creat_sem(key_t key,int value); /声明创建信号量初值为value的函数int sem_p(int sem_id); /声明P操作函数int sem_v(int sem_id); /声明V操作函数 union semun /自定义信号量操作所需要的联合体 int val; struct semid_ds *buf; unsigned short *array;void main() char *shm_addr=NULL; struct shmid_ds shm_buf; pid_t pid; int key,key1,key2; int shm_id,full,empty; static int head=0;

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

最新文档


当前位置:首页 > 办公文档 > 事务文书

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