嵌入式系统实验步骤

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验一Ubuntu系统的安装
主要内容:
1.1vmware的安装
1.2建立vmware虚拟机
1.3使用vmware安装ubuntu
1.4Linux命令练习
1.1 vmware的安装
本文档介绍在 Windows xp/Win7 系统上使用 VMWare 虚拟机进行开发,如果你直接使用的是 Linux 系统,请忽略此章。

本开发是在ubuntu 11.04下进行的,用户也可以在 Fedora 9下进行开发,用法与ubuntu
11.04类似,网上资料比较多,在此不再赘述。

1) 安装光盘目录下的虚拟机VMware-7.1 的目录下的 VMware-7.1.exe文件如图:
双击安装:
初始化完成后会出现:
2)点击 Next:
3)选择 Typical,然后点击Next:
4)点击 Next:
5)点击 Continue:
7) 稍等几分钟完成安装:
8)为了保证能正常运行可以点击Restart Now ,然后运行 VMware,如下图所示:
点击 Help 下面的“Enter License Key”:
点击Enter License Key:
这时打开光盘目录下的虚拟机下 VMware-7.1 注册机下的 VM7.1KeyGen.exe 如图:
首先点击 Generate 然后点击 Copy 最后点击Exit,复制到上面我们打开的License Key中:
点击 OK,再点击 Close 即可完成安装。

1.2 建立vmware虚拟机
1)打开VMWare:
用户安装镜像选择光盘目录下的ubuntu-iso下面的ubuntu-11.04-desktop-i386.iso文件。

2)填写用户信息:
3)选择安装目录:
4)设置虚拟硬盘大小:
5)完成设置:
1.3 使用vmware安装ubuntu
点击Finish后系统会自动重新启动, 如果系统直接开始就进入了安装界面如图:
这时点击界面左上角的红色正文形图案,然后点击power off:
此时回到开始界面:
双击 CD/DVD 2(IDE)将其改成 autoinst.iso,将 CD/DVD(IDE)里面的路径设置成 ubuntu ,镜
像文件路径如图:
如果 CD/DVD 2(IDE)的 Browse 中没有 autoinst.iso 选项,可以直接将 autoinst.iso 复制到里面去,如图:
点击 OK,重新启动:
如果此时还是无法进入,重新启动虚拟机请注意会出现这样一个界面:
按F2进入SETUP:
按键盘上的->右方向键到Boot选项:(如果鼠标无法移出请按 Ctrl+Alt 键)
将 CD-ROM Drive 的启动级别高于 Hard Drive(上下键选择,增减级别),然后按 F10:
选择 Yes 然后回车,此时会重新启动进入:
选择中文(简体),然后选择安装 Ubuntu:
勾选相关选项,然后点击前进:
选择自动分区还是手动分区,这里我们选择自动分区,然后点击前进:
点击现在安装
格式化完成后会出现:
选择地区,这里我们选择默认的就可以了,你也可以选择上海,点击前进:
选择键盘两边都选USA就可以了,点击前进:
设置用户信息,点击前进:
开始安装:
安装完成,重启,点击现在重启后:
会出现一个提示,回车即可:
用刚才设置的用户名登录:
此时会出现这样的警告,点击关闭.进入主界面:
切换用户成 root 用户:(为了避免因为权限问题产生的错误这里我们直接用root用户登陆)
打开终端:
此时我们可以用 root 用户登陆了:
点击注销 work:

点击切换用户:
点击其它:
用户名:root
密码为上面我们设置的:
登陆成功
1.4 Linux命令
(1)文件和目录命令练习
cd /home 进入 '/home' 目录'
cd .. 返回上一级目录
cd ../.. 返回上两级目录
cd 进入个人的主目录
cd - 返回上次所在的目录
pwd 显示工作路径
ls 查看目录中的文件
ls –l 显示文件和目录的详细资料
ls -a 显示隐藏文件
mkdir dir1 创建一个叫做 'dir1' 的目录'
mkdir dir1 dir2 同时创建两个目录
mkdir -p /tmp/dir1/dir2 创建一个目录树
rm -f file1 删除一个叫做 'file1' 的文件' rmdir dir1 删除一个叫做 'dir1' 的目录'
rm -rf dir1 删除一个叫做 'dir1' 的目录并同时删除其内容
rm -rf dir1 dir2 同时删除两个目录及它们的内容
mv dir1 new_dir 重命名/移动一个目录
cp file1 file2 复制一个文件
cp dir/* . 复制一个目录下的所有文件到当前工作目录
cp -a /tmp/dir1 . 复制一个目录到当前工作目录
cp -a dir1 dir2 复制一个目录
(2) 文件搜索
find / -name file1 从 '/' 开始进入根文件系统搜索文件和目录
find / -user user1 搜索属于用户 'user1' 的文件和目录
whereis halt 显示一个二进制文件、源码或man的位置
which halt 显示一个二进制文件或可执行文件的完整路径
(3)文件权限
使用 "+" 设置权限,使用 "-" 用于取消
ls -lh 显示权限
chmod ugo+rwx directory1 设置目录的所有人(u)、群组(g)以及其他人(o)以读(r )、写(w)和执行(x)的权限
chmod go-rwx directory1 删除群组(g)与其他人(o)对目录的读写执行权限
(4)压缩和解压
tar -cvfz archive.tar.gz dir1 创建一个gzip格式的压缩包
tar -xvfz archive.tar.gz 解压一个gzip格式的压缩包
(5)练习任务
①在/home下创建目录test并在其下面用gedit编辑器或VI编辑器新建文件hello.c,修改文件hello.c属性为755。

②打包压缩home目录下的test目录,并将压缩包命名为test.tar.gz。

③将压缩包拷贝到tmp目录下并解压。

④重命名tmp目录下的hello.c为hello1.c。

实验二Linux中编程工具的使用
主要内容:
2.1 安装vmware-tools
2.2 GCC和GDB的使用
2.3 任务练习
2.1 安装vmware-tools
安装VMWare-tools的目的是更好的和 Windows 进行文件交互,更好的显示以及其他。

1)选择安装 VMWare-tools:
2)选择后:
如果提示这样的错误,直接点击虚拟机右下角的DVD2:
点击 Settings:
选择镜像文件,到vmware 的安装目录:
在你安装Vmware路径下的Vmware Workstation里面,选择linux.iso点击打开:
3)点击OK:
4)桌面上会出现VMware Tools光盘:
5)打开VMware Tools光盘(一般会自动弹出)。

6) 拷贝
到/tmp目录
7)打开终端(可以直接点击终端不放,拖到桌面创建快捷方式):
8)进入/tmp目录,解压VMwareTools:
9)解压完成后会生成vmware-tools-distrib目录,进入这个目录:
注: 此时不要马上执行./vmware-install.pl,此时需要对vmwaretools进行修改
进入这个目录:
解压 vmhgfs.tar 文件:
解压完成后会生成vmhgfs-only 目录,
进入这个目录编辑 super.c 文件:
找到下面这一段:
将.clear_inode改为.evict_inode.保存退出.
删除原有的vmhgfs.tar,将vmhgfs-only重新压缩:
删除 vmhgfs-only.修改完成:
执行./vmware-install.pl:
开始安装,一直回车即可:
2.2 GCC和GDB的使用
1、GCC的使用
(1)参数:-o out_put_filename
说明:指定编译出的档名为 out_put_filename。

范例:本例将程式码 'test.c' 编译成可执行档,并设定档名为 'test'。

gcc test.c -o test
(2)参数:-O
说明:在编译过程做最佳化,以提升增快程式执行速度。

范例:本例将程式码 'test.c' 编译成可执行档 'test',并在编译过程做最佳化'。

gcc -O test.c -o test
(3)设定搜寻标头档目录、程式库档的目录及指定程式库档。

1
②设定搜寻程式库目录。

参数:-Ldir_name
说明:将目录 'dir_name' 设定为搜寻程式库目录之一。

③设定程式库档案。

参数: -lname
说明:联结程式库 libname.a 。

范例一:本例中假设你的程式档名为test.c,数学函数如 sin等,所要联结的程式库为 libm.a。

gcc -I/usr/X11R6/include -L/usr/X11R6/lib -lX11 test.c -o test
范例二:本例中假设你的程式档名为 test.c,使用到 X window 函数,所需的 include 档放在/usr/X11R6/include 中,所须联结的程式库放在 /usr/X11R6/lib,所要联结的程式库为libX11.a。

gcc -I/usr/X11R6/include -L/usr/X11R6/lib -lX11 test.c -o test
(4)参数: -Wall
说明:输出较多的警告讯息,以便找出程式的错误。

范例:编译 test.c 时输出较多的警告讯息。

gcc -Wall test.c
(5)参数: -g
说明:在编译出可执行档时,附加执行时除错资讯,以供 gdb 读取 (若要使用 ABSoft 的除错
程式,则须将参数改为-gdwarf )。

范例:将'test.c' 编译成可执行档 'test',并附加除错资讯。

gcc -g test.c -o test
(6)进阶参数
①参数: -c
说明:仅编译成 object 档而不进行程式库联结。

范例:将 test.c 编译成 object 档 test.o。

gcc -c test.c -o test.o
②联结数个 object 成可执行档。

范例:将 'test1.o'、'test2.o' 和程式库联结後成为可执行档 test。

gcc test1.o test2.o -o test
③观察宏展开情形:
参数: -E
说明:展开程式中的宏以便了解巨集是否依照预期方式展开。

范例:将 test1.c 中的宏展开后储存到 test1.c.ext 。

gcc -E test1.c > test1.c.ext
④产生组合语言程式码:
参数: -S
范例:编译 test.c 产生对应的组合语言程式码档 test.s。

gcc -S test.c -o test.s
2、GDB的使用
一般来说,GDB主要完成下面四个方面的功能:
(1)启动你的程序,可以按照你的自定义的要求随心所欲的运行程序。

(2)可让被调试的程序在你所指定的调置的断点处停住。

(断点可以是条件表达式)
(3)当程序被停住时,可以检查此时你的程序中所发生的事。

(4)动态的改变你程序的执行环境。

一个调试示例
——————
源程序:tst.c
#include
int func(int n)
{
int sum=0,i;
for(i=0; i
{
sum+=i;
}
return sum;
}
main()
{
int i;
long result = 0;
for(i=1; i<=100; i++)
{
result += i;
}
printf("result[1-100] = %d ", result );
printf("result[1-250] = %d ", func(250) );
}
编译生成执行文件:(Linux下)
gcc -g tst.c -o tst
使用GDB调试:
hchen/test> gdb tst <---------- 启动GDB
GNU gdb 5.1.1
Copyright 2002 Free Software Foundation, Inc.
GDB is free software, covered by the GNU General Public License, and you are welcome to change it and/or distribute copies of it under certain conditions. Type "show copying" to see the conditions.
There is absolutely no warranty for GDB. Type "show warranty" for details.
This GDB was configured as "i386-suse-linux"...
(gdb) l <-------------------- l命令相当于list,从第一行开始例出原码。

1 #include
2
3 int func(int n)
4 {
5 int sum=0,i;
6 for(i=0; i
7 {
8 sum+=i;
9 }
10 return sum;
(gdb) <-------------------- 直接回车表示,重复上一次命令
11 }
12
13
14 main()
15 {
16 int i;
17 long result = 0;
18 for(i=1; i<=100; i++)
19 {
20 result += i;
(gdb) break 16 <-------------------- 设置断点,在源程序第16行处。

Breakpoint 1 at 0x8048496: file tst.c, line 16.
(gdb) break func <-------------------- 设置断点,在函数func()入口处。

Breakpoint 2 at 0x8048456: file tst.c, line 5.
(gdb) info break <-------------------- 查看断点信息。

Num Type Disp Enb Address What
1 breakpoint keep y 0x08048496 in main at tst.c:16
2 breakpoint keep y 0x08048456 in func at tst.c:5
(gdb) r <--------------------- 运行程序,run命令简写
Starting program: /home/hchen/test/tst
Breakpoint 1, main () at tst.c:17 <---------- 在断点处停住。

17 long result = 0;
(gdb) n <--------------------- 单条语句执行,next命令简写。

18 for(i=1; i<=100; i++)
(gdb) n
20 result += i;
(gdb) n
18 for(i=1; i<=100; i++)
(gdb) n
20 result += i;
(gdb) c <--------------------- 继续运行程序,continue命令简写。

Continuing.
result[1-100] = 5050 <----------程序输出。

Breakpoint 2, func (n=250) at tst.c:5
5 int sum=0,i;
(gdb) n
6 for(i=1; i<=n; i++)
(gdb) p i <--------------------- 打印变量i的值,print命令简写。

= 134513808
(gdb) n
8 sum+=i;
(gdb) n
6 for(i=1; i<=n; i++)
(gdb) p sum
= 1
(gdb) n
8 sum+=i;
(gdb) p i
= 2
(gdb) n
6 for(i=1; i<=n; i++)
(gdb) p sum
= 3
(gdb) bt <--------------------- 查看函数堆栈。

#0 func (n=250) at tst.c:5
#1 0x080484e4 in main () at tst.c:24
#2 0x400409ed in __libc_start_main () from /lib/libc.so.6 (gdb) finish <--------------------- 退出函数。

Run till exit from #0 func (n=250) at tst.c:5
0x080484e4 in main () at tst.c:24
24 printf("result[1-250] = %d ", func(250) );
Value returned is = 31375
(gdb) c <--------------------- 继续运行。

Continuing.
result[1-250] = 31375 <----------程序输出。

Program exited with code 027. <--------程序退出,调试结束。

(gdb) q <--------------------- 退出gdb。

2.3 任务练习
1、用gedit/VI编辑test.c源程序(可使用上面案例程序)。

2、用GCC编译test.c生成名为test和gtest(可调试)的可执行程序。

3、用GDB调试gtest。

4、运行test程序,查看程序执行结果。

实验三交叉编译和网络传输工具配置和使用
主要内容:
3.1 windows和Ubuntu之间共享文件夹的设置
3.2 交叉编译工具的安装和测试
3.3 配置网络、NFS和tftp
3.1 windows和Ubuntu之间共享文件夹的设置
1)将windows的目录映射为本地目录(便于文件交互):
进入选项
选择 Options 选中 Shared Folders 选中 Always enabled 如上图.选择 Add
点击N e x t:
选择实验箱光盘目录,并且命名为6410
点击 Next 然后点击 OK,我们就可以在/mnt/hgfs/6410目录下访问到我们用户光盘的内容了
我们还可以创建一个路径来存放编译生成的bin文件.
Windows 下的路径大家可以自己选。

3.2 交叉编译工具的安装和测试
将交叉编译器拷贝到根目录下,解压。

注:可以用“cd /”到根目录下。

注 cd 后面不带任何字符,直接回车,进入~目录,然后增加环境变量:
末尾添加为
PATH=$PATH:/usr/local/arm/4.5.1/bin export PATH保存退出,重新打开终端,看一下arm-linux-gcc是否可用(键入arm-linux-gcc --version)
至此,交叉编译器安装完毕。

3.3 配置网络、NFS和tftp
1、配置网络使Ubuntu能够访问Internet。

1)选择网卡:
2)选择:
3)确定让 ubuntu 自动配置网络:
选择Auto eht0
4)检查网络是否通,进入终端使用ping命令启动终端窗口:
建议和互联网联通Ubuntu 可以在网络上进行安装包的更新
选择更新管理器:
点击安装更新,即可更新软件包.请更新所有软件包,直到点击检查时已经没有软件包要升级为止。

注:Ubuntu 11.04 (Natty) 已经停止支持,但可以使用old-releases源了,先备份源列表文件:sudo cp /etc/apt/sources.list /etc/apt/sources.list.backup 再将实验文件夹中的sources.list文件通过windows-ubuntu共享文件夹共享到ubuntu中,然后将sources.list文件拷贝到/etc/apt/下,即可正常更新。

2、安装设置nfs服务器
1)下载nfs服务端软件(在终端中输入命令):
输入 y 回车:
2)编辑 /etc/exports文件,在终端下输入:
进入gedit编辑界面后,在最后一行添加:
即设定nfs根目录为/gzsd/nfs只允许任何IP的设备挂载该目录。

1)在根目录下新建目录/gzsd/nfs。

mkdir –p /gzsd/nfs
2)执行下面三步使设定生效,并启动nfs服务器
2)
至此nfs服务器已经启动,我们可以在这个目录的基础上调试linux各个系统。

3)测试NFS是否可用,自己挂载自己进行测试
挂载之前查看ubuntu的IP,用ifconfig命令或查看联网信息
图中可知,本实验环境IP为192.168.1.112。

挂载自己的共享出去的/gzsd/nfs到自己的/mnt下,看是否能够成功。

分别进入/gzsd/nfs 目录和/mnt目录查看,挂载成功。

退出/mnt,卸载/mnt,查看是否卸载。

3、安装设置tftp服务器
1)下载tftp服务端软件(在终端中输入命令):
2)编辑 /etc/default/tftpd-hpa文件,在终端下输入:
进入gedit编辑界面后,将内容修改为:
配置服务器目录为/tftproot,若Ubuntu中尚无/tftproot目录,自己新建之。

修改tftproot属性为777。

3)测试tftp服务器是否能够在本机使用。

在根目录新建空白文件hello.c,在/tftproot中新建空白文件hello1.c,本机启动tftp。

尝试将根目录的hello.c通过tftp放入/tftproot,而将/tftproot中的hello1.c取到根目录。

查看结果,可见tftp传送成功。

实验四在实验箱上运行helloworld
主要内容:
4.1 配置局域网
4.2 用交叉编译工具编译helloworld程序
4.3 用tftp服务器传送helloworld程序到实验箱
4.4 用NFS服务器传送helloworld程序到实验箱
说明:做本实验需要修改PC机的网络参数,请在实验前保存本机网络配置参数。

4.1 配置局域网
手动设置PC主机、Linux虚拟机以及实验箱上的Ip地址在同一网段,使它们之间能够相互ping通。

因实验箱统一配置的IP为198.168.1.11,为简单起见,本实验将PC和VM的IP设置均设置在该网段。

1、设置主机PC的IP。

打开网络连接,如图:
右键点击以太网或本地连接,点击属性按钮,如图:
双击tcp/ipv4,使用下面的ip地址,如图
WIN+r键,进入运行,输入cmd,进入终端查看主机Ip地址,输入ipconfig,如图:
你会发现以太网断开,无ip地址,这是因为主机以太网没有连接上,主机以太网口与开发板网口或与有线局域网连接好以后,再输入ipconfig,这时ip地址就会变为刚才设置的地址。

2、手动设置ubuntu虚拟机ip地址
进入ubuntu虚拟机,点击系统->首选项->网络连接
点击添加,进入下面界面:
手工配置有线连接1的IP信息。

配置信息见下图,配置完成后点击保存。

网络连接中出现有线连接1。

以后连Internet网络就选Auto eth0,连实验箱就连有线连接1。

查看网络,选择连接有线网络1。

在终端中用ifconfig查看ubuntu的IP,会发现虚拟机以太网ip地址跟之前设置的相同。

相关文档
最新文档