南邮嵌入式系统B实验报告
南京邮电大学通信与信息工程学院
实 验 报 告
实验名称: 基于ADS开发环境的程序
设计
领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计
嵌入式Linux交叉开发环境的建立
嵌入式Linux环境下的程序设计
课程名称 嵌入式系统B
班级学号
名 姓
开课时间 2013/2014学年 第2学期
实验一 基于ADS开发环境的程序设计
一、 实验目的
1、学习ADS开发环境的使用;
2、学习和掌握ADS环境下的汇编语言及C语言程序设计; 3、学习和掌握汇编语言及C语言的混合编程方法。
二、 实验内容
1、编写和调试汇编语言程序;
2、编写和调试C语言程序;
3、编写和调试汇编语言及C语言的混合程序;
4、编写程序测试多寄存器传送指令的用法。
三、 实验原理
ADS全称为ARM Developer Suite,是ARM公司推出的新一代ARM集成开发工具。它用于无操作系统的ARM系统开发,是对裸机(可以理解成一个高级单片机)的开发。ADS有极佳的测试环境和良好的侦错功能,它可使硬件开发者更深入地从底层去理解ARM处理器的工作原理和操作方法,为日后自行设计打基础,为BootLoader的编写和调试打基础。
其中的开发环境由CodeWarrior IDE和AXD IDE组成,前者用于提供一个简单通用的图形化用户界面用于管理软件开发
项目,后者AXD通常用于调试,默认打开的目标是ARMulator,这是调试时最常用的一种调试工具。
这部分开发过程分成以下几个步骤:
1、在CodeWorrior IDE下新建一个Project;
2、再新建一个Files用于写代码,后缀可以区分是C代码或者是汇编代码;
3、将编好的代码保存并添加进项目,并进行必要的DebugRel Settings设置;
4、用make命令对项目进行编译和链接;
5、将生成的映像文件(工程名.axf)用AXD IDE打开,进行调试。
四、 实验过程与关键代码分析
实验过程:
1、新建名为q11010320的项目;
2、编写汇编程序并添加至项目,汇编程序编了一个阶乘的程序,将在后面进行汇编语言和C语言混合编程中用到; 3、编写C语言程序并添加至项目,程序通过调用汇编程序实现输出1~+2~+3~+......+10!的结果,见下截图;
4、进行DebugRel Settings的设置,并使用make对项目进行编译和链接;
5、用AXD打开make生成的映像文件(q11010320.axf),进行调试并且得出正确结果,见下图。
关键代码:
C中:
extern int factorial(int n);
int i,sum=0;
for(i=1;i<11;i++) {
sum+=factorial(i); }
汇编中:
factorials MOV R2,R0 ;R2当计数器
MOV R1,#1 ;初始化R1
MOV R3,#1 ;初始化R3
loop CMP R1,R2 ;确定阶乘次数
BHI over
MUL R0,R3,R1 ;一次乘法操作
MOV R3,R0 ;乘一次的结果给R3做下一次的乘项
ADD R1,R1,#1
B loop
over MOV PC,LR
END
五、实验小结
通过这次实验熟悉了ADS开发环境的使用以及CodeWarrior
IDE和AXD IDE软件的操作,掌握了在ADS环境下的汇编语言及C语言程序设计的方法,同时在机器上跑了自己写的代码,发现理论和实际还是有差距,一点很小的问
题
快递公司问题件快递公司问题件货款处理关于圆的周长面积重点题型关于解方程组的题及答案关于南海问题
就使得代码无法成功编译,比如循环操作的loop和over必须定格写,开始没有注意这个,代码就一直编译出错,后来改正后就成功得到了结果,这让我体会到细节的重要性。
实验二 嵌入式Linux交叉开发环境的建立 一、实验目的
1、掌握嵌入式Linux交叉开发环境的建立方法
2、学习和掌握Linux常用命令
3、学习和掌握vi编辑器的使用
二、实验内容
1、搭建嵌入式Linux交叉开发环境
2、熟悉Linux的常用命令
3、熟悉vi编辑器的常用命令
三、实验原理
在嵌入式系统开发时,由于嵌入式目标系统的资源有限,无法建立复杂的开发平台,所以通常将开发平台与运行平台分开。开发平台建立在硬件资源丰富的PC或工作站上,成为宿主机。应用程序的编辑、编译、链接等过程在宿主机上完成,得到可执行文件。应用程序的最终运行平台是和宿主机有很大的差别的嵌入式设备。
四、实验过程与关键代码分析
1、宿主机的环境搭建
实验中在Windows系统上安装VMWare虚拟机,再在虚拟机上安装REDHAT-Linux操作系统。
2、虚拟机中启动Linux操作系统
登陆操作系统,用户名root,密码12345678,这时的开发主
机就是一个具有双操作系统的机器,对文件和目录的大部分操作可以在熟悉的windows系统下完成,只有代码生成等和Linux系统直接相关的工作才必须在Linux下完成。
3、开发工具软件的安装
在宿主机上需要建立适合于目标机的交叉编译环境。交叉编译环境的建立最重要的就是要有一个交叉编译器。本次实验用到的编译器是arm-gcc,它是GCC的ARM改版。GCC工具链中通
Binutils中主要常包含GNU Binutils,GNU GCC,GNU Glibc。
包含链接器ld和汇编器as。GNU Glibc提供了一个C库,使得系统能完成基本的系统调用及其他的一些函数调用。
(1)安装gcc
(2)配置PATH路径
4、宿主机上的开发环境配置
(1)配置IP地址
以太网常规配置
以太网路由设置界面
(2)配置NFS以及相关设置
配置好的NFS
至此,交叉开发环境的主机部分配置完成。 5、Linux的常用命令
(1)文件和目录操作
cd /home 进入 '/ home' 目录'
cd .. 返回上一级目录
cd ../.. 返回上两级目录
cd 进入个人的主目录
cd - 返回上次所在的目录
pwd 显示工作路径
ls 查看目录中的文件
ls -a 显示隐藏文件
tree 显示文件和目录由根目录开始的树形结构(1)
lstree 显示文件和目录由根目录开始的树形结构(2) 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)磁盘管理命令
mount /dev/hda2 /mnt/hda2 挂载一个叫做hda2的盘 - 确定目录 '/ mnt/hda2' 已经存在
umount /dev/hda2 卸载一个叫做hda2的盘 - 先从挂载点 '/ mnt/hda2' 退出
fuser -km /mnt/hda2 当设备繁忙时强制卸载
umount -n /mnt/hda2 运行卸载操作而不写入 /etc/mtab 文件- 当文件为只读或当磁盘写满时非常有用
mount /dev/fd0 /mnt/floppy 挂载一个软盘
mount /dev/cdrom /mnt/cdrom 挂载一个cdrom或dvdrom mount /dev/hdc /mnt/cdrecorder 挂载一个cdrw或dvdrom mount /dev/hdb /mnt/cdrecorder 挂载一个cdrw或dvdrom 5、vi编辑器
(1)工作模式和基本操作
Vi是命令行编辑器,有3种工作模式:命令模式、插入模式和编辑模式。
命令模式是vi的默认模式,进入vi时,会首先进入命令模式(同时也是编辑模式)。在该模式下可以键入命令来删除、更改、移动文本、定位光标、搜索文本字符串或退出vi编辑器。在命令模式下,所有命令都要以“:”开始,所键入的字符系统均作命令来处理,如“:q”代表退出,“:w”表示存盘。
键入i,进入插入模式,这时输入的所有可视字符都添加到文件中,显示在屏幕上。按Esc可回到编辑模式。
编辑模式和命令模式类似,都是要输入命令,但它的命令不要以“:”开始,它直接 接受键盘输入的单字符或组合字符命令,如直接按下u就表示取消上一次对文件的修改,相当于windows下的undo操作。编辑模式下有一些命令是要以“/”开始的,如查找字符串string,就输入/string则在文件中匹配查找string字符,在编辑模式下按“:”就进入命令模式。
(2)vi的常用命令
H:光标左移一个字符;
K:光标上移一行;
J:光标下移一行;
Ctrl+b:向文件首翻一页;
Ctrl+f:向文件尾翻一页;
Ctrl+u:向文件首翻半页;
Ctrl+d:向文件尾翻半页;
G:移动到文章的最后;
u:取消上一次操作;
五、实验小结
通过这次实验,我掌握了嵌入式Linux交叉开发环境的建立方法,同时熟悉了Linux的一些常用命令,掌握了vi编辑器的使用方法。通过实际操作,对嵌入式Linux有了更好的理解,同时将课本上所学到的知识用到了实处,对知识的掌握和理解也上了一个台阶,对我帮助很大。
实验三 嵌入式Linux环境下的程序设计 一、实验目的
1、掌握嵌入式Linux环境下的程序设计方法 2、学习Makefile文件的编写
二、实验内容
1、熟悉嵌入式教学实验箱的使用
2、编写C程序和Makefile文件
3、编译程序产生可执行程序
4、完成主机的挂载和程序的执行
三、实验原理及步骤
实验分成以下几个部分:
1、建立工作目录
2、编写程序源程序
3、编写makefile
4、编译应用程序
5、下载调试
四、实验过程与关键代码分析
1、建立工作目录
[root@localhost root]# mkdir hello
[root@localhost root]# cd hello
2、编写程序源代码
用下面的命令来编写hello.c的源代码,进入hello目录使用
vi命令来编辑代码:
[root@localhost hello]# vi hello.c
按“i”进入编辑模式,将上面的代码录入进去,完成后按Esc 键进入命令状态,再用命令“:wq!”保存并退出。这样我们便在当前目录下建立了一个名为hello.c的文件。
hello.c源程序:
,include
int main() {
char name[20];
scanf(“%s”,name);
printf(“hello %s”,name);
return 0;
}
3、编写Makefile
要使上面的hello.c程序能够运行,必须要编写一个Makefile文件,Makefile文件定义了一系列的规则,它指明了哪些文件需要编译,哪些文件需要先编译,哪些文件需要重新编译等等更为复杂的命令。使用它带来的好处就是自动编译,只需要敲一个“make”命令整个工程就可以实现自动编译。
Makefile源程序:
CC= armv4l-unknown-linux-gcc EXEC = hello
OBJS = hello.o
CFLAGS +=
LDFLAGS+= –static
all: $(EXEC)
$(EXEC): $(OBJS)
$(CC) $(LDFLAGS) -o $@ $(OBJS) clean:
-rm -f $(EXEC) *.elf *.gdb *.o Makefile 文件的几个主要部分:
CC 指明编译器
EXEC 表示编译后生成的执行文件名称
OBJS 目标文件列表
CFLAGS 编译参数
LDFLAGS 连接参数
all: 编译主入口
clean: 清除编译结果
注:“$(CC) $(LDFLAGS) -o $@ $(OBJS)”和“-rm -f $(EXEC) *.elf
*.gdb *.o”前空白由一个Tab 制表符生成,不能单纯由空格来代替。
与上面编写 hello.c的过程类似,用vi来创建一个Makefile文件并将代码录入其中。
[root@localhost hello]# vi Makefile
4、编译应用程序
在上面的步骤完成后,在hello 目录下运行“make”来编译程序。如果进行了修改,重新编译则运行:
[root@localhost hello]# make clean//编译应用程序
[root@localhost hello]# make//下载调试
注意:编译、修改程序都是在宿主机(本地PC 机)上进行,不能在超级终端下进行。
5、下载调试
在宿主PC计算机上启动NFS服务,并设置好共享的目录,(这里将刚生成的根目录/arm2410cl作为共享目录)具体配置参照前面第一章第四节中关于嵌入式Linux 环境开发环境的建立。在建立好NFS共享目录以后,就可以进入超级终端中建立开发板与宿主PC机之间的通讯了。
[/mnt/yaffs] mount -t nfs -o nolock 192.168.0.56:/arm2410cl /host //
超级终端中执行。
把编译生成的可执行文件复制到该文件夹下,并通过超级终端挂载到开发板上。
[root@localhost hello]# cp hello /root/share //虚拟机中 [/mnt/yaffs] mount -t nfs -o nolock 192.168.0.56:/root/share /host //
超级终端中
再进入/host目录运行刚刚编译好的hello程序,查看运行结果。 [/mnt/yaffs] cd /host //超级终端中
[/host] ./hello
hello world
(1)在PC计算机上启动NFS 服务,并设置好共享的目录。 启动 Red Hat Linux –>点击“主菜单”->选择“系统设置”->“服务器设置”->“NFS服务器”->“增加”->“基本”下:点击“浏览”选择“/”下的“arm2410cl/”;“确定”;“主机:192.168.0.* ”;“基本权限”选择“读/写”;“确定”。->“常规选项”下:选择:“允许来自高于1024的端口的连接”,其他不选;确定。
(2)在建立好NFS共享目录以后,进入minicom 中建立开发板与宿主PC机之间的通讯
新建终端
[root@localhost root]# minicom//服务器
新建终端
[root@localhost root]#ifconfig eth0 192.168.0.10 //设置主机地址 [root@localhost root]#ifconfig //查看地址
在服务器下:
[/mnt/yaffs] mount -t nfs –o nolock 192.168.0.56:/arm2410cl
/var
6、实验截图
7、测试结果
测试挂载成功,用mplayer xyz.avi命令播放视频
[root@localhost /]#cd /mnt/yaffs/mm [root@localhost /]#mplayer xyz.avi 五、实验小结
通过本次实验,熟悉了Linux开发环境,学会了基于S3C2410的Linux开发环境的配置和使用。实验中创建了一个新目录,并在其中编写hello.c和Makefile文件。学会了在Linux下的编程和编译过程,ARM开发板的使用和开发环境的设置,以及下载已经编译好的文件到目标开发板上运行。同时还学会了使用
Linux的armv4l-linux-gcc编译和基于NFS方式的下载调试,整体上对嵌入式开发的基本过程有了一个了解,对学习有很大帮助。