《ARM嵌入式Linux系统开发》实验指导书.docx
- 文档编号:9436337
- 上传时间:2023-02-04
- 格式:DOCX
- 页数:72
- 大小:1.62MB
《ARM嵌入式Linux系统开发》实验指导书.docx
《《ARM嵌入式Linux系统开发》实验指导书.docx》由会员分享,可在线阅读,更多相关《《ARM嵌入式Linux系统开发》实验指导书.docx(72页珍藏版)》请在冰豆网上搜索。
《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文件:
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- ARM嵌入式Linux系统开发 ARM 嵌入式 Linux 系统 开发 实验 指导书