嵌入式开发环境的建立

时间:2022-06-26 08:54:22

原地址:http://blog.csdn.net/duwchy/article/details/1612878

 

在进行嵌入式3D等开发,必须有一台x86的PC机作为宿主机,  绝大多数的 Linux 软件开发都是以 native 方式进行的,即本机(HOST)开发、调试,本机运行的方式。这种方式通常不适合于嵌入式系统的软件开发,因为对于嵌入式系统的开发,没有足够的资源在本机(即开发板上系统)运行开发工具和调试工具。通常的嵌入式系统的软件开发采用一种交叉编译调试的方式。交叉编译调试环境建立在宿主机(即一台 PC 机)上,对应的开发板叫做目标板。  
开发时使用宿主机上的交叉编译、汇编及连接工具形成可执行的二进制代码,(这种可执行代码并不能在宿主机上执行,而只能在目标板上执行。 然后把可执  )行文件下载到目标机上运行。调试时的方法很多,可以使用串口,以太网口等,具体使用哪种调试方法可以根据目标机处理器所提供的支持作出选择。宿主机和目标板的处理器一般都不相同,宿主机为 Intel 或 AMD 处理器, 而目标板如HHPXA270 为 PXA270,GNU 编译器提供这样的功能,在编译编译器时可以选择开发所需的宿主机和目标机从而建立开发环境。所以在进行嵌入式开发前第一步的工作就是要安装一台装有指定操作系统的 PC 机作宿主开发机,由于我选择移植的嵌入式操作系统是linux,所以宿主机上的操作系统也跟这个保持一致,也是Linux,只不过它们所对应的计算机体系结构是不同的而已,一个是PXA270基于ARM的,一个是基于x86的。但 Linux 有多个发行版本, 而我选择的是国人自己开发的MagicLinux,是开源操作系统,对中文支持很好,系统小巧稳定,功能齐全,支持了一下我国的开源事业。然后在宿主机上要建立交叉编译调
试的开发环境。环境的建立需要许多的软件模块协同工作,这将是一个比较繁杂的工作。
宿主机操作系统选择安装好之后,我们需要做的是交叉编译工具链的安装,由于我们PC机上的CPU体系结构和开发板上的是完全不同的,一个是x86,一个是ARM,而开发板上又不可以对我们开发的程序进行编译链接,所以我们需要一种特殊的编译工具进行在PC机上进行编译,然后编译的程序可以拿到开发板上运行的,arm linux 交叉编译工具链可以帮我们这个忙,下面将介绍交叉编译工具的安装。另外嵌入式开发通常要求宿主机配置有网络,支持 NFS(为交叉开发调试程序时 mount 所
用),还要支持 TFTP 服务器(为下载烧写调试内核所用)等等,这个将在后面介绍。
1. ARM Linux交叉编译工具的安装。
ARM Linux 在网络上有许多开源的代码,也有为x86平台编译好的可执行文件,我下载的是 arm-unknown-linux 工具,GCC内部版本为2.95.2,下载工具包
armv4l-unknown-linux-gcc-2.95.2.tar.gz
直接解压安装到 /opt/host 目录就可以了
tar xzvf armv4l-unknown-linux-gcc-2.95.2.tar.gz -C /opt/host
在 /opt/host 就会有一个名为 armv4l 的目录,里面就有我们需要用到的交叉编译GCC工具,以后交叉编译工作都需要用到它。

2. 配置PC机的IP地址
由于板子u-boot(嵌入式的装载程序,后面将介绍)的tftp有默认的服务器IP地址,而我需要从PC机tftp服务器上下载烧写或者调试内核,所以我需要设置PC机的IP,执行下面命令:
ifconfig eth0 192.168.2.111
ifconfig eth0 broadcast 192.168.2.255
ifconfig eth0 netmask 255.255.255.0

3. 在PC机上配置NFS服务器
由于开发板上的flash空间有限,并且flash不可以频繁的刷新,而且开发板上ramdisk文件系统空间的限制得比较少,再有提供给3D开发的链接库比较大,而3D程序开发过程中测试调试次数和频繁,所以不可能每次都把程序烧到文件系统上进行调试,所以我们可以使用一种网络文件共享协议NFS(Network File System) ,把PC上的文件系统共享到开发板上的文件系统,开发板就可以把这个共享文件系统里的文件看成自己的文件。所以调试起来就很方便了。只有到了程序最终发布,才把程序烧写到开发板的flash上。下面是NFS服务器的配置过程。
3.1 以root的身份在控制台输入setup,在系统服务选项中选中[*]nfs  [*]portmap  服务选项
 portmap服务对NFS 是必须的,因为它是NFS 的动态端口分配守护进程,如果portmap不启动,NFS就启动不了的。如果Linux上系统服务上没有这个配置选项,可以到网上搜索一些相关的软件包。

3.2 编辑 /etc/exports 文件
exports文件是NFS的共享目录配置文件,主要是指定共享目录和共享策略。使用vi命令编辑,在文件中加入类似下面的内容:
/ *(rw,sync)
/root/share *(rw,sync)
第一条规则 / 表示整个根目录进行共享,* 表示对于所有用户共享,rw 可读写,sync 文件同步
第一条规则 /root/share 表示共享目录,当然你还可以类似的添加其他目录进行共享。后面的内容表示对ip为10.13.9.19的主机赋予读写权限,其他机器 * 仅有读写权限。

3.3 然后在控制台分别执行以下两条命令
[root]# service portmap restart
[root]# service nfs restart   或者   /etc/rc.d/init.d/nfs restart
如果看到一连串的[ok]时,表示已经启动成功了。如果第一次启动,nfs ,又使用restart命令,可能开始会出现一些[FAILED],那是在停止nfs服务,而nfs服务还没有启动所以会FAILED。

3.4 测试NFS服务
要测试NFS是否真正配置的成功,只要进行以下测试:
[root]# mout -t nfs  10.13.9.19:/root/share /mnt  #/mnt 是挂载到本地的服务
如果你在/mnt 下可以看到NFS共享目录的内容,表示你NFS设置成功了。
使用#umount  /mnt 取消挂载。
使用minicom(后面将介绍)超级终端通过串口控制嵌入式Linux系统,然后执行mount操作就可以挂载共享文件系统了,不过这里的mount操作跟PC机子上的mount有点不一样,在我使用的开发板上需要像下面这样:
mount -t nfs -o intr,nolock,rsize=1024,wsize=1024  192.168.2.111:/root/share /mnt
192.168.2.111是pc机子的ip,/mnt这个目录是我板上一个目录,“rsize=1024,wsize=1024 ”设置很重要,没设置对的时候,一运行Qt-embedded(嵌入式GUI系统,后面将介绍)程序就出现:
nfs: server ********* not responding, still trying.
的错误。只能用1024,其他都不行,应该是与网络系统的MTU有关。


4. 在PC机上配置TFTP服务器
TFTP是在烧写和调试嵌入式Linux内核时使用的,下面是配置过程
4.1 下载软件包
下载 tftp-server-0.43-1.i386.rpm和tftp-hpa-0.48.tar.gz(可能有更新版本的)两个包,一个是服务器,一个包含客户端。
4.2 安装tftp-server-0.43-1.i386.rpm 服务器
[root]# rpm -ivh --nodeps tftp-server-0.43-1.i386.rpm,此时根目录下会多一个tftpboot的目录,是tftp的共享目录
4.3 编译安装tftp-hpa-0.48.tar.gz
[root]# tar vxfz  tftp-hpa-0.48.tar.gz
[root]# cd tftp-hpa-0.48
[root]# make
[root]# make install
4.4 使用超级用户身份运行setup命令,在系统服务理选上tftp服务 [*]tftp
4.5 启动tftp服务器
[root]# service xinetd restart
看到启动[OK]就可以了
4.6 测试tftp
1).在终端输入命令
[root]# netstat -a | grep tftp
如果有相关的输出,就表明tftp配置成功了。
2).可以在tftpboot中放一些文件,然后使用tftp客户端命令连接服务器,然后用GET命令下载文件,如果下载成功,那么配置成功了。

Copyright (C) duwchy, Please give source when reprint.