《交叉开发环境(54页)》由会员分享,可在线阅读,更多相关《交叉开发环境(54页)(54页珍藏版)》请在金锄头文库上搜索。
1、 第4章交叉开发环境 4 1交叉编译4 2交叉开发环境4 3交叉开发工具组成4 4宿主机与目标机之间的通信方式4 5交叉开发环境建立4 6基于UP NETARM2410 S开发平台交叉开发环境建立4 7交叉编译和交叉调试实例本章小结 4 1交叉编译交叉编译这个概念的出现和流行是和嵌入式系统的广泛发展同步的 常用的计算机软件都需要通过编译的方式 把使用高级计算机语言编写的代码 比如C代码 编译成计算机可以识别和执行的二进制代码 比如在Windows平台上 可使用VisualC 开发环境编写程序并编译成可执行程序 这种方式下 我们使用PC平台上的Windows工具开发针对Windows本身的可执行
2、程序 这种编译过程称为本机编译 然而 在进行嵌入式系统的开发时 运行程序的目标平台通常具有有限的存储空间和运算能力等 例如常见的ARM平台 其一般的静态存储空间大概是16 32MB 而CPU的主频大概在100 500MHz之间 这种情况下 在 ARM平台上进行本机编译就不太可能了 这是因为一般的编译工具链 compilationtoolchain 需要很大的存储空间 并需要很强的CPU运算能力 为了解决这个问题 交叉编译工具就应运而生了 通过交叉编译工具 我们就可以在CPU能力很强 存储空间足够的主机平台上 比如PC上 编译出针对其他目标平台的可执行程序 再下载到目标平台上的特定位置上运行 可
3、见 以这种方式开发嵌入式系统软件的过程需要相应的开发环境 于是就有了交叉开发环境的模式 即宿主机 目标机模式 4 2交叉开发环境在开发单片机系统时 需要使用一台主机外加操作系统 如Windows2000 再装上单片机厂商提供的开发软件 即开发环境 在开发环境里面编译程序 用鼠标单击 build 快捷键 即生成的可执行程序配合仿真器还可以进行单步调试 观察寄存器等 开发工具一般是IDE 集成开发环境 它集成了编译器 用于编译目标CPU识别的机器代码 编辑器 仿真调试器等诸多工具 如果用C语言编写程序 可能还包括相应的标准C库 宿主机 目标机开发模式就是在一个CPU上运行一个程序 另一个CPU编译
4、和调试程序 和它对应的是宿主机开发模式 就是在自己的CPU上编译和运行自己的程序 比如在PC机上用VC编译程序直接运行 因此 宿主机 目标机开发模式并不是一个新名词 交叉编译环境说明的问题和上面的一样 只是针对编译环境而言 这里的环境包括目标CPU的编译器和库文件等 至于为什么叫交叉编译 同样是因为运行编译程序的CPU不是在为自己工作 而是在编译另一个CPU的程序 这样说来 以上例子中的编译环境同样属于一个交叉编译环境 在PC机上编译单片机程序 只不过都被IDE集成好了 综上所述 编译 链接和调试嵌入式应用软件的环境 它与运行嵌入式应用软件的环境有所不同 这样的环境称为交叉开发环境 Cross
5、DevelopmentEnvironment 需要交叉开发环境的支持是嵌入式软件开发时的一个显著特点 交叉开发环境模式一般如图4 1所示 图4 1交叉开发环境模式 宿主机 Host 是一台通用计算机 如PC机或者工作站 功能较强 各种Linux发行版本可以直接在PC机上安装 功能十分强大 它不仅能够支持各种处理器和外围设备接口 而且提供了图形化的用户交互界面和丰富的开发环境 更重要的是Linux系统性能稳定 它为开发者提供了以下功能 非常稳定的多任务操作系统 丰富的设备驱动程序支持和网络工具 强大的Shell 本地编译器 编辑器 图形化的用户界面 4 3交叉开发工具组成1 交叉编译器和交叉链接
6、器在完成嵌入式软件的编码之后 需要进行编译和链接 以生成可执行代码 由于开发过程大多是在使用Intel公司x86系列CPU的通用计算机上进行的 而目标环境的处理器芯片却大多为ARM MIPS PowerPC DragonBall等系列的微处理器 这就要求在建立好的交叉开发环境中进行交叉编译和链接 交叉编译器和交叉链接器是能够在宿主机上运行 并且能够生成在目标机上直接运行的二进制代码的编译器和链接器 例如在基于ARM体系结构的交叉开发环境中 arm linux gcc是交叉编译器 arm linux ld是交叉链接器 2 交叉调试器和系统仿真器嵌入式软件经过编译和链接后即进入调试阶段 嵌入式软件
7、开发过程中的交叉调试与通用软件开发过程中的调试方式有所差别 在通用软件开发中 调试器与被调试的程序往往运行在同一台计算机上 调试器是一个单独运行着的进程 它通过操作系统提供的调试接口来控制被调试的进程 在嵌入式软件开发中 调试时采用的是在宿主机和目标机之间进行的交叉调试 调试器仍然运行在宿主机的通用操作系统之上 但被调试的进程却是运行在基于特定硬件平台的嵌入式操作系统中 调试器和被调试进程通过串口或者 网络进行通信 调试器可以控制 访问被调试进程 读取被调试进程的当前状态 并能够改变被调试进程的运行状态 交叉调试 CrossDebug 又常常被称为远程调试 RemoteDebug 是一种允许调
8、试器以某种方式控制目标机上被调试进程的运行方式 并具有查看和修改目标机上内存单元 寄存器以及被调试进程中变量值等各种调试功能的调试方式 一般而言 远程调试过程的结构如图4 2所示 图4 2远程调试结构图 由上可知交叉调试典型特点如下 1 调试器和被调试进程运行在不同的机器上 调试器运行在PC或者工作站上 宿主机 而被调试的进程则运行在各种专业调试板上 目标机 2 调试器通过某种通信方式与被调试进程建立联系 如串口 并口 网络 DBM JTAG或者专用的通信方式 3 在目标机上一般会具备某种形式的调试代理 它负责与调试器共同配合完成对目标机上运行着的进程的调试 这种调试代理可能是某些支持调试功能
9、的硬件设备 如DBI2000 也可能是某些专门的调试软件 如gdbserver 4 目标机可能是某种形式的系统仿真器 通过在宿主机上运行目标机的仿真软件 整个调试过程可以在一台计算机上运行 此时物理上虽然只有一台计算机 但逻辑上仍然存在着宿主机和目标机的区别 4 4宿主机与目标机之间的通信方式4 4 1互联通信方式1 串口通过串口可以作为控制台 向目标机发送命令 显示信息 也可以通过串口传送文件 还可以通过串口调试内核及程序 串口的设备驱动实现也比较简单 2 以太网口以太网以其高度灵活 相对简单 易于实现的特点 成为当今最重要的一种局域网建网技术 以太网IEEE802 3通常使用专门的网络接口
10、卡或通过系统主电路板上的电路实现 以太网使用收发器与网络媒体进行连接 收发器可以完成多 种物理层功能 其中包括对网络碰撞进行检测 收发器可以作为独立的设备通过电缆与终端站连接 也可以直接被集成到终端站的网卡当中 以太网可采用广播机制 所有与网络连接的工作站都可以看到网络上传递的数据 通过查看包含在帧中的目标地址 确定是否进行接收或放弃 如果证明数据确实是发给自己的 工作站将会接收数据并传递给高层协议进行处理 网络接口一般采用RJ 45标准插头 PC机上一般都配置10M 100M以太网卡 实现局域网连接 通过以太网连接和网络协议 可以实现快速的数据通讯和文件传输 另外 目标机也可以利用远程组件来
11、促进开发 比如内核可以通过TFTP协议下载到目标机 根文件系统 rootfs 也可以通过NFS加载来代替存储在目标机上 利用NFS加载根文件系统实际上是一件非常好的事情 因为它避免了频繁的复制程序修改 3 JTAG口JTAG技术是一种嵌入式调试技术 它在芯片内部封装了专门的测试电路测试接口 TAP TestAccessPort 通过JTAG测试工具对芯片的核进行测试 它是联合测试行动小组 JTAG JointTestActionGroup 定义的一种国际标准测试协议 主要用于芯片内部测试及对系统进行仿真 调试 目前大多数比较复杂的器件都支持JTAG协议 如ARM DSP FPGA器件等 标准的
12、JTAG接口是4线 TMS TCK TDI和TDO 分别为测试模式选择 测试时钟 测试数据输入和测试数据输出 因为JTAG接口的时钟一般在1 16MHz之间 所以传输速率可以很快 但是实际的数据传输速度要取决于仿真器与主机端的通讯速度和传输软件 4 4 2可拔插通信方式在这种模式下 在宿主机和目标机之间没有实际的物理连接 而是主机写存储设备 如软盘 CDROM USB盘等移动存储介质 然后再传给目标机 最后目标机启动它 在这种模式下 宿主机包括了交叉编译环境 而目标机只包括了一个小型的启动文件 其他的组件存储在一个可移动的 可以被宿主机编程的 同时又可以被目标机启动的存储介质上 比如Compa
13、ctFlashIDE设备 或者其他类型的驱动 有可能目标机不包括任何一种可永久存储数据的设备 举例来说 代替了固定存储设备到目标机上 目标机只包括了一个接口 闪存芯片可以很轻易的插入和移开 这个闪存芯片同时需满足可以很轻易的被一个宿主机上闪存烧写器编程 并且轻易的在目标机的接口上进行一般的实验 这种模式在嵌入式系统开发的最初阶段非常流行 当然 当最初阶段结束以后 也可能发现互连模型应用更好 因此 当修改了内核或者根文件系统以后 可以避免从宿主机和目标机之间传递存储设备 4 5交叉开发环境建立4 5 1创建交叉开发工具链交叉开发工具链包括交叉编译器 交叉连接器和交叉调试器 这些交叉开发工具链是嵌
14、入式系统开发的必备工具 它是要安装在宿主机 PC 上的 对于它的创建有三种途径 第一种是下载别人已做好的工具链 当然这是最省事的方法 第二种是到官方网站上下载crosstool 第三种是自己一步一步制作自己的交叉开发工具链 这是最有趣的 也是最能体现自己能力的方式 本章所使用的交叉开发工具链是前面两种 其中 第一种交叉开发工具链是UP NETARM2410 S开发平台的北京博创公司所提供的 4 5 2宿主机开发环境配置1 宿主机安装发行版Linux操作系统宿主机安装发行版Linux操作系统有以下三个方案 1 基于PC机Windows操作系统下的CYGWIN 2 在Windows下安装虚拟机后
15、再在虚拟机中安装Linux操作系统 3 直接安装Linux操作系统 安装方案的选择不同 主要依据PC机的系统配置 对于当前的PC机配置 建议选择在虚拟机下安装Linux操作系统 这样便于系统任务的切换 对于它的安装方法可参见本教材2 1节 如果选择RedHat9 0 它安装后占用空间约为2 4 5GB之间 还要安装ARMLinux开发软件 对开发计算机的硬盘空间要求较大 硬件要求如下 CPU 高于奔腾500MB 推荐高于赛扬1 7GB 内存 大于128MB 推荐256MB 硬盘 大于10GB 推荐高于40GB 2 开发工具链的安装开发工具链的第一种来源 安装较简单 一般运行安装光盘的可执行文件
16、 install即可 这相当于在Windows运行可执行文件setup 开发工具链的第二种来源 下载的工具链有不同的包装格式 RPM的格式就很常用 也有把工具链直接压缩成tar包的 对于RPM的格式 可以通过rpm命令把软件包安装到宿主机上 可是这些工具安装到哪里去了呢 RPM包安装的时候都会有缺省的安装目录 可以通过rpm命令来查询 这个命令是RedhatLinux上的常用命令 可以参考第2章的内容 对于tar包 可以使用tar命令解压 问题是解压出来的工具应该放在什么路径下 因为GCC编译器的运行是依赖于其他工具和库 通常不能把这些工具放在任意目录下 一般通过相关的README或者说明文档可以得到具体的安装路径 另外 通过gcc命令也可以得到安装的路径 以ARMLinux站点提供cross 3 3 2 tar bz2包为例说明 解压cross 3 3 2 tar bz2后 查看GCC版本号 可以得到一些信息 3 网络配置宿主机Linux环境配置 首先要确认宿主机的网络接口驱动成功 并且配置网络接口的IP地址 可以通过ifconfig命令查看其网络接口 还可以通过ifconfig配置