《嵌入式系统》实验报告指导书(含答案)_第1页
《嵌入式系统》实验报告指导书(含答案)_第2页
《嵌入式系统》实验报告指导书(含答案)_第3页
《嵌入式系统》实验报告指导书(含答案)_第4页
《嵌入式系统》实验报告指导书(含答案)_第5页
已阅读5页,还剩14页未读 继续免费阅读

下载本文档

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

文档简介

1、实验一 熟悉嵌入式LINUX开发环境1、实验目的熟悉UP-TECHPXA270-S的开发环境。学会WINDOWS环境与嵌入式Linu环境共享资源的基本方法。2、实验内容学习UP-TECHPXA270-S系统的使用、XP和虚拟机之间传送文件方法以及UP-TECHPXA270-S和虚拟机之间共享目录的建立方法。3、预备知识了解UP-TECHPXA270-S的基本结构和配置,Linux基本知识。4、实验设备硬件:UP-TECHPXA270-S开发板、PC机(内存500M以上)。软件:PC机操作系统RADHAND LINUX 9+MIMICOM+RAM LINUX操作系统5、实验步骤(1)、在虚拟机下

2、练习Linux常用命令。(注意以下操作只能在rootBC root#,也就是root文件夹下运行,不然会导致系统不能启动) a. 学习命令通过“man *”和“* -help”得到的命令使用方法。 b学习并掌握如下命令: ls,cd ,pwd,cat,more,less,mkdir, rmdir ,rm,mv,cp,tar,ifconfig(2)、XP与虚拟机之间传送文件(Samba服务器建立、网络设置、文件传送);(3)、了解系统资源和连线;(4)、开发板与虚拟机之间共享目录建立(设置NFS、开发板IP设置、目录挂载),挂载文件;(5)vi(vim)的使用(6)输入qt,启动桌面,按CTRL

3、+C退出 6、实验报告要求(1)、XP和虚拟机之间传送文件步骤; 虚拟机共享XP文件:选择虚拟机设置,设置要共享的文件启动Linux进入/mnt/hgfs即可看到共享文件夹服务器设置samba服务器(设置需要共享的目录)XP共享虚拟机文件:服务器设置samba服务器(设置需要共享的目录)确保网络的PING通(即在同一局域网):1.虚拟机的192.168.1.234(RH9)2.XP的为192.168.1.1253.在XP 下点击开始-运行(192.168.1.234)4.用户名bc密码123456以上实现了Linux虚拟机(RH9)和XP的文件的共享(2)、开发板与虚拟机之间建立共享目录以及文

4、件挂载步骤;1. 服务器设置nfs服务器(设置需要共享的目录)2. 设置开发板的ip地址:ifconfig eth0 192.168.1.53. 在实验箱终端里输入mount -t nfs -o nolock 192.168.1. 234:/up-techpxa270/exp /mnt/nfs 4. /mnt/nfs即为共享目录(3)、请画出虚拟机、PC机和ARM实验箱之间的硬件连接图;(4)、在Linux中怎样配置网络;系统设置->网络,在新的选项卡中(5)、实验中遇到的问题与解决过程。第一个实验相对简单些就是熟悉实验环境,然后练习了文件挂载, 学会了开发板和虚拟机之间传送文件的方法。

5、挂载时我觉得难点是容易忽略IP的配置,若两者IP不在同一局域网,则挂载不成功。最后是练习VI编辑器的使用,VI编辑器在上学期学过,这次只是重新熟悉下。实验二 嵌入式LINUX系统的编程1、实验目的熟悉UP-TECHPXA270-S下Linux的开发环境,了解GNU/make工具的工作原理。学会使用makefile管理项目,学会编写一个Makefile文件。熟悉arm-linux-gcc交叉编译的使用,了解嵌入式开发的基本过程。2、实验内容新建一个目录,编写几个源文件,使用makefile 管理项目。学习在linux 下的编程和编译过程,以及UP-TECHPXA270-S 开发板开发环境的设置。

6、下载已经编译好的文件到UP-TECHPXA270-S 开发板中运行。3、预备知识C 语言的基础知识、程序调试的基础知识和方法,LINUX 的基本操作。4、实验设备及工具(包括软件调试工具)硬件:UP-TECHPXA270-S 嵌入式开发板、PC 机Pentumn500 以上, 硬盘10G 以上。软件:PC 机操作系统REDHAT LINUX 9.0 MINICOM ARM-LINUX 开发环境5、实验步骤(1)、建立工作目录(2)、编写程序源代码(3)、编写makefile 文件(4)、编译应用程序(5)、下载调试(6)、 写一个简单的工程,并输出自己的姓名和学号,利用Makefile管理工程

7、,并写出Makefile文件,进行调试。6、实验报告要求(1)、写清每步实验步骤的具体操作内容。1.建立工作目录:先挂载:服务器设置nfs服务器(设置需要共享的目录)设置开发板的ip地址:ifconfig eth0 192.168.1.5在实验箱终端里输入mount -t nfs -o nolock 192.168.1. 234:/up-techpxa270/exp /mnt/nfs /mnt/nfs即为共享目录在/mnt/nfs下建立自己的目录:mkdir cz2.编写程序源代码使用VI编辑器在工作目录写入源代码3.编写makefile 文件使用 vi makefile命令 来编写makef

8、ile文件4.编译应用程序使用编译命令:make f makefile 来编译程序5.下载调试在宿主PC上启动NFS服务并设置共享目录。就可进行两者通信了。6.写一个简单的工程,并输出自己的姓名和学号,利用Makefile管理工程,并写出Makefile文件,进行调试。(2)、简述Makefile文件的规则。Makefile文件 Makefile 一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个目录中,makefile定义了一系列的规则来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作,因为 makefile就像一个Shell脚本一样,

9、其中也可以执行操作系统的命令。makefile是一个make的规则描述脚本文件,包括四种类型行:目标行、命令行、宏定义行和make伪指令行(如“include”)。makefile文件中注释以“#”开头。当一行写不下时,可以用续行符“”转入下一行。(3)、简述调试情况。先是*.h和*.c文件的编写,最后是makefile文件编写。写好makefile文件amake后,用命令:make f amake进行编译,但是一直提示一个错误,说是amake文件第6行出错,然后使用vi amake命令进行amake文件修改,但还是出错,花了半个多小时都没成功,后来重新编写amake文件才得以编译成功。我猜测

10、是第一次写amake文件时,加入了不能识别的字符。实验三 串行端口程序设计1、实验目的了解在Linux 环境下串行程序设计的基本方法; 掌握终端的主要属性及设置方法;熟悉终端IO 函数的使用;完成串口的收发处理。2、实验内容读懂程序源代码,学习终端IO 函数tcgetattr(), tcsetattr(),tcflush()的使用方法,学习将多线程编程应用到串口的接收和发送程序设计中。3、预备知识有 C 语言基础;掌握 Makefile 的编写和使用;掌握 Linux 下的程序编译与交叉编译过程4、实验设备及工具硬件:UP-TECHPXA270-S 嵌入式开发板、PC 机Pentumn500

11、以上, 硬盘10G 以上。软件:PC 机操作系统REDHAT LINUX 9.0 MINICOM ARM-LINUX 开发环境5、实验步骤(1)、将E盘下的03_tty复制到D:PXA270Share下;将虚拟机的共享打开;(2)、主机A的虚拟机添加串口,主机A的COM1与实验箱ttyS1相连,实验箱ttyS0与另一台PC机B相连;(3)、将每台虚拟机linux的/up-techpxa270/exp/basic/03_tty删除,将两台主机的D:PXA270Share03_tty复制到虚拟机linux下的/up-techpxa270/exp/basic下;(4)、进入/up-techpxa27

12、0/exp/basic/03_tty 目录,使用vi 编辑器或其他编辑器阅读理解serial_rcv和serial_send的源代码。(5)、分别编译serial_rcv和serial_send下的源文件生成可执行文件。(6)、自主选择作为发送端或接收端,并修改相应的代码。(7)、挂载PC机B的/up-techpxa270/exp到开发板的/mnt/nfs。(8)、在开发板和PC机Alinux下运行可执行程序,一个发送数据,一个接收数据。(9)、修改程序,使发送端发送一个特定字符给接收端,且发送端回显一个字符或一句话。6、实验报告要求(1)、写清每步实验步骤的具体操作内容。1.将E盘下的03_

13、tty复制到D:PXA270Share下;将虚拟机的共享打开:打开虚拟机,选择red hat 的设置,在“选项”的选项卡下打开虚拟机共享2.主机A的虚拟机添加串口,主机A的COM1与实验箱ttyS1相连,实验箱ttyS0与另一台PC机B相连;3.将每台虚拟机linux的/up-techpxa270/exp/basic/03_tty删除,分别将两台主机的D:PXA270Share03_tty复制到虚拟机linux下的/up-techpxa270/exp/basic下; 4.进入/up-techpxa270/exp/basic/03_tty 目录,使用vi 编辑器或其他编辑器阅读理解serial_

14、rcv和serial_send的源代码。5.分别编译serial_rcv和serial_send下的源文件生成可执行文件。使用make 命令在linux平台编译6.自主选择作为发送端或接收端,并修改相应的代码。7.挂载PC机B的/up-techpxa270/exp到开发板的/mnt/nfs。服务器设置nfs服务器(设置需要共享的目录),设置开发板的ip地址:ifconfig eth0 192.168.1.5,在实验箱终端里输入mount -t nfs -o nolock 192.168.1. 234:/up-techpxa270/exp /mnt/nfs ,/mnt/nfs即为共享目录8.在开

15、发板和PC机Alinux下运行可执行程序,一个发送数据,一个接收数据。运行程序:./ serial9.修改程序,使发送端发送一个特定字符给接收端,且发送端回显一个字符或一句话。while(1)*serial_buf = getchar();if(getchar()=a)printf(“hello world!n”);write(serial_fd, serial_buf, 1);(2)、232串行通讯的数据格式是什么?(3)、串行通讯最少需要几根线,分别如何连接?最少需要3根线,分别是RXD(接收数据)、TXD(发送数据)、GND(信号地)。AB的地线相连,A的RXD接B的TXD,B的RXD接

16、A的TXD。(4)、分析Makefile文件。CROSS=arm-linux- /交叉编译CC=$(CROSS)gcc/GCC交叉编译器CPP=$(CROSS)g+/G+交叉编译INSTALL=installBIN=/usr/local/binWARNINGS = -Os -Wall -Wstrict-prototypes -Wmissing-prototypes -Wshadow -Wpointer-arith -Wcast-qual -Winline -I.CFLAGS= -O2 $(WARNINGS)MATH_LIB=-lmLIBS= $(MATH_LIB) lpthread /引用库文

17、件OBJ= serial.o main.o TARGET=serial/目标文件all: $(TARGET) $(OBJ)/下面一层层开始编译# Applications:serial: $(OBJ)$(CC) $(CFLAGS) -o $(TARGET) $(OBJ) $(LIBS)main.o: main.c$(CC) $(CFLAGS) -c -o $ $<serial.o: serial.c serial.h$(CC) $(CFLAGS) -c -o $ $</清除中间文件clean:echo "Cleaning up directory."rm -f

18、*.a *.o $(TARGET) (5)、简述调试情况。接收端开始不能运行,发现是Makefile错误。去掉#CROSS=arm-linux-之前的#即可编译。运行时,发送端输入一个字符并按下回车键,接收端可以显示出这个字符。然后是修改程序,使发送端发送一个特定字符给接收端,且发送端回显一个字符或一句话。发送端可以回显,但是接收端会多出一个字符,我猜测是由于缓冲区没有清除的原因。实验四 多线程应用程序设计1、实验目的了解多线程程序设计的基本原理,学习pthread库函数的使用。2、实验内容读懂pthread.c的源代码,熟悉几个重要的PTHREAD库函数的使用。掌握共享锁和信号量的使用方法。

19、3、预备知识熟练使用C语言,掌握在Linux下常用编辑器的使用,掌握Makefile的编写和使用,掌握Linux下的程序编译与交叉编译过程。4、实验设备及工具硬件:UP-TECHPXA270-S 嵌入式实验仪,PC 机pentumn500 以上, 硬盘10G 以上软件:PC 机操作系统REDHAT LINUX 9.0 MINICOM AMRLINUX 开发环境5、实验步骤(1)进入exp/basic/02_pthread目录,使用vi编辑器或其他编辑器阅读理解源代码;(2)运行make产生pthread可执行文件;(3)切换到minicom终端窗口,使用NFS mount开发主机的/up-te

20、chpxa270到/mnt目录;(4)进入/mnt/exp/basic/02_pthread目录,运行./pthread,观察运行结果的正确性,若显示结果太快,可以用以下命令输出显示结果到pthread.txt文件./pthread >pthread.txt,然后再用cat pthread.txt查看文件内容,结合程序分析结果;(5)加入一个新的线程用于处理键盘输入,并在按特定字符时终止所有线程。6、实验报告要求(1)写清每步实验步骤及具体操作内容;1.进入exp/basic/02_pthread目录,使用VI命令即可打开源代码进行阅读2.运行make产生pthread可执行文件3.挂载

21、:服务器设置nfs服务器(设置需要共享的目录),设置开发板的ip地址:ifconfig eth0 192.168.1.5,在实验箱终端里输入mount -t nfs -o nolock 192.168.1. 234:/up-techpxa270/exp /mnt/nfs ,/mnt/nfs即为共享目录4. 进入/mnt/exp/basic/02_pthread目录,运行./pthread,观察运行结果的正确性,若显示结果太快,可以用以下命令输出显示结果到pthread.txt文件./pthread >pthread.txt,然后再用cat pthread.txt查看文件内容,结合程序分析

22、结果;最后的结果:put->998put->999producer stopped!993->get994->get995->get996->get997->get998->get999->getconsumer stopped!5.加入一个新的线程用于处理键盘输入,并在按特定字符时终止所有线程。void listener(void *data)if(getch()=q)pthread_cancel(id1); pthread_cancel(id2); pthread_exit(0);(2)写出程序pthread.c的分析;#include

23、 <stdio.h>#include <stdlib.h>#include <time.h>#include "pthread.h"#define BUFFER_SIZE 16/* 设置一个整数的圆形缓冲区*/struct prodcons int bufferBUFFER_SIZE; /* 缓冲区数组*/pthread_mutex_t lock; /* 互斥锁*/int readpos, writepos; /* 读写的位置*/pthread_cond_t notempty; /* 缓冲区非空信号pthread_cond_t notfu

24、ll; /*缓冲区非满信号*/;/*-*/*初始化缓冲区*/void init(struct prodcons * b)pthread_mutex_init(&b->lock, NULL); /*初始化后处于解锁状态*/pthread_cond_init(&b->notempty, NULL); /*指针为空时默认状态*/pthread_cond_init(&b->notfull, NULL);b->readpos = 0;b->writepos = 0;/*-*/* 向缓冲区中写入一个整数*/void put(struct prodcon

25、s * b, int data)pthread_mutex_lock(&b->lock);/*等待缓冲区非满*/while (b->writepos + 1) % BUFFER_SIZE = b->printf("wait for not fulln");pthread_cond_wait(&b->notfull, &b->lock);/*写数据并且指针前移*/b->bufferb->writepos = data;b->writepos+;if (b->writepos >= BUFFER

26、_SIZE) b->writepos = /*设置缓冲区非空信号*/pthread_cond_signal(&b->notempty);pthread_mutex_unlock(&b->lock);/*-*/*从缓冲区中读出一个整数*/int get(struct prodcons * b)int data;pthread_mutex_lock(&b->lock);/* 等待缓冲区非空*/while (b->writepos = b->readpos) printf("wait for not emptyn");p

27、thread_cond_wait(&b->notempty, &b->lock);/* 读数据并且指针前移*/data = b->bufferb->readpos;b->readpos+;if (b->readpos >= BUFFER_SIZE) b->readpos = 0;/* 设置缓冲区非满信号*/pthread_cond_signal(&b->notfull);pthread_mutex_unlock(&b->lock);return data;/*-*/#define OVER (-1)st

28、ruct prodcons buffer;/*-*/void * producer(void * data) /*生产者进程函数*/int n;for (n = 0; n < 1000; n+) printf(" put->%dn", n);put(&buffer, n);put(&buffer, OVER);printf("producer stopped!n");return NULL;/*-*/void * consumer(void * data) /*消费者进程函数*/int d;while (1) d = get(

29、&buffer);if (d = OVER ) break;printf(" %d->getn", d);printf("consumer stopped!n");return NULL;/*-*/int main(void)pthread_t th_a, th_b;void * retval;/*存储被等待线程的返回值*/init(&buffer);pthread_create(&th_a, NULL, producer, 0);pthread_create(&th_b, NULL, consumer, 0);/*

30、 等待生产者和消费者结束*/pthread_join(th_a, &retval);pthread_join(th_b, &retval);return 0;(3) 写出修改后的代码并加以说明;void listener(void *data)if(getch()=q)pthread_cancel(id1); pthread_cancel(id2); pthread_exit(0);在main函数中:int main(void)pthread_t th_a, th_b,th_a;void * retval;init(&buffer);pthread_create(&am

31、p;th_a, NULL, producer, 0);pthread_create(&th_b, NULL, consumer, 0);pthread_create(&th_c, NULL, listener, 0);/* 等待生产者和消费者结束*/pthread_join(th_a, &retval);pthread_join(th_b, &retval);pthread_join(th_c, &retval);return 0;(4)实验中遇到的问题与解决过程?实验时先是看懂代码,其中有很多函数都没见过,更没用过,先是网上查资料,看API文档,逐一的

32、看懂函数。然后是整体思路的理解,消费者怎么工作,生产者怎么工作,他们是怎么互斥的。然后是改正代码实现:加入一个新的线程用于处理键盘输入,并在按“q“时终止所有线程。开始为了接收按键用了<conio.h>但是linux下没有这个库函数,问了其他同学,才发现自己将问题想复杂了,直接用getch()即可,然后经过调试就完成了实验任务。实验五 内核驱动设计入门-模块方式驱动实验1、实验目的学习在LINUX 下进行驱动设计的原理;掌握使用模块方式进行驱动开发调试的过程。2、实验内容在PC 机上编写简单的虚拟硬件驱动程序并进行调试,实验驱动的各个接口函数的实现,分析并理解驱动与应用程序的交互过

33、程。3、预备知识有 C 语言基础;掌握 Makefile 的编写和使用;掌握 Linux 下的程序编译与交叉编译过程。有驱动开发的基本知识。4、实验设备及工具硬件:PC 机pentumn500 以上, 硬盘40G 以上,内存大于128M。软件:PC 机操作系统REDHAT LINUX 9.0 MINICOM AMRLINUX 开发环境5、实验步骤(1) 认真阅读实验原理,理解驱动的体系结构(2) 熟悉程序源代码及Makefile (/up-techpxa270/exp/drivers/01_moddriver)(3) 编译程序(4) 程序挂载(5) 驱动调试 插入模块insmod hello.

34、ko(6) 删除模块 rmmod hello.ko(7) 分析demo.c我们可以直接使用cat /dev/demo 调用驱动的read 函数,测试读过程。6、实验报告要求(1)、写清每步实验步骤的具体操作内容。1.认真阅读实验原理,理解驱动的体系结构2.进入/up-techpxa270/exp/drivers/01_moddriver目录,使用vi命令打开源代码和Makefile3.使用make命令编译程序4. 程序挂载:服务器设置nfs服务器(设置需要共享的目录),设置开发板的ip地址:ifconfig eth0 192.168.1.5,在实验箱终端里输入mount -t nfs -o n

35、olock 192.168.1. 234:/up-techpxa270/exp /mnt/nfs ,/mnt/nfs即为共享目录5.插入模块:命令insmod hello.ko6.删除模块:命令rmmod hello.ko7.分析demo.c:使用vi打开demo.c文件,并对照实验指导书分析各个函数的功能。(2)、模块与应用程序的区别?1.应用程序是从头到尾执行单个任务;模块却只是预先注册自己以便服务于将来的某个请求,其中,函数init_module(模块的入口)的任务是为以后调用模块函数预先做准备,函数cleanup_module(模块的第二入口)是在模块卸载时调用。2.应用程序可以调用它

36、未定义的函数,因为在连接过程能够解析外部引用从而使用适当的函数库;模块仅仅被连接到内核,因此它仅能调用有内核导出的函数(如printk),而没有任何可连接的库。3.应用程序开发过程中的段错误是无害的,并且总是可以使用调试器跟踪到源代码中的问题所在;内核模块的一个错误即使不对整个系统是致命的,也至少会对当前进程造成致命错误。4.应用程序运行于用户空间,处理器禁止其对硬件的直接访问以及对内存的未授权访问;内核模块运行于内核空间,可以进行所有操作。5.应用程序一般不必担心发生其他情况而改变它的运行环境;内核模块编程则必须考虑并发问题的处理。(3)、编译、调试情况。编译后,插入模块:insmod he

37、llo.ko,可在开发板上显示 hello world!删除模块:rmmod hello.ko,删除模版时也会显示一句话。实验六 Qt/E应用程序设计1、实验目的1.了解在Linux下安装Qt以及Qt/Embedded的基本步骤;2.学会在嵌入式设备上Qt/E平台下使用Virtual framebuffer显示程序结果;2、实验内容1.在Linux下编译和使用Qt/E平台;2.在Qt/E平台下编译和运行一个程序使用Virtual framebuffer显示运行结果;并且运行结果可以在实验箱上显示。3、预备知识1.熟悉使用C+语言程序设计;2.掌握Linux下常用编辑器的使用;3.掌握Linux

38、下程序编译;4.熟悉Qt程序设计;4、实验室设备和工具硬件:PC机Pentumn500以上, 硬盘10G以上。软件:PC机操作系统REDHAT LINUX 9.0 MINICOM ARM-LINUX开发环境5、实验步骤(1)解压安装包并设置环境变量(2)编译Qt/Embedded(3)查看运行结果(4)在开发板上看运行结果6、实验报告要求(1)、写出具体实验流程及操作内容1. 解压安装包并设置环境变量安装Tmakecd /pxa270Qttar xzf tmake-1.13.tar.gzexport TMAKEDIR=$PWD/tmake-1.13安装Qt 2.3.2cd /pxa270Qttar xzf qt-x11-2.3.2.tar.gzexport QT2DIR=$PWD/qt-2.3.2安装Qt/Embeddedcd /pxa270Qttar xzf qt-embedded-2.3.10-free.tar.export

温馨提示

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

评论

0/150

提交评论