《ARM嵌入式Linux系统开发》实验指导书.docx

上传人:b****7 文档编号:9436337 上传时间:2023-02-04 格式:DOCX 页数:72 大小:1.62MB
下载 相关 举报
《ARM嵌入式Linux系统开发》实验指导书.docx_第1页
第1页 / 共72页
《ARM嵌入式Linux系统开发》实验指导书.docx_第2页
第2页 / 共72页
《ARM嵌入式Linux系统开发》实验指导书.docx_第3页
第3页 / 共72页
《ARM嵌入式Linux系统开发》实验指导书.docx_第4页
第4页 / 共72页
《ARM嵌入式Linux系统开发》实验指导书.docx_第5页
第5页 / 共72页
点击查看更多>>
下载资源
资源描述

《ARM嵌入式Linux系统开发》实验指导书.docx

《《ARM嵌入式Linux系统开发》实验指导书.docx》由会员分享,可在线阅读,更多相关《《ARM嵌入式Linux系统开发》实验指导书.docx(72页珍藏版)》请在冰豆网上搜索。

《ARM嵌入式Linux系统开发》实验指导书.docx

《ARM嵌入式Linux系统开发》实验指导书

 

《ARM嵌入式Linux系统开发》

       

实 验 指 导 书

      

 

陈靖  编写

          适用专业:

09级嵌入式专业

 

                                                

           闽江学院计算机科学系

       2010年 7月

目录

实验一Linux常用工具实验1

实验二Makefile实验10

实验三驱动程序结构实验19

实验四I/O口驱动实验24

实验五USB驱动配置实验34

实验六webserver的移植与网络通讯实验45

实验一Linux常用工具实验

实验学时:

2

实验类型:

验证

实验要求:

必修

【实验目的】

1、了解minicom配置串口通信参数的过程,掌握利用minicom进行传输文件方法

2、了解网络文件系统nfs的配置,掌握利用nfs进行文件的传输和异地运行目标板程序

3、掌握ftp的使用方法

【实验原理】

(一)、minicom的使用

1、串口通信参数的设置

首先运行minicom,由于minicom是通过串口来工作的,所以要通过minicom程序来对

串口通信参数进行设置。

启动minicom的设置窗口:

在linux的终端中输入“minicom–s”,

然后,按下回车键。

[root@localhostroot]#minicom–s

“-s”选项调出配置信息。

下面显示的就是配置的菜单。

有关串口通信选项的含义:

"Filenamesandpaths":

选择需要传输的文件和路径

"Filetransferprotocols":

选择传输文件的通信协议

"Serialportsetup":

设置串口通信参数

"Savesetupasdfl":

将设置好的各项参数保存为dfl

"Savesetupas":

将设置好的各项参数保存为自定义的文件名

"Exit":

退出返回到minicom设置好后的终端

"ExitfromMinicom":

从minicom命令中退出返回Linux终端

将光标移到"Serialportsetup",按回车键会弹出串口通信参数的配置菜单。

(1)、串口通信口的选择:

(A-SerialDevice)

接"A"键把光标移动到SerialDevice。

如果串口线连在PC机的串口1上,则把Serial

device设置为/dev/ttyS0。

如果连在串口2上,则把Serialdevice设置为/dev/ttyS1,然后按下

回车键。

(2)、串口参数的设置(E-Bps/Par/Bits)

按"E"键来设置通信波特率、数据位、奇偶校验位和停止位。

可以通过按下不同的键来

设置通信参数。

例如XSBase270平台需要把波特率设为115200,数据位设为8,奇偶校验

位设为无,停止位设为1。

可以分别通过按"I"、"V"、"L"、"W"键设置波特率、数据位、奇

偶校验位和停止位。

设置完后按"Esc"返回。

(3)、数据流的控制选择(F-HardwareFlowControl、G-SoftwareFlowControl)

按"F"键可以完成硬件流控制切换,即完成"Yes"与"No"之间的切换。

按"G"键完成软件

流控制切换,即完成"Yes"与"No"之间的切换。

下图显示的是串口配置好的后完整信息。

(4)、设置参数的保存与退出

配置完成后,按下“Esc”键,将会出现下图的配置菜单。

选择“Savesetupasdfl”按

ENTER键来保存,当配置保存后,按下“Esc”键完成设置。

当minicom窗口出现后,重起XSBase270将会看到启动信息。

如果没有出现启动信息,

请检查mincom的设置和线缆连接是否有错。

2、利用串口通信文件传输

在与目标板连接后,可以通过串口下传一些文件到目标板,具体操作步骤如下:

(1)、在与目标正确连接后,进入[root@51board~],按下CTRL+A键后,再按Z键,系统

调出minicom的命令选项菜单;

其中Sendfiles和Receivefiles两项负责文件数据的传输,所用命令使用热键进行激活。

上传文件只需按S键。

(2)、当向目标板上传文件时,按S键,系统弹出串口通信协议选项,利用方向键选中zmodem

传输协议,按回车键,进入文件选择菜单。

(3)、文件传输

文件选择菜单弹出后,利用空格键选中需要上传的文件,一次可以选择多个文件,选好

需要传输的文件后按回车键,便可以进行文件数据传输。

当数据传输完毕,系统会弹出传输

完毕提示菜单(如下图所示)。

二、网络文件系统nfs的配置

网络文件系统nfs可以将PC机上的一部分文件系统作为目标机的资源,这样可以弥补

目标机存储空间的不足。

在使用网络文件之时,应对网络文件配置进行一定的设置。

1、主机(host)的设置:

在主机/mnt目录下创建nfs目录,并利用文本编辑器编辑修改/etc/exports文件,增加如

下内容:

/mnt/nfs(rw,no_root_squash)

将主机的/mnt/nfs目录设置为能够通过网络文件系统访问可读写的目标,

2、重新启动nfs

[root@local]$/etc/rc.d/init.d/nfsstop

[root@local]$/etc/rc.d/init.d/nfsstart

3、目标机设置(假设主机的IP地址为192.168.1.12)

[root@51Board~]$portmap

[root@51Board~]$mount–tnfs192.168.1.12:

/mnt/nfs/mnt

上述设置实现将主机上的/mnt/nfs目录挂载到目标机的/mnt目录下,并作为目标机文件系统的一部分。

这时,可以将需要传输的文件或需要运行的程序保存在主机的/mnt/nfs目录下,

然后在目标机对主机/mnt/nfs上的文件进行运行或复制等相应的处理。

三、ftp文件传输

文件传输协议ftp(FileTransimitProtocol)利用以太网实现文件的传输。

ftp相对于串口

传输文件来说,传输速度快,所以上传比较大的文件一般采用ftp来实现,需要上传的文件

应保存到主机的/var/ftp/pub目录下。

下面具体介绍ftp文件传输过程(假设主机的IP地址

为192.168.0.100)。

(ftp的具体其他用法可以在linux终端提示符输入manftp查看)

1、在目标板的调试终端输入ftp命令

[root@51Board~]$ftp192.168.0.100

2、输入用户名和密码:

用户采用匿名登陆网络(anonymous),无需输入密码。

如果用户需要采用其他的用户名登陆,必须修改(脚本)

3、当用户名和密码都正确后,在调试终端显示登陆成功信息和ftp提示符,如图所示。

4、文件传输:

ftp提示符下利用cd命令转到主机的pub目录下,利用get命令上传需要传输的文件。

假设需要上传的文件为facedect(确保文件保存在主机的/var/ftp/pub目录下)

ftp>getfacedect

文件传输完毕后,ftp输出成功信息和被传输文件的字节数。

(如图所示)

【实验仪器】

1、装有Linux操作系统的PC机一台;

2、XSBase270或XSBase255ARM实验开发平台一套

【实验内容】

一、minicom的使用实验内容

1、将目标机与PC机相连,利用minicom–s正确设置串口的参数,启动目标机,记录PC

机显示的内容

2、关闭目标板,利用minicom–s重新设置串口参数,启动目标机,记录PC机显示的现象

3、用file命令查看root目录下的hello应用程序的属性并记录。

然后利用串口通信向目标机下传root目录下的hello应用程序,同时运行该应用程序。

记录文件下载的目标板目录和下载文件的基本步骤。

二、网络文件系统nfs的配置及应用实验内容

1、通过网络文件系统的配置将主机的其他目录(如/root/Emdoor目录),并挂载到目标机上,记录设置的步骤。

2、用file命令查看root目录下的hello-arm应用程序的属性并记录。

然后将主机root目录下的ARM程序hello-arm复制到主机的网络文件系统目录上,在目标机的挂载目录运行该程序,记录此次运行结果并与hello的运行结果比较写出你的结论

3、将目标机其他目录上的文件复制到网络文件系统挂载的目录上,然后到主机上查看文件

是否完成传输。

4、将主机上其他目录上的文件复制到网络文件系统挂载的目录上,然后到目标机挂载网络

文件系统的目录中将该文件复制到目标机其他目录上,重新启动目标机系统查看文件是否复

制成功。

最后写出你的结论。

三、ftp实验内容

1、将example目录下的文件cxcore.lib文件通过ftp直接传输到目标板的/usr/lib目录下,记

录通过ftp传输文件的基本步骤,并与通过串口传输文件进行比较,写下你的结论。

2、将目标板中/usr/lib目录下的一个文件传输到主机上,记录传输的基本步骤和文件传输所

在的目录。

【思考题】

1、一目标平台通过串口与PC机连接后,用户启动目标平台时发现串口终端出现乱码,请

分析串口终端产生乱码的原因。

2、某同学想利用ftp进行文件传输,他已经设定主机平台的IP地址为192.168.0.100,可在

串口终端输入ftp192.168.0.100时,出现ftp:

connect:

Connectionrefused错误,请分析

产生错误的原因。

3、参考ftp适应文档,分析在ftp方式下如何使用linux下如mkdir等常用命令。

【实验报告要求】

以书写形式记录下每一个实验内容,包括输入若干信息、遇到的问题和解决方法;并回答思考题。

实验二Makefile实验

实验学时:

2

实验类型:

验证

实验要求:

必修

【实验目的】

1、了解Makefile的基本概念和基本结构

2、初步掌握编写简单Makefile的方法

3、了解递归Make的编译过程

4、初步掌握利用GNUMake编译应用程序的方法

【实验原理】

在Linux或Unix环境下,对于只含有几个源代码文件的小程序(如hello.c)的编译,

可以手工键入gcc命令对源代码文件逐个进行编译;然而在大型的项目开发中,可能涉及几

十到几百个源文件,采用手工键入的方式进行编译,则非常不方便,而且一旦修改了源代码,

尤其头文件发生了的修改,采用手工方式进行编译和维护的工作量相当大,而且容易出错。

所以在Linux或Unix环境下,人们通常利用GNUmake工具来自动完成应用程序的维护和

编译工作。

实际上,GNUmake工具通过一个称为Makefile的文件来完成对应用程序的自动维护和编译工作。

Makefile是按照某种脚本语法编写的文本文件,而GNUmake能够对

Makefile中指令进行解释并执行编译操作。

Makefile文件定义了一系列的规则来指定哪些文件需要先编译,哪些文件需要后编译,哪些文件需要重新编译,甚至于进行更复杂的功能操作。

GNUmake工作时的执行步骤如下:

1、读入所有的Makefile。

2、读入被include的其它Makefile。

3、初始化文件中的变量。

4、推导隐晦规则,并分析所有规则。

5、为所有的目标文件创建依赖关系链。

6、根据依赖关系,决定哪些目标要重新生成。

7、执行生成命令。

1-5步为第一个阶段,6-7为第二个阶段。

第一个阶段中,如果定义的变量被使用了,那么,

make会把其展开在使用的位置。

但make并不会完全马上展开,make使用的是拖延战术,

如果变量出现在依赖关系的规则中,那么仅当这条依赖被决定要使用了,变量才会在其内部

展开。

下面对makefile的相关问题进行简单介绍:

1、Makefile的基本结构

Makefile的一般结构:

target……:

dependency……

command……

结构中各部分的含义:

(1)、target(目标):

一个目标文件,可以是Object文件,也可以是执行文件。

还可以是一个标签(Label)。

(2)、dependency(依赖):

要生成目标文件(target)所依赖哪些文件

(3)、command(命令):

创建项目时需要运行的shell命令(注:

命令(command)部分的每行的缩进必须要使用Tab而不能使用多个空格)。

Makefile实际上是一个文件的依赖关系,也就是说,target这一个或多个的目标文件依

赖于dependency中的文件,其生成规则定义在命令command中。

如果依赖文件(dependency)

中有一个以上的文件比目标(target)文件要新的话,shell命令(command)所定义的命令

就会被执行。

这就是Makefile的规则。

也就是Makefile中最核心的内容。

例如,假设有一个C源文件test.c,该源文件包含有自定义的头文件test.h,则目标文件

test.o明确依赖于两个源文件:

test.c和test.h。

如果只希望利用gcc命令来生成test.o目标文件,这时,就可以利用如下的makefile来定义test.o的创建规则:

#Thismakefilejustisaexample.

test.o:

test.ctest.h

gcc–ctest.c

从上面的例子注意到,第一个字符为#的行表示注释行。

第一个非注释行指定test.o为

目标,并且依赖于test.c和test.h文件。

随后的行指定了如何从目标所依赖的文件建立目标。

当test.c或test.h文件在编译之后又被修改,则make工具可自动重新编译test.o,如果

在前后两次编译之间,test.c和test.h均没有被修改,而且test.o还存在的话,就没有必要重新编译。

这种依赖关系在多源文件的程序编译中尤其重要。

通过这种依赖关系的定义,make工具可避免许多不必要的编译工作。

一个makefile文件中可定义多个目标,利用maketarget命令可指定要编译的目标,如

果不指定目标,则使用第一个目标。

通常,makefile中定义有clean目标,可用来清除编译过程中的中间文件

#Thismakefilejustisaexample.

test.o:

test.ctest.h

gcc-ctest.c

clean:

rm-f*.o

运行makeclean时,执行rm–f*.o命令,删除编译过程中生成的所有中间文件。

2、Makefile的基本内容

Makefile一般包括包含:

显式规则、隐晦规则、变量定义、文件指示和注释等五个内容。

(1)、显式规则:

显式规则说明如何生成一个或多个的目标文件。

这是由Makefile的书写

者明显指出,要生成的文件,文件的依赖文件,生成的命令。

(2)、变量定义。

在Makefile中可以定义一系列的变量,变量一般都是字符串,当Makefile

被执行时,变量的值会被扩展到相应的引用位置上。

(3)、隐含规则:

由于GNUmake具有自动推导功能,所以隐晦规则可以比较粗糙地简略地

书写Makefile,然后由GNUmake的自动推导功能完成隐晦规则的内容。

(4)、文件指示。

其包括了三个部分,一个是在一个Makefile中引用另一个Makefile,就像C语言中的include一样;另一个是指根据某些情况指定Makefile中的有效部分,就像C语言中的预编译#if一样;还有就是定义一个多行的命令。

(5)、注释。

Makefile中只有行注释,和UNIX的Shell脚本一样,其注释是用“#”字符,如果你要在你的Makefile中使用“#”字符,可以用反斜框进行转义,如:

“\#”。

2.1Makefile中的变量

(1)、Makefile中定义的变量,与C/C++语言中的宏一样,代表一个文本字串,在Makefile

被执行时候变量会自动地展开在所使用的地方。

Makefile中的变量可以使用在“目标”,“依赖目标”,“命令”或Makefile的其它部分中。

(2)、Makefile中变量的命名字可以包含字符、数字,下划线(可以是数字开头),但不应该含有“:

”、“#”、“=”或是空字符(空格、回车等)。

(3)、Makefile中变量是大小写敏感的,“foo”、“Foo”和“FOO”是三个不同的变量名。

传统的Makefile的变量名是全大写的命名方式

(4)、变量在声明时需要给予初值,而在使用时,需要在变量名前加上“$”符号

#makefiletestforhelloprogram

#writtenbyEmdoor

CC=gcc

CFLAGS=

OBJS=hello.o

all:

hello

hello:

$(OBJS)

$(CC)$(CFLAGS)$(OBJS)–ohello

hello.o:

hello.c

$(CC)$(CFLAGS)–chello.c–o$(OBJS)

clean:

rm–rfhello*.o

上面自定义变量OBJS表示hello.o,当makefile被执行时,变量会在使用它的地方精确

地展开,就像C/C++中的宏一样。

上述makfile变量展开后的形式为:

#makefiletestforhelloprogram

#writtenbyEmdoor

CC=gcc

CFLAGS=

OBJS=hello.o

all:

hello

hello:

hello.o

gcchello.o–ohello

hello.o:

hello.c

gcc–chello.c–ohello.o

clean:

rm–rfhello*.o

GNUmake的主要预定义变量

GNUmake有许多预定义的变量,这些变量具有特殊的含义,可在规则中使用。

以下给

出了一些主要的预定义变量,除这些变量外,GNUmake还将所有的环境变量作为自己的预

定义变量。

$@——表示规则中的目标文件集。

在模式规则中,如果有多个目标,那么,"$@"就是匹

配于目标中模式定义的集合。

$%——仅当目标是函数库文件中,表示规则中的目标成员名。

例如,如果一个目标是

"foo.a(bar.o)",那么,"$%"就是"bar.o","$@"就是"foo.a"。

如果目标不是函数库文件(Unix

下是[.a],Windows下是[.lib]),那么,其值为空。

$<——依赖目标中的第一个目标名字。

如果依赖目标是以模式(即"%")定义的,那么"$<"

将是符合模式的一系列的文件集。

注意,其是一个一个取出来的。

$?

——所有比目标新的依赖目标的集合。

以空格分隔。

$^——所有的依赖目标的集合。

以空格分隔。

如果在依赖目标中有多个重复的,那个这个

变量会去除重复的依赖目标,只保留一份。

$+——这个变量很像"$^",也是所有依赖目标的集合。

只是它不去除重复的依赖目标。

命令的变量。

AR函数库打包程序。

默认命令是“ar”。

AS汇编语言编译程序。

默认命令是“as”。

CCC语言编译程序。

默认命令是“cc”。

CXXC++语言编译程序。

默认命令是“g++”。

CO从RCS文件中扩展文件程序。

默认命令是“co”。

CPPC程序的预处理器(输出是标准输出设备)。

默认命令是“$(CC)–E”。

FCFortran和Ratfor的编译器和预处理程序。

默认命令是“f77”。

GET从SCCS文件中扩展文件的程序。

默认命令是“get”。

LEXLex方法分析器程序(针对于C或Ratfor)。

默认命令是“lex”。

PCPascal语言编译程序。

默认命令是“pc”。

YACCYacc文法分析器(针对于C程序)。

默认命令是“yacc”。

YACCRYacc文法分析器(针对于Ratfor程序)。

默认命令是“yacc–r”。

MAKEINFO转换Texinfo源文件(.texi)到Info文件程序。

默认命令是“makeinfo”。

TEX从TeX源文件创建TeXDVI文件的程序。

默认命令是“tex”。

TEXI2DVI从Texinfo源文件创建军TeXDVI文件的程序。

默认命令是“texi2dvi”。

WEAVE转换Web到TeX的程序。

默认命令是“weave”。

CWEAVE转换CWeb到TeX的程序。

默认命令是“cweave”。

TANGLE转换Web到Pascal语言的程序。

默认命令是“tangle”。

CTANGLE转换CWeb到C。

默认命令是“ctangle”。

RM删除文件命令。

默认命令是“rm–f”。

命令参数变量:

下面的这些变量都是相关上面的命令的参数。

如果没有指明其默认值,那么其默认值都

是空。

ARFLAGS函数库打包程序AR命令的参数。

默认值是“rv”。

ASFLAGS汇编语言编译器参数。

(当明显地调用“.s”或“.S”文件时)。

CFLAGSC语言编译器参数。

CXXFLAGSC++语言编译器参数。

COFLAGSRCS命令参数。

CPPFLAGSC预处理器参数。

(C和Fortran编译器也会用到)。

FFLAGSFortran语言编译器参数。

GFLAGSSCCS“get”程序参数。

LDFLAGS链接器参数。

(如:

“ld”)

LFLAGSLex文法分析器参数。

PFLAGSPascal语言编译器参数。

RFLAGSRatfor程序的Fortran编译器参数。

YFLAGSYacc文法分析器参数。

2.2隐含规则

GNUmake包含有一些内置的或隐含的规则,这些规则定义了如何从不同的依赖文件建

立特定类型的目标。

GNUmake支持两种类型的隐含规则:

(1)、后缀规则(SuffixRule)。

后缀规则是定义隐含规则的老风格方法。

后缀规则定义了将一个具有某个后缀的文件(例如,.c文件)转换为具有另外一种后缀的文件(例如,.o文件)的方法。

每个后缀规则以两个成对出现的后缀名定义,例如,将.c文件转换为.o文件的后缀规则可定义为:

.c.o:

$(CC)$(CCFLAGS)$(CPPFLAGS)-c-o$@$<

(2)、模式规则(patternrules)。

这种规则更加通用,因为可以利用模式规则定义更加复杂的依赖性规则。

模式规则看起来非常类似于正则规则,但在目标名称的前面多了一个%号,同时可用来定义目标和依赖文件之间的关系,例如下面的模式规则定义了如何将任意一

个X.c文件转换为X.o文件:

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 文学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1