嵌入式应用程序开发
实验目的:
1. 编写程序,用交叉工具链编译连接
2. 将嵌入式应用程序下载到开发板上执行
实验原理:
1. 嵌入式应用程序的开发一般都在宿主机平台上进行,利用交叉编译器编译,生成可以在目标平台上运行的可执行代码;本实验使用的交叉编译器是arm-linux-gcc;
2. 将已经生成的目标代码文件加入到嵌入式Linux系统的根文件系统中,再重新制作根文件系统映象下载到目标板上运行。
实验内容:
1. 在宿主机上编写应用程序testapp.c如下
l [root$pxa root]#vi testapp.c
#include
#include
int main()
{
char str[]=“Study embeded system application development!”;
printf(“This is the testapp:/n%s/n”,str);
return 0;
}
l 保存文件testapp.c,用arm-linux-gcc编译生成目标文件testapp
[root$pxa root]#arm-linux-gcc testapp.c -o testapp
2. 利用Busybox构造嵌入式Linux根文件系统
l 在嵌入式Linux中,Busybox是构造文件系统最常用的一个软件工具包,它将大量的工具集成到一个可执行文件中,如ls、cp、mount、ifconfig、vi等;
l 配置Busybox
l 编译和安装Busybox
l 构造根文件系统
Ø 创建顶层目录结构:[root$pxa _install]#mkdir etc dev proc tmp lib var sys bin
Ø 创建设备节点:如[root$pxa dev]# mknod ram0 b 1 0
Ø 创建inittab,inittab是init程序读取的配置文件;编辑 /etc/inittab文件如下:
::sysinit:/etc/init.d/rcS
::askfirst:/bin/sh
Ø 建立sysinit动作项执行的命令脚本
l 创建根文件系统映像文件,并将编译好的程序testapp加入
Ø [root$pxa root]#cp testapp /busybox/_install/bin/testapp
Ø [root$pxa busybox]#cd /busybox
Ø [root$pxa busybox]# mkdir initrd
Ø [root$pxa busybox]# cd initrd
Ø [root$pxa initrd]# dd if=/dev/zero of=initrd bs=1k count =2048
Ø [root$pxa initrd]# mkfs.ext2 initrd -F
Ø [root$pxa initrd]# mkdir mnt_initrd
Ø [root$pxa initrd]# mount initrd mnt_initrd -o loop
Ø [root$pxa initrd]# cp -a ../_install/* mnt_initrd
Ø [root$pxa initrd]# umount initrd
Ø [root$pxa initrd]# bzip2 -c9 initrd > initrd.bz2
3. 下载根文件映像到目标板上,系统启动后,执行testapp,minicom终端将打印输出信息“This is the testapp:
Study embeded system application development!”。
实验结论:
在嵌入式系统中,加入应用程序的过程并不是一件困难的事情,本实验演示了向嵌入式系统中加入应用程序的一般过程;实际应用中,可能会将已有的程序移植到嵌入式系统中,但是会牵涉到一些参数的设定。