6410嵌入式实验指导书.docx
- 文档编号:26100326
- 上传时间:2023-06-17
- 格式:DOCX
- 页数:38
- 大小:1.53MB
6410嵌入式实验指导书.docx
《6410嵌入式实验指导书.docx》由会员分享,可在线阅读,更多相关《6410嵌入式实验指导书.docx(38页珍藏版)》请在冰豆网上搜索。
6410嵌入式实验指导书
目录
实验一、在主机上搭建Linux开发环境2
实验二、LINUX基本行命令6
实验三、Linux交叉开发环境配置和使用9
实验四、LinuxC程序设计18
实验五、GDB调试例程20
实验六、Shell程序设计21
实验七、Makefile文件的编写25
实验八、多进程实验29
实验一、在主机上搭建Linux开发环境
试验目的
1、掌握如何在WINDOWS下安装虚拟机,
2、在虚拟机中安装LINXUX操作系统;
步骤1.首先准备一张Ubuntu12.04的安装光盘。
将光盘插入光驱,在PC的bios中把
PC启动方式设置为光驱启动,启动PC。
步骤2.启动PC后,安装盘会提示选择安装语言种类。
使用PC键盘的方向键选择在安装
过程中显示的语言,在这里我们选择English
选择“InstallUbuntu”。
Continue:
硬盘空间以及挂载点的分配。
这里选择默认。
也可根据个人需要来进行设置.
单击InstallNow
选择键盘布局,默认即可,单击Continue.
选择所在地,上海,Continue:
输入系统用户名和密码,这里输入的用户名:
forlinx,密码:
123456.
注意:
这里的用户名属于普通用户,不具备root用户权限,系统如何以root登陆,下一节有详
细说明。
继续Continue,系统会完成安装。
将Ubuntu设置为root用户自动登录
嵌入式交叉编译,经常需要root用户的权限,ubuntu12.04默认是不允许root登录的,在
登录窗口只能看到普通用户和访客登录。
以普通身份登陆Ubuntu后我们需要做一些修改,用于
支持root用户登陆.
普通用户登录后,需要在终端窗口中执行命令切换到超级用户模式,在Ubuntu12.04如何进
入终端窗口,请参看6-4-1Linux终端一节关于终端使用介绍.
在终端窗口里面输入:
sudo-s.回车,然后输入安装Ubuntu12.04时设置的系统密码,即
可进入root用户权限模式.在终端窗口中执行gedit/etc/lightdm/lightdm.conf.
增加greeter-show-manual-login=trueallow-guest=false两行.
修改完的整个配置文件如下:
[SeatDefaults]
greeter-session=unity-greeter
user-session=ubuntu
greeter-show-manual-login=true#手工输入登陆系统的用户名和密码
allow-guest=false#不允许guest登录
然后我们启动root帐号:
在终端窗口中执行passwdroot命令,根据提示输入root帐号的密码。
重启ubuntu,登录窗口会有“登录”选项,这时候我们就可以通过root登录了。
如下图所示:
实验二、LINUX基本行命令
1、vmtool安装与共享文件夹建立
3、熟悉linux基本行命令
Linux终端
在Linux系统中终端是一个很实用的与操作系统交互的窗口,您可以使用终端来编译
应用程序,启动各种系统服务,在Linux系统中占据着非常重要的位置。
以后每次单击启动面板上的图标即可运行终端窗口:
网络相关配置
本节测试中,网络环境如下:
网络连接方式:
开发板直接连接能够上网的路由器。
开发板示例IP:
192.168.0.232
路由器IP:
192.168.0.201
子网掩码:
255.255.255.0
每个开发板的网络使用环境未必相同,本小节使用上述网络环境作为演示。
实际使用中,
请按照实际网络环境自行进行配置。
命令行设置IP地址
#ifconfigeth0192.168.0.232(将eth0[dm9000]设置IP为192.168.0.232)
#ifconfigeth0up(将eth0[dm9000]使能)
#ifconfig(查看当前网络状况)
如果您的开发板与路由器连接,且路由器支持DHCP自动IP地址分配,可以在DNW或者
超级终端里面输入:
udhcpc–ieth0
命令,用来动态获取IP地址,-i参数用来指定网卡名称,飞凌开发板有线网络的网卡名称为
eth0.
使用ping命令测试网络
可以使用ping命令测试网络是否连通:
#ping192.168.0.201–s10000
其中10000为数据包大小;按键盘的Ctrl+C或者Crtl+Z退出。
安装交叉编译器
将arm-linux-gcc-4.3.2.tgz文件拷贝到Ubuntu的/forlinx目录下,该文件位于用户基
础资料光盘的“实用工具”文件夹中。
在Ubuntu中新建一个终端,输入下面的命令安装交叉
编译器:
#cd/forlinx(进入/forlinx目录)
#mkdir/usr/local/arm(创建目录,若目录已存在会提示错误,跳过即可)
#tarzxvfarm-linux-gcc-4.3.2.tgz-C/
编译器解压到/usr/local/arm
把交叉编译器路径添加到系统环境变量中,以后可以直接在终端窗口中输入arm-linx-gcc命
令来编译程序。
在终端中执行:
gedit/etc/profile
添加以下四行到该文件中:
exportPATH=/usr/local/arm/4.3.2/bin:
$PATH
exportTOOLCHAIN=/usr/local/arm/4.3.2
exportTB_CC_PREFIX=arm-linuxexport
PKG_CONFIG_PREFIX=$TOOLCHAIN/arm-none-linux-gnueabi
保存,退出。
重新启动系统,在终端里面执行arm-linux-gcc回车:
说明交叉编译器已经成功安装到了系统里面,可以使用该编译器来编译Uboot代码和内核代码
了.
实验三、Linux交叉开发环境配置和使用
试验目的:
1设立共享文件夹
2linux网络配置
3linux串口通信
预备知识
对于嵌入式开发通常要求宿主机配置有网络,支持NFS(为交叉开发时mount所用)。
然后要在宿主机上建立交叉编译调试的开发环境。
环境的建立需要许多的软件模块协同工作,开发工具软件的安装与配置将是一个比较繁杂的工作。
实验步骤:
1、VMWARE-TOOLS的安装
点击VMWAREworkstation标签栏的VM->installVMwareTools,
在Ubuntu中就会看到VMwareTools的虚拟光驱。
打开光驱,将
VMwareTools-8.1.4-227600.tar.gz拷贝到linux的/forlinx目录,然后在/forlinx中解压
VMwareTools-8.1.4-227600.tar.gz。
使用Linux命令行模式,进入刚解压生成的vmware-tools-distrib
的目录中,执行安装的shell,命令:
./vmware-install.pl
安装的过程当中会碰到很多Y/N的选择,建议全部选择Y。
安装按成后,重启Liunx。
2、在虚拟中选择VM->SETTING->OPTIONS->SharedFolder
添加共享文件夹,如下图所示。
3、网络相关配置
本节测试中,网络环境如下:
网络连接方式:
开发板直接连接能够上网的路由器。
开发板示例IP:
192.168.0.232
路由器IP:
192.168.0.201
子网掩码:
255.255.255.0
每个开发板的网络使用环境未必相同,本小节使用上述网络环境作为演示。
实际使用中请按照实际网络环境自行进行配置。
打开DNW软件或超级终端在命令行设置IP地址
#ifconfig(查看当前网络状况)
以使用ping命令测试网络是否连通:
#ping192.168.0.201–s10000
其中10000为数据包大小;按键盘的Ctrl+C或者Crtl+Z退出
Telnet服务测试
OK6410开发板在/etc/init.d/rcS脚本文件中已经启动了telnet服务,设置好IP地址后就可以作为一台telnet服务器了。
例如,开发板IP地址为192.168.0.232,在Windows的命令窗口下输入telnet192.168.0.232,用户名输入root,密码为空(开始->运行,输入cmd回车,即可进入Windows的命令窗口
FTP服务启用
系统启动时已经自动启动了ftp服务,可在电脑上用ftp软件访问,用户名root,密码为空;下图是在PC机上用IE访问ftp的截图:
使用FTP功能可以实现开发板与PC之间传输文件。
Web服务测试
我们在开发板上移植了一个webserver:
boa;boawebserver是一个小巧高效的web服务器,可运行在Unix或Linux平台,支持CGI,源代码开放;是一个非常适合于嵌入式系统的单任务http服务器。
4、设置Ubuntu网络参数
因为每个PC的网络环境都不一定一样,所以需要您根据自己的实际情况来设置Ubuntu的网络
步骤1:
虚拟机使用固定IP地址的网络方式
默认情况下,虚拟机安装完成后与宿主机共享一个IP地址,没有属于自己的IP,这里首先需要设置虚拟机的网络联系方式为桥接方式。
单击VM菜单下面的Settings项,弹出虚拟机设置对话框,如下图:
选择Bridged连接,确定即可。
选择Bridged连接,确定即可。
步骤2.启动Ubuntu,root用户登陆系统,单击桌面最右上端的按钮,弹出如下选项:
选择SystemSettings,进入如下设置:
双击Network网络设置项:
单击Options按钮:
选择IPV4设置,输入您的IP地址,子网掩码,网关,DNS,保存,网络设置成功。
测试一下,笔者的宿主机IP为192.168.0.30,用虚拟机来ping宿主机
安装交叉编译器
将arm-linux-gcc-4.3.2.tgz文件拷贝到Ubuntu的/forlinx目录下,该文件位于用户基
础资料光盘的“实用工具”文件夹中。
在Ubuntu中新建一个终端,输入下面的命令安装交叉
编译器:
#cd/forlinx(进入/forlinx目录)
#mkdir/usr/local/arm(创建目录,若目录已存在会提示错误,跳过即可)
#tarzxvfarm-linux-gcc-4.3.2.tgz-C/
编译器解压到/usr/local/arm
把交叉编译器路径添加到系统环境变量中,以后可以直接在终端窗口中输入arm-linx-gcc命
令来编译程序。
在终端中执行:
gedit/etc/profile
添加以下四行到该文件中:
exportPATH=/usr/local/arm/4.3.2/bin:
$PATH
exportTOOLCHAIN=/usr/local/arm/4.3.2
exportTB_CC_PREFIX=arm-linuxexport
PKG_CONFIG_PREFIX=$TOOLCHAIN/arm-none-linux-gnueabi
保存,退出。
重新启动系统,在终端里面执行arm-linux-gcc回车:
说明交叉编译器已经成功安装到了系统里面,可以使用该编译器来编译Uboot代码和内核代码
实验代码
/*******************************hello.c****************************
**************/
#include
Main(){
Printf(“forlinx--Hellloworld!
”);
}
5编译及运行
A本机编译。
本机编译简单说就是在什么环境下编译就在什么环境下运行。
我们这个在PC机Linux环境
下运行,当然也是运行在PCl机Linux环境下。
编译命令如下:
gcc–ohello-pchello.c//该命令得到的可执行文件为hello运行可执行程序
./hello-pc
输出forlinx—Helloworld!
B交叉编译。
交叉编译实际上就是从A环境下编译,在B环境下运行。
我们是在PC机Linux环境下编译
在飞凌6410开发板上运行。
编译命令如下:
/usr/local/arm/4.2.2-eabi/usr/bin/arm-linux-gcc–ohello-armhello.c
编译完成后,得到hello-arm可执行文件。
这个文件不能再PC上运行
如果此时在PC上执行改成虚怎会提示如上图:
“不可执行的二进制文件”。
现将hello-arm可执行文件通过SD卡(或U盘)拷贝到开发板中,在飞凌开发板上执行过程如下图:
实验四、LinuxC程序设计
1实验目的:
了解交叉编译和本机编译的区别
2实验内容
串口输出“Helloworld”
3实验设备:
PC机(Linux环境)、飞凌6410开发板
4实验代码
/*******************************hello.c****************************
**************/
#include
Main()
{
Printf(“forlinx--Hellloworld!
”);
}
5编译及运行
A本机编译。
本机编译简单说就是在什么环境下编译就在什么环境下运行。
我们这个在PC机Linux环境
下运行,当然也是运行在PCl机Linux环境下。
编译命令如下:
gcc–ohello-pchello.c//该命令得到的可执行文件为hello
运行可执行程序
./hello-pc
输出forlinx—Helloworld!
B交叉编译。
交叉编译实际上就是从A环境下编译,在B环境下运行。
我们是在PC机Linux环境下编译
在飞凌6410开发板上运行。
编译命令如下:
/usr/local/arm/4.2.2-eabi/usr/bin/arm-linux-gcc–ohello-armhello.c
编译完成后,得到hello-arm可执行文件。
这个文件不能再PC上运行
如果此时在PC上执行改成虚怎会提示如上图:
“不可执行的二进制文件”。
现将hello-arm可执行文件通过SD卡(或U盘)拷贝到开发板中,在飞凌开发板上执行过程
如下图:
实验五、GDB调试例程
试验目的
1、掌握如何在GDB调试程序方法
用gcc编译它:
gcc–ogreetgreeting.c
程序显示示结果如下:
从结果可以看出。
输出的第一行是正确的,但第二行打印出的东西并不是我们所期望的,我们期望的结果是:
thestringprintedbackwardiserehtolleh
毫无疑问,my_print2函数没有正常工作。
现在,让我们用gdb看看问题究竟出在哪能,先输入如下命令:
再输入gdbgreeting
如果输入命令时忘记了把要调试的程序作为参数传给gdb,可以在gdb提示符下用file命令加载它:
(gdb)filegreeting
现在我们可以用gdb的run命令来运行greeting,当它运行在gdb中时,结果大约会像这样:
(gdb)run
这时输出的结果与外面运行的结果一样,可是,为什么没有反序打印呢?
为找出问题所在,我们可以在my_pring2函数的for语句后没一个断点。
具体的做法是在gdb提示符下执行三次list命令,列出源程序
(gdb)list
(gdb)list
(gdb)list
第一次执行list命令的输出如下所示
第二次
第三次
根据列出的源程序,可设断点在21行,在gdb命令行提示符下输入如下命令。
设置断点:
(gdb)break21
Gdb会做出如下响应:
再执行run将产生如下结果
可以通过设置一个观察string2[size-i]变量值的观察点来找出错误的产生原因,做法是键入如下语句:
watchstring2[size-i]
Gdb将做出如下反映
现在可以用netx命令一步步的执行循环语句:
(gdb)next
经过第一次循环后,gdb告诉我们string2[size-i]的值是‘h’gdb显示的信息如下:
这个值是正确的,后来的数次循环的结果也都是正确的,当i=10时,表达式等于‘e’
Size–i的值等于1,最后一个字符已经拷贝到新字符串去了,
如果再执行下去,会看到已经没有值分配给string2[0]了,而它是新字符串的第一个字符,因为malloc函数在分配内存时把它们初始化为空字符。
这就是为什么string2没有任何输出的原因。
找出问题所在,修正这个错误也就会变得更容易,可以在代码里写入string2的第一个字符的偏移量为size-1而不是size,这是因为string2的大小为12,但起始偏移量为0,串内的字符从偏移量10,偏移量11为空字符保留。
实验六、Shell程序设计
1、实验目的:
了解什么是shell
掌握shell编程
2、实验内容:
编程实现将输入的字符串输出
3、实验设备:
PC机(Linux环境)、飞凌6410开发板
4、预备知识:
Shell简介
操作系统与外部最主要的接口就叫做shell。
shell是操作系统最外面的一层。
shell管理你与
操作系统之间的交互:
等待你输入,向操作系统解释你的输入,并且处理各种各样的操作系统的
输出结果。
用户登录或运行终端类比程序时,实际进入了Shell。
那么,Shell是什么呢?
确切一点说,
Shell就是一个命令行解释器,它的作用就是遵循一定的语法将输入的命令加以解释并传给系
统。
它为用户提供了一个向Linux发送请求以便运行程序的接口系统级程序,用户可以用Shell
来启动、挂起、停止甚至是编写一些程序。
Shell本身是一个用C语言编写的程序,它是用户使用Linux的桥梁。
Shell既是一种命令
语言,又是一种程序设计语言。
作为命令语言,它互动式地解释和执行用户输入的命令;作为程序设计语言,它定义了各种变量和参数,并提供了许多在高阶语言中才具有的控制结构,包
括循环和分支。
它虽然不是Linux系统内核的一部分,但它调用了系统内核的大部分功能来执
行程序、创建文档并以并行的方式协调各个程序的运行。
因此,对于用户来说,Shell是最重要
的实用程序,深入了解和熟练掌握Shell的特性极其使用方法,是用好Linux系统的关键。
可
以说,Shell使用的熟练程度反映了用户对Linux使用的熟练程度。
当用户使用Linux时是通过命令来完成所需工作的。
一个命令就是用户和Shell之间对话
的一个基本单位,它是由多个字符组成并以换行结束的字串。
交互与非交互式shell
交互式模式就是shell等待你的输入,并且执行你提交的命令。
这种模式被称作交互式是因
为shell与用户进行交互。
这种模式也是大多数用户非常熟悉的:
登录、执行一些命令、签退。
当你签退后,shell也终止了。
shell也可以运行在另外一种模式:
非交互式模式。
在这种模式下,shell不与你进行交互,而
是读取存放在文件中的命令,并且执行它们。
当它读到文件的结尾,shell也就终止了。
Shell类型
在UNIX中主要有两大类shell
Bourneshell(包括sh,ksh,andbash)
Bourneshell(sh)
Kornshell(ksh)
BourneAgainshell(bash)
POSIXshell(sh)
Cshell(包括cshandtcsh)
Cshell(csh)
TENEX/TOPSCshell(tcsh)
BourneShell
最初的UNIXshell是由StephenR.Bourne于20世纪70年代中期在新泽西的AT&T贝尔
实验室编写的,这就是Bourneshell。
Bourneshell是一个交换式的命令解释器和命令编程
语言。
Bourneshell可以运行为loginshell或者loginshell的子shell(subshell)。
只有login
命令可以调用Bourneshell作为一个loginshell。
此时,shell先读取/etc/profile文件和
$HOME/.profile文件。
/etc/profile文件为所有的用户定制环境,$HOME/.profile文件为本用
户定制环境。
最后,shell会等待读取你的输入。
CShell
BillJoy于20世纪80年代早期,在Berkeley的加利福尼亚大学开发了Cshell。
它主要是为
了让用户更容易的使用交互式功能,并把ALGOL风格的语法结构变成了C语言风格。
它新增
了命令历史、别名、文件名替换、作业控制等功能。
KornShell有很长一段时间,只有两类shell供人们选择,Bourneshell用来编程,Cshell用来交互。
为
了改变这种状况,AT&T的bell实验室DavidKorn开发了Kornshell。
ksh结合了所有的
Cshell的交互式特性,并融入了Bourneshell的语法。
因此,Kornshell广受用户的欢迎。
它还新增了数学计算,进程协作(coprocess)、行内编辑(inlineediting)等功能。
KornShell是一个交互式的命令解释器和命令编程语言.它符合POSIX——一个操作系统的国
际标准.POSIX不是一个操作系统,而是一个目标在于应用程序的移植性的标准——在源程序一
级跨越多种平台。
BourneAgainShell(bash)
bash是GNU计划的一部分,用来替代Bourneshell。
它用于基于GNU的系统如Linux.大多
数的Linux(RedHat,Slackware,Caldera)都以bash作为缺省的shell,并且运行sh时,
其实调用的是bash。
POSIXShell
POSIXshell是Kornshell的一个变种.当前提供POSIXshell的最大卖主是
Hewlett-Packard。
在HP-UX11.0,POSIXshell就是/bin/sh,而bsh是/usr/old/bin/
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 6410 嵌入式 实验 指导书
![提示](https://static.bdocx.com/images/bang_tan.gif)