1 GECMlO开发板硬件构成
ARM处理器是一种支持16/32位双指令集的高性能、低成本、低功耗的R ISC微处理器,目前已经占领了75%以I:的32位RISC嵌入式产品f仃场。本文所选用的ARM920T微处理器属于中端产品,应用也十分广泛。$3C2410是32位低功耗RISC宏单元,其工作频率为203 MHz,同时支持Thumbl6位精。简指令集,从而能以较小的存储空间需求,获得32位的系统性能。64M字节的SDRAM,由两片K4S561632组成,工作在32位模式下;64M字节NAND Flash,采用的是K9F1208,可以兼容16M,32M或128M字节;10M以太网接口,采用的是CS8900Q3,带传输和连接指示灯;2路UART串行口,波特率可高达115200bps,并具有RS232电乎转换电路Embedded·ICE(20脚标准JTAG)接口和并口式jTAG接口,支持ADS,SDT软件的卜.载和调试以及FLASH的烧写。
2 嵌入式Linux开发环境的搭建及开发工具的使用
2.1宿主机——目标机模式
进行项目开发前,先要做的是搭建一套基于Linux操作系统的应用开发环境,一般由目标板(GEC2410开发板)和宿主机(LiUUX虚拟机)所构成。如图1所示。嵌入式系统通常是一个资源受限的系统,因此直接在嵌入式系统的硬件平台上编写软件比较困难,有时候甚拿是不可能的.目前一般采用的解决办法是首先在通用计算机上编写程序,然后通过交叉编译生成目标平台七可以运行的二进制代码格式,最后再下载到目标平台上的特定位置.卜运行.用来编译这种程序的编译器就叫交叉编译器。为了不跟本地编译器混淆,交叉编泽器的名字一般都有前缀。例如:arm.1inux—gcc。交叉开发环境是指编译、链接和调试嵌入式应用软件的环境,它与运行嵌入式应用软件的环境有所不同,通常采用宿主机/目标机模式。
2.2 Linux服务器交叉编译环境的建立
Linux服务器是嵌入式Linux内核编译、应用程序开发、编译等的公共平台,在一个嵌入式系统的开发过程中,有许多工作需要通过它来完成。交叉编译工具用于编译在目标系统上运行的嵌入式Linux内核及应用程序,包括编译器、连接器、调试器以及代码转换J二具等实用程序,一般以瓜缩软件包的方式提供给我们,称为开发工具链(Toolchain).目前基于ARM架构的交叉编泽工具链为:allll-liuux.gcc-2.95.3。
1)GNU交叉工具链的下载
从ARM官方网站F载删.arm.tinux.org.ak,可以从该站点下载2.95.3工具链:
ftp://tip.arm.Iinux.org.uk/pub/armlinux/toolehain/cross-2.95.3.tar.bz2
2)cross-2.95.3.tar.bz2包的安装步骤
a.#mkdir/mr/local/arm;
b.#cp CROSS一2.95.3.tar.bz2/usr/local/ann;
C.#tar jxvf crog$一2.95.3.tar.bz2;
d.添加环境变量:在文{牛/ete/bashrc文件最后添加:
export PATH=/usr/local/arm/2.95.3/bin:$PATH:
e.工具链安装完成。
2.3配置NFS服务的步骤
NFS服务就是将宿主机的一个目录通过网络可以被挂载到其他计算机上。并且作为其他计算机的一个目录,其目的就是让不同的机器、不同的操作系统之间可以彼此共享文件。
NFS的使用分服务器端和客户端,其中服务器端提供要共享的文件,客户端通过挂载“mount”这一动作实现对共享文件的访问操作。下面主要介绍GEC24 10开发板的Linux系统与虚拟机的LintLx通过NFS实现文件共享的方法与步骤:
1)在虚拟机linux配置nfs服务,编辑nfs配置文件/etdexports,设置共享目录如:vi/etc/exports,添加:/root/nfs—share·(rw,sync,no—root—squash)。rW表示允许下位机读写该目录,no_root_squash允许下位机以主机root用户身份挂载根文件系统。
2)在虚拟机linux启动NFS服务:(修改配置文件后就需要蕈新启动施服务)#/etc/init.d/nfs reSTart或者用命令:#service nfs restarto.
3)防火墙的关闭。选择系统设置一》安全级别,将安全级别改为“无防火墙”。
4)用交叉网线连接PC机(虚拟机)与开发板,目的让两个linux处在同一个网络内。
开发板的ip地址是:192.168.2.223,因此配置虚拟机ip为192.168.2开头的ip地址,如可用下列命令配置:#ifcONfigethO 192.168.2.23。
5)在开发板linux系统中挂载虚拟机linux的NFS共享目录,执行下列命令:#mkdir/tmp/nfs#mount—t nfs一0 nolock192.168.2.23:/root/nfs—share/trap/nfs。
2.4交叉调试器的制作
2.4.1交叉调试器的结构
程序的调试足检杏程序正确性、可靠性、稳定性的重要手段,也是应用程序开发必不可少的组成部分。嵌入式软件开发过程中的交叉调试与本地软件开发过程中的调试方式有所差别。本地软件开发调试器与被调试的程序往往运行在同一台计算机}:。而嵌入式软件开发过程中,调试时采用的是在宿主机和目标机之间进行的交叉调试。调试器运行在宿主机,但被调试的进程却是运行在目标板。调试器和被调试进程通过串口或者网络进行通信,调试器可以控制、访问被调试进程,读取被调试进程的当前状态,并能够改变被调试进程的运行状态。
2.4.2制作交叉调试器的方法
1)解压源码包:tar zxf gdb一6.0.tar.gz
2)配置:cd gdb一6.0
mkdir build..arm..1inux
cd build..arm..1inux
../configure--target=arm·linux一一prefix=/usr/local/arm/2.95.3/
3)编译:make
4)安装:make install
在/usr/locaL/arm/2.95.3/bin/目录下生成alTfl-linuxgdb工具
5)编译生成针对f1.Eln处理器的gdbserver
a.进入sdb源代码包中的gdb$erver目录
cd sdb-6.0
cd gdb/gdbserver
b.配置生成gdbserver
chmod U+X configure
CC=arnl—linux—gcc./configure一一host=arm-linux
c.Make,生成gdbserver、gdbreplay
6)通过凼,将gdbserver/gdbreplay到目标板中
7)启动目标板上的gdbserversabserver 192.168.1.88:2345 cross-teat其中192.168.1.88是目标板的IP地址。2345是任意指定的端口,也可以是其他端口。
8)启动宿主机端arm.1inux-gdb调试器在宿主机的工作目录中有对应的程序和源文件
#arm·hnux-柚CI‘OS8一teat
(gdb)target remote 192.168.1.88:2345
连接远程gdbserver
(sab)b main
设置断点
(Sdb)C运行
⑵ linux开发嵌入式系统要装什么工具
嵌入式系统通常为一个资源受限的系统。直接在嵌入式系统的硬件平台上编写软件比较困难,有时甚至是不可能的。目前,败告一般采用的办法是,先在通用计算机上编写程序,然后,通过交叉编译,生成目标平台上可运行的二进制代码格式,最后下载到目标平台上的特定位置上运行,下面就由福州卓跃教育做具体步骤介绍。
第一步,建立嵌入式Linux应用开发环境。目前,常用的交叉开发环境主要有开放和商业两种类型。开放的交叉开发环境的典型代表是GNU工具链,目前已经能够支持x86、ARM、MIPS、PowerPC等多种处理器。商业的交叉开发环境主要有MetrowerksCodeWarrior、ARMSoftwareDevelopmentToolkit、SDSCrosscompiler、WindRiverTornado、MicrosoftEmbeddedVisualC等。交叉开发环境是指丛哗编译、链接和调试嵌入式应用软件的环境。它与运行嵌入式应用软件的环境有所不同,通常采用宿主机/目标机模式。
第二步,交叉编译和链接。在完成嵌入式软件的编码之后,就是进行编译和链接,以生成可执行代码。由于开发过程大多是在Intel公司x86系列CPU的通用计算机上进行的,而目标环境的处理器芯片却大多为ARM、MIPS、PowerPC、DragonBall等系列的微处理器,察郑明这就要求在建立好的交叉开发环境中进行交叉编译和链接。
第三步,交叉调试。
①硬件调试。如果不采用在线仿真器,可以让CPU直接在其内部实现调试功能,并通过在开发板上引出的调试端口,发送调试命令和接收调试信息,完成调试过程。目前,Motorola公司提供的开发板上使用的是DBM调试端口,而ARM公司提供的开发板上使用的则是JTAG调试端口。使用合适的软件工具与这些调试端口进行连接,可以获得与ICE类似的调试效果。
②软件调试。在嵌入式Linux应用开发系统中,Linux系统内核调试,可以先在Linux内核中设置一个调试桩(debugstub),用作调试过程中和宿主机之间的通信服务器。然后,可以在宿主机中通过调试器的串口与调试桩进行通信,并通过调试器控制目标机上Linux内核的运行。
⑶ arm-linux 交叉开发工具链
gcc-2.95.3太老了, 新的gcc编译器不支持它的源码。
你可以:
1,建立gcc-3.4以前的本地工具链编译版gcc-2.95.3
2,用新的版本的gcc制作交权叉编译工具。
3,或者你可以修改2.95.3的源码让它可以通过编译。
_
看你现在用的gcc是什么版本, 建议最低不要低于3.4. 另外, gcc到底用什么版本和你的binutils , glibc的版本有关, 要不会有问题。