ARM之嵌入式Linux基本应用程序编写实验
实验目的:
1. 熟悉JXARM9-2440教学系统中的Linux开发环境;
2. 掌握简单的Linux应用程序helloworld的编译;
3. 掌握JXARM9-2440教学系统中Linux应用程序的调试。
实验内容:
1. 编写helloworld应用程序;
2. 编写Makefile文件;
3. 编译helloworld应用程序;
4. 下载并运行helloworld应用程序。
实验要求:
1 Makefile文件内容、并简要说明的作用;
2.给出关键的实验步骤, 简述JXARM9-2440中怎样将编写的应用程序下载到Linux中,怎样在Linux中运行该程序?
实验步骤:
1. Linux移植:将zImage文件重命名为zImage-30,将ramdisk.gz文件重命名为ramdisk-qt.gz,然后将Linux移植到目标机。
2. 烧录:通过超级终端先后运行run burnlinuxzImage命令以及run burnlinuxramdisk命令将Linux烧录到目标机。
3. 进入工作目录:(注:”$”符号表示在主机的Linux控制台输入的命令行,”#”符号表示在目标机的Linux控制台上输入的命令行)
$cd /home/cvtech/jx2440/examples/helloworld
4. 编辑程序源代码helloworld.c:
#include
int main(){
printf(“Hello World!\n”);
}
5. 在主机端编译运行helloworld程序:
$gcc -o helloworld helloworld.c
$./helloworld
6. 编译在目标机运行的helloworld程序:
$arm-linux-gcc -o helloworld helloworld.c
如果在x86平台运行helloworld,出现错误
$./helloworld
Bash: ./helloworld: cannot execute binary file
7. 下载helloworld程序到目标机并运行:
将helloworld程序拷贝到主机的tftpboot目录下
$cp helloworld /tftpboot/
在超级终端输入如下命令将主机端/tftpboot/目录挂载到/mnt/nfs/目录下
#mount 192.168.1.180:/tftpboot/ /mnt/nfs -o nolock
运行
#cd /mnt/nfs/
#./helloworld
8. 在helloworld目录下编写Makefile文件:
# $@ 扩展成当前规则的目的文件名
# $< 扩展成依靠列表中的第一个依靠文件
# $^ 扩展成整个依靠的列表
CC = arm-linux-gcc#编译器
LD = arm-linux-ld#链接器
EXEC = helloworld
OBJS = helloworld.o
CFLAGS +=#编译参数
LDFLAGS +=#链接参数
$(EXEC): $(OBJS)
$(CC) $(LDFLAGS) -o $@ $(OBJS) $(LDLIBS$(LDLIBS_$@))
cp $(EXEC) /tftpboot/
%.o:%.c
$(CC) -c -o $@ $<
clean:
-rm -f $(EXEC) *.elf *.gdb *.o
使用make进行编译
Arm平台
$make clean
$make
arm-linux-gcc -c -o helloworld.o helloworld.c
arm-linux-gcc -o helloworld helloworld.o
X86平台
$make clean
$make
gcc -c -o helloworld.o helloworld.c
gcc -o helloworld helloworld.o
9. 通过Makefile文件编译helloworld程序,并在目标机运行:
$cd /home/cvtech/jx2440/examples/helloworld
$make
重复步骤7
实验结果:
在超级终端上看到hello world!字符串被打印出来
实验总结:
wq:本次实验为:嵌入式linux基本应用程序的编写。1.0版本:自己写了一个普通的C程序,编译后再将其在目标机上运行。然后升级到2.0:用makefile文件,通过make命令实现目标程序自动编译链接生成可执行文件再运行在目标机上。而且这一次我们组还实现了linux的烧录,用到了burn命令,使其永久存储到了目标机。以前都是移植到内存中运行的。
zhy:这次实验我们比其他组多做了一个烧录过程,将Linux烧录到目标机,它的命令的来源是一个回忆史,尝试几次后,成功烧录,可在目标机开机后,按“7”即可运行Linux。这次实验的主要目的是应用程序在交叉编译的环境中运行。有两种方法,①直接用命令编译链接然后再在目标机中运行;②通过Makefile文件进行编译链接和执行。
cxy:以前使用过Makefile在Linux上编译运行过c程序。但是没有使用过Makefile进行交叉编译,在主机上编译c程序,再复制到目标机上运行。我们不仅把编译好的程序复制到目标机上的内存上运行。还使用了烧录的办法,使编译好的程序可以永久保存在目标机上。
lg:这次不但用命令方式和makefile方式编译执行基础应用程序,而且补充了烧录实验。之前书本中总是强调在软件开发中文档的重要性,原开发者若离去却没留下相关重要文档,后来的维护将会相当困难。而这次实验是确确实实感受到,百度搜索arm烧录命令,然而却搜不出想要的结果,后来是窦老师在武汉创维特遗留的文档中找到了烧录相关的描述,推导出来烧录命令。不然这遗留下来的烂摊子真的难收拾
yy:在这次实验过程中,我们先是完成了上一次实验未完成的步骤,即将linux烧录到目标机,然后分别尝试了在x86平台的Linux系统编译运行C程序,和在arm平台的目标机的linux系统运行C程序,体验了交叉编译,并且使用了Makefile文件来帮助编译执行C程序。