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

下载本文档

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

文档简介

《嵌入式系统》实验报告指导书.试验一熟识嵌入式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机操作系统RADHANDLINUX9+MIMI+RAMLINUX操作系统

5、试验步骤

(1)、在虚拟机下练习Linux常用命令。(留意以下操作只能在#,也就是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+C退出

6、试验报告要求

(1)、XP和虚拟机之间传送文件步骤;

虚拟机共享XP文件:

选择虚拟机设置,设置要共享的文件

启动Linux

进入/mnt/hgfs即可看到共享文件夹

服务器设置——samba服务器(设置需要共享的名目)

XP共享虚拟机文件:

服务器设置——samba服务器(设置需要共享的名目)

确保网络的PING通(即在同一局域网):

1.虚拟机的19

34(RH9)

2.XP的为25

3.在XP下点击开头-》运行(\\34)

4.用户名bc密码123456

以上实现了Linux虚拟机(RH9)和XP的文件的共享

(2)、开发板与虚拟机之间建立共享名目以及文件挂载步骤;

1.服务器设置——nfs服务器(设置需要共享的名目)

2.设置开发板的ip地址:ifconfigeth0

3.在试验箱终端里输入mount-tnfs-onolock192.168.1.

234:/up-techpxa270/exp/mnt/nfs

4./mnt/nfs即为共享名目

(3)、请画出虚拟机、PC机和ARM试验箱之间的硬件连接图;

(4)、在Linux中怎样配置网络;

系统设置->网络,在新的选项卡中

(5)、试验中遇到的问题与解决过程。

第一个试验相对简洁些就是熟识试验环境,然后练习了文件挂载,学会了开发板和虚拟机之间传送文件的方法。挂载时我觉得难点是简单忽视IP的配置,若两者IP不在同一局域网,则挂载不胜利。最终是练习VI编辑器的使用,VI编辑器在上学期学过,这次只是重新熟识下。

试验二嵌入式LINUX系统的编程

1、试验目的

熟识UP-TECHPXA270-S下Linux的开发环境,了解GNU/make工具的工作原理。学会使用makefile管理项目,学会编写一个Makefile文件。熟识arm-linux-gcc交叉编译的使用,了解嵌入式开发的基本过程。

2、试验内容

新建一个名目,编写几个源文件,使用makefile管理项目。学习在linux下的编程和编译过程,以及UP-TECHPXA270-S开发板开发环境的设置。下载已经编译好的文件到UP-TECHPXA270-S开发板中运行。

3、预备学问

C语言的基础学问、程序调试的基础学问和方法,LINUX的基本操作。

4、试验设备及工具(包括软件调试工具)

硬件:UP-TECHPXA270-S嵌入式开发板、PC机Pentumn500以上,硬盘10G以上。

软件:PC机操作系统REDHATLINUX9.0+MINI+ARM-LINUX开发环境

5、试验步骤

(1)、建立工作名目

(2)、编写程序源代码

(3)、编写makefile文件

(4)、编译应用程序

(5)、下载调试

(6)、写一个简洁的工程,并输出自己的姓名和学号,利用Makefile管理工程,并写出Makefile文件,进行调试。

6、试验报告要求

(1)、写清每步试验步骤的详细操作内容。

1.建立工作名目:

先挂载:服务器设置——nfs服务器(设置需要共享的名目)

设置开发板的ip地址:ifconfigeth0

在试验箱终端里输入

mount-tnfs-onolock192.168.1.234:/up-techpxa270/exp/mnt/nfs/mnt/nfs即为共享名目

在/mnt/nfs下建立自己的名目:mkdircz

2.编写程序源代码

使用VI编辑器在工作名目写入源代码

3.编写makefile文件

使用vimakefile命令来编写makefile文件

4.编译应用程序

使用编译命令:make–fmakefile来编译程序

5.下载调试

在宿主PC上启动NFS服务并设置共享名目。就可进行两者通信了。

6.写一个简洁的工程,并输出自己的姓名和学号,利用Makefile管理工程,并写出Makefile文件,进行调试。

(2)、简述Makefile文件的规章。

Makefile文件Makefile一个工程中的源文件不计数,其按类型、功能、模块分别放在若干个名目中,makefile定义了一系列的规章来指定,哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更简单的功能操作,由于makefile就像一个Shell脚本一样,其中也可以执行操作系统的命令。

makefile是一个make的规章描述脚本文件,包括四种类型行:目标行、命令行、宏定义行和make伪指令行(如“include”)。makefile文件中解释以“#”开头。当一行写不下时,可以用续行符“\”转入下一行。

(3)、简述调试状况。

先是*.h和*.c文件的编写,最终是makefile文件编写。写好makefile文件amake后,用命令:make–famake进行编译,但是始终提示一个错误,说是amake文件第6行出错,然后使用viamake命令进行amake文件修改,但还是出错,花了半个多小时都没胜利,后来重新编写amake文件才得以编译胜利。我猜想是第一次写amake文件时,加入了不能识别的字符。

试验三串行端口程序设计

1、试验目的

了解在Linux环境下串行程序设计的基本方法;

把握终端的主要属性及设置方法;熟识终端IO函数的使用;完成串口的收发处理。

2、试验内容

读懂程序源代码,学习终端IO函数tcgetattr(),tcsetattr(),tcflush()的使用方法,学习将多线程编程应用到串口的接收和发送程序设计中。

3、预备学问

有C语言基础;把握Makefile的编写和使用;把握Linux下的程序编译与交叉编译过程

4、试验设备及工具

硬件:UP-TECHPXA270-S嵌入式开发板、PC机Pentumn500以上,硬盘10G以上。软件:PC机操作系统REDHATLINUX9.0+MINI+ARM-LINUX开发环境

5、试验步骤

(1)、将E盘下的03_tty复制到D:\PXA270\Share下;将虚拟机的共享打开;

(2)、主机A的虚拟机添加串口,主机A的1与试验箱ttyS1相连,试验箱ttyS0与另一台PC机B相连;

(3)、将每台虚拟机linux的/up-techpxa270/exp/basic/03_tty删除,将两台主机的D:\PXA270\Share\03_tty复制到虚拟机linux下的/up-techpxa270/exp/basic下;

(4)、进入/up-techpxa270/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_tty复制到D:\PXA270\Share下;将虚拟机的共享打开:打开虚拟机,选择redhat的设置,在“选项”的选项卡下打开虚拟机共享

2.主机A的虚拟机添加串口,主机A的1与试验箱ttyS1相连,试验箱ttyS0与另一台PC机B相连;

3.将每台虚拟机linux的/up-techpxa270/exp/basic/03_tty删除,分

别将两台主机的D:\PXA270\Share\03_tty复制到虚拟机linux下的/up-techpxa270/exp/basic下;

4.进入/up-techpxa270/exp/basic/03_tty名目,使用vi编辑器或其他编辑器阅读理解serial_rcv和serial_send的源代码。

5.分别编译serial_rcv和serial_send下的源文件生成可执行文件。使用make命令在linux平台编译

6.自主选择作为发送端或接收端,并修改相应的代码。

7.挂载PC机B的/up-techpxa270/exp到开发板的/mnt/nfs。

服务器设置——nfs服务器(设置需要共享的名目),设置开发板的ip地址:ifconfigeth0,在试验箱终端里输入mount-tnfs-onolock192.168.1.234:/up-techpxa270/exp/mnt/nfs,/mnt/nfs即为共享名目

8.在开发板和PC机Alinux下运行可执行程序,一个发送数据,一个接收数据。

运行程序:./serial

9.修改程序,使发送端发送一个特定字符给接收端,且发送端回显一个字符或一句话。

while(1)

{

*serial_buf=getchar();

if(getchar()==’a’){

printf(“helloworld!\n”);}

write(serial_fd,serial_buf,1);

}

(2)、232串行通讯的数据格式是什么?

(3)、串行通讯最少需要几根线,分别如何连接?

最少需要3根线,分别是RXD(接收数据)、TXD(发送数据)、GND(信号地)。AB的地线相连,A的RXD接B的TXD,B的RXD接A的TXD。

(4)、分析Makefile文件。

CROSS=arm-linux-//交叉编译

CC=$(CROSS)gcc//GCC交叉编译器

CPP=$(CROSS)g++//G++交叉编译

INSTALL=install

BIN=/usr/local/bin

WARNINGS=-Os-Wall-Wstrict-prototypes-Wmissing-prototypes-Wshadow

-Wpointer-arith-Wcast-qual-Winline-I.

CFLAGS=-O2$(WARNINGS)

MATH_LIB=-lm

LIBS=$(MATH_LIB)–lpthread//引用库文件

OBJ=serial.omain.o

TARGET=serial//目标文件

all:$(TARGET)$(OBJ)

//下面一层层开头编译

#Applications:

serial:$(OBJ)

$(CC)$(CFLAGS)-o$(TARGET)$(OBJ)$(LIBS)

main.o:main.c

$(CC)$(CFLAGS)-c-o$@$pthread.txt,然后再用catpthread.txt查看文件内容,结合程序分析结果;

(5)加入一个新的线程用于处理键盘输入,并在按特定字符时终止全部线程。

6、试验报告要求

(1)写清每步试验步骤及详细操作内容;

1.进入exp/basic/02_pthread名目,使用VI命令即可打开源代码进行阅读

2.运行make产生pthread可执行文件

3.挂载:服务器设置——nfs服务器(设置需要共享的名目),设置开发板的ip地址:ifconfigeth0,在试验箱终端里输入mount-tnfs-onolock192.168.1.234:/up-techpxa270/exp/mnt/nfs,/mnt/nfs即为共享名目

4.进入/mnt/exp/basic/02_pthread名目,运行./pthread,观看运行结果的正确性,若显示结果太快,可以用以下命令输出显示结果到pthread.txt文件./pthread>pthread.txt,然后再用catpthread.txt查看文件内容,结合程序分析结果;

最终的结果:

put-->998

put-->999

producerstopped!

993-->get

994-->get

995-->get

996-->get

997-->get

998-->get

999-->get

consumerstopped!

5.加入一个新的线程用于处理键盘输入,并在按特定字符时终止全部线程。voidlistener(void*data)

{

if(getch()=’q’){

pthread_cancel(id1);

pthread_cancel(id2);}

pthread_exit(0);

}

(2)写出程序pthread.c的分析;

#include

#include

#include

#include"pthread.h"

#defineBUFFER_SIZE16

/*设置一个整数的圆形缓冲区*/

structprodcons{

intbuffer;/*缓冲区数组*/

pthread_mutex_tlock;/*互斥锁*/

intreadpos,writepos;/*读写的位置*/

pthread_cond_tnotempty;/*缓冲区非空信号pthread_cond_tnotfull;/*缓冲区非满信号*/

};

/*--------------------------------------------------------*/

/*初始化缓冲区*/

voidinit(structprodcons*b)

{

pthread_mutex_init(/*初始化后处于解锁状态*/

pthread_cond_init(/*指针为空时默认状态*/pthread_cond_init(

b->readpos=0;

b->writepos=0;

}

/*--------------------------------------------------------*/

/*向缓冲区中写入一个整数*/

voidput(structprodcons*b,intdata)

{

pthread_mutex_lock(

/*等待缓冲区非满*/

while((b->writepos+1)%BUFFER_SIZE==b->printf("waitfornotfull\n");

pthread_cond_wait(

}

/*写数据并且指针前移*/

b->buffer=data;

b->writepos++;

if(b->writepos>=BUFFER_SIZE)b->writepos=/*设置缓冲区非空信号*/pthread_cond_signal(

pthread_mutex_unlock(

}

/*--------------------------------------------------------*/

/*从缓冲区中读出一个整数*/

intget(structprodcons*b)

{

intdata;

pthread_mutex_lock(

/*等待缓冲区非空*/

while(b->writepos==b->readpos){

printf("waitfornotempty\n");

pthread_cond_wait(

}

/*读数据并且指针前移*/

data=b->buffer;

b->readpos++;

if(b->readpos>=BUFFER_SIZE)b->readpos=0;

/*设置缓冲区非满信号*/

pthread_cond_signal(

pthread_mutex_unlock(

returndata;

}

/*--------------------------------------------------------*/

#defineOVER(-1)

structprodconsbuffer;

/*--------------------------------------------------------*/

void*producer(void*data)/*生产者进程函数*/

{

intn;

for(n=0;n%d\n",n);

put(

}

put(

printf("producerstopped!\n");

returnNULL;

}

/*--------------------------------------------------------*/void*consumer(void*data)/*消费者进程函数*/

{

intd;

while(1){

d=get(

if(d==OVER)break;

printf("%d-->get\n",d);

}

printf("consumerstopped!\n");

returnNULL;

}

/*--------------------------------------------------------*/intmain(void)

{

pthread_tth_a,th_b;

void*retval;/*存储被等待线程的返回值*/

init(

pthread_create(

pthread_create(

/*等待生产者和消费者结束*/

pthread_join(th_a,

pthread_join(th_b,

return0;

}

(3)写出修改后的代码并加以说明;

voidlistener(void*data)

{

if(getch()=’q’){

pthread_cancel(id1);

pthread_cancel(id2);}

pthread_exit(0);

}

在main函数中:

intmain(void)

{

pthread_tth_a,th_b,th_a;

void*retval;

init(

pthread_create(

pthread_create(

pthread_create(

/*等待生产者和消费者结束*/

pthread_join(th_a,

pthread_join(th_b,

pthread_join(th_c,

return0;

}

(4)试验中遇到的问题与解决过程?

试验时先是看懂代码,其中有许多函数都没见过,更没用过,先是网上查资料,看API文档,逐一的看懂函数。然后是整体思路的理解,消费者怎么工作,生产者怎么工作,他们是怎么互斥的。然后是改正代码实现:加入一个新的线程用于处理键盘输入,并在按“q“时终止全部线程。开头为了接收按键用了但是linux下没有这个库函数,问了其他同学,才发觉自己将问题想简单了,直接用getch()即可,然后经过调试就完成了试验任务。

试验五内核驱动设计入门-模块方式驱动试验

1、试验目的

学习在LINUX下进行驱动设计的原理;把握使用模块方式进行驱动开发调试的过程。

2、试验内容

在PC机上编写简洁的虚拟硬件驱动程序并进行调试,试验驱动的各个接口函数的实现,分析并理解驱动与应用程序的交互过程。

3、预备学问

有C语言基础;

把握Makefile的编写和使用;

把握Linux下的程序编译与交叉编译过程。

有驱动开发的基本学问。

4、试验设备及工具

硬件:PC机pentumn500以上,硬盘40G以上,内存大于128M。

软件:PC机操作系统REDHATLINUX9.0+MINI+AMRLINUX开发环境

5、试验步骤

(1)仔细阅读试验原理,理解驱动的体系结构

(2)熟识程序源代码及Makefile

(/up-techpxa270/exp/drivers/01_moddriver)

(3)编译程序

(4)程序挂载

(5)驱动调试插入模块insmodhello.ko

(6)删除模块rmmodhello.ko

(7)分析demo.c

我们可以直接使用cat/dev/demo调用驱动的read函数,测试读过程。

6、试验报告要求

(1)、写清每步试验步骤的详细操作内容。

1.仔细阅读试验原理,理解驱动的体系结构

2.进入/up-techpxa270/exp/drivers/01_moddriver名目,使用vi命令打开源代码和Makefile

3.使用make命令编译程序

4.程序挂载:

服务器设置——nfs服务器(设置需要共享的名目),设置开发板的ip地址:ifconfigeth0,在试验箱终端里输入mount-tnfs-onolock192.168.1.234:/up-techpxa270/exp/mnt/nfs,/mnt/nfs即为共享名目

5.插入模块:命令insmodhello.ko

6.删除模块:命令rmmodhello.ko

7.分析demo.c:使用vi打开demo.c文件,并对比试验指导书分析各个函数的功能。

(2)、模块与应用程序的区分?

1.应用程序是从头到尾执行单个任务;模块却只是预先注册自己以便服务于将来的某个恳求,其中,函数init_module(模块的入口)的任务是为以后调用模块函数预先做预备,函数cleanup_module(模块的其次入口)是在模块卸载时调用。

2.应用程序可以调用它未定义的函数,由于在连接过程能够解析外部引用从而使用适当的函数库;模块仅仅被连接到内核,因此它仅能调用有内核导出的函数(如printk),而没有任何可连接的库。

3.应用程序开发过程中的段错误是无害的,并且总是可以使用调试器跟踪到源代码中的问题所在;内核模块的一个错误即使不对整个系统是致命的,也至少会对当前进程造成致命错误。

4.应用程序运行于用户空间,处理器禁止其对硬件的直接访问以及对内存的未授权访问;内核模块运行于内核空间,可以进行全部操作。

5.应用程序一般不必担忧发生其他状况而转变它的运行环境;内核模块编程则必需考虑并发问题的处理。

(3)、编译、调试状况。

编译后,插入模块:insmodhello.ko,可在开发板上显示helloworld!

删除模块:rmmodhello.ko,删除模版时也会显示一句话。

试验六Qt/E应用程序设计

1、试验目的

1.了解在Linux下安装Qt以及Qt/Embedded的基本步骤;

2.学会在嵌入式设备上Qt/E平台下使用Virtualframebuffer显示程序结果;

2、试验内容

1.在Linux下编译和使用Qt/E平台;

2.在Qt/E平台下编译和运行一个程序使用Virtualframebuffer显示运行结果;并且运行结果可以在试验箱上显示。

3、预备学问

1.熟识使用C++语言程序设计;

2.把握Linux下常用编辑器的使用;

3.把握Linux下程序编译;

4.熟识Qt程序设计;

4、试验室设备和工具

硬件:PC机Pentumn500以上,硬盘10G以上。

软件:PC机操作系统REDHATLINUX9.0+MINI+ARM-LINUX开发环境

5、试验步骤

(1)解压安装包并设置环境变量

(2)编译Qt/Embedded

(3)查看运行结果

(4)在开发板上看运行结果

6、试验报告要求

(1)、写出详细试验流程及操作内容

1.解压安装包并设置环境变量

安装Tmake

cd~/pxa270Qt

tar–xzftmake-1.13.tar.gz

exportTMAKEDIR=$PWD/tmake-1.13

安装Qt2.3.2

cd~/pxa270Qt

tar–xzfqt-x11-2.3.2.tar.gz

exportQT2DIR=$PWD/qt-2.3.2

安装Qt/Embedded

cd~/pxa270Qt

tar–xzfqt-embedded-2.3.10-free.tar.exportQTEDIR=$PWD/qt-2.3.10

2.编译Qt/Embedded

BuildQt2.3.2

cd$QT2DIR

exportTMAKEPATH=$TMAKEDIR/lib/linux-g++

exportQTDIR=$QT2DIR

温馨提示

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

评论

0/150

提交评论