




已阅读5页,还剩49页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第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本身的可执行程序 这种编译过程称为本机编译 然而 在进行嵌入式系统的开发时 运行程序的目标平台通常具有有限的存储空间和运算能力等 例如常见的ARM平台 其一般的静态存储空间大概是16 32MB 而CPU的主频大概在100 500MHz之间 这种情况下 在 ARM平台上进行本机编译就不太可能了 这是因为一般的编译工具链 compilationtoolchain 需要很大的存储空间 并需要很强的CPU运算能力 为了解决这个问题 交叉编译工具就应运而生了 通过交叉编译工具 我们就可以在CPU能力很强 存储空间足够的主机平台上 比如PC上 编译出针对其他目标平台的可执行程序 再下载到目标平台上的特定位置上运行 可见 以这种方式开发嵌入式系统软件的过程需要相应的开发环境 于是就有了交叉开发环境的模式 即宿主机 目标机模式 4 2交叉开发环境在开发单片机系统时 需要使用一台主机外加操作系统 如Windows2000 再装上单片机厂商提供的开发软件 即开发环境 在开发环境里面编译程序 用鼠标单击 build 快捷键 即生成的可执行程序配合仿真器还可以进行单步调试 观察寄存器等 开发工具一般是IDE 集成开发环境 它集成了编译器 用于编译目标CPU识别的机器代码 编辑器 仿真调试器等诸多工具 如果用C语言编写程序 可能还包括相应的标准C库 宿主机 目标机开发模式就是在一个CPU上运行一个程序 另一个CPU编译和调试程序 和它对应的是宿主机开发模式 就是在自己的CPU上编译和运行自己的程序 比如在PC机上用VC编译程序直接运行 因此 宿主机 目标机开发模式并不是一个新名词 交叉编译环境说明的问题和上面的一样 只是针对编译环境而言 这里的环境包括目标CPU的编译器和库文件等 至于为什么叫交叉编译 同样是因为运行编译程序的CPU不是在为自己工作 而是在编译另一个CPU的程序 这样说来 以上例子中的编译环境同样属于一个交叉编译环境 在PC机上编译单片机程序 只不过都被IDE集成好了 综上所述 编译 链接和调试嵌入式应用软件的环境 它与运行嵌入式应用软件的环境有所不同 这样的环境称为交叉开发环境 CrossDevelopmentEnvironment 需要交叉开发环境的支持是嵌入式软件开发时的一个显著特点 交叉开发环境模式一般如图4 1所示 图4 1交叉开发环境模式 宿主机 Host 是一台通用计算机 如PC机或者工作站 功能较强 各种Linux发行版本可以直接在PC机上安装 功能十分强大 它不仅能够支持各种处理器和外围设备接口 而且提供了图形化的用户交互界面和丰富的开发环境 更重要的是Linux系统性能稳定 它为开发者提供了以下功能 非常稳定的多任务操作系统 丰富的设备驱动程序支持和网络工具 强大的Shell 本地编译器 编辑器 图形化的用户界面 4 3交叉开发工具组成1 交叉编译器和交叉链接器在完成嵌入式软件的编码之后 需要进行编译和链接 以生成可执行代码 由于开发过程大多是在使用Intel公司x86系列CPU的通用计算机上进行的 而目标环境的处理器芯片却大多为ARM MIPS PowerPC DragonBall等系列的微处理器 这就要求在建立好的交叉开发环境中进行交叉编译和链接 交叉编译器和交叉链接器是能够在宿主机上运行 并且能够生成在目标机上直接运行的二进制代码的编译器和链接器 例如在基于ARM体系结构的交叉开发环境中 arm linux gcc是交叉编译器 arm linux ld是交叉链接器 2 交叉调试器和系统仿真器嵌入式软件经过编译和链接后即进入调试阶段 嵌入式软件开发过程中的交叉调试与通用软件开发过程中的调试方式有所差别 在通用软件开发中 调试器与被调试的程序往往运行在同一台计算机上 调试器是一个单独运行着的进程 它通过操作系统提供的调试接口来控制被调试的进程 在嵌入式软件开发中 调试时采用的是在宿主机和目标机之间进行的交叉调试 调试器仍然运行在宿主机的通用操作系统之上 但被调试的进程却是运行在基于特定硬件平台的嵌入式操作系统中 调试器和被调试进程通过串口或者 网络进行通信 调试器可以控制 访问被调试进程 读取被调试进程的当前状态 并能够改变被调试进程的运行状态 交叉调试 CrossDebug 又常常被称为远程调试 RemoteDebug 是一种允许调试器以某种方式控制目标机上被调试进程的运行方式 并具有查看和修改目标机上内存单元 寄存器以及被调试进程中变量值等各种调试功能的调试方式 一般而言 远程调试过程的结构如图4 2所示 图4 2远程调试结构图 由上可知交叉调试典型特点如下 1 调试器和被调试进程运行在不同的机器上 调试器运行在PC或者工作站上 宿主机 而被调试的进程则运行在各种专业调试板上 目标机 2 调试器通过某种通信方式与被调试进程建立联系 如串口 并口 网络 DBM JTAG或者专用的通信方式 3 在目标机上一般会具备某种形式的调试代理 它负责与调试器共同配合完成对目标机上运行着的进程的调试 这种调试代理可能是某些支持调试功能的硬件设备 如DBI2000 也可能是某些专门的调试软件 如gdbserver 4 目标机可能是某种形式的系统仿真器 通过在宿主机上运行目标机的仿真软件 整个调试过程可以在一台计算机上运行 此时物理上虽然只有一台计算机 但逻辑上仍然存在着宿主机和目标机的区别 4 4宿主机与目标机之间的通信方式4 4 1互联通信方式1 串口通过串口可以作为控制台 向目标机发送命令 显示信息 也可以通过串口传送文件 还可以通过串口调试内核及程序 串口的设备驱动实现也比较简单 2 以太网口以太网以其高度灵活 相对简单 易于实现的特点 成为当今最重要的一种局域网建网技术 以太网IEEE802 3通常使用专门的网络接口卡或通过系统主电路板上的电路实现 以太网使用收发器与网络媒体进行连接 收发器可以完成多 种物理层功能 其中包括对网络碰撞进行检测 收发器可以作为独立的设备通过电缆与终端站连接 也可以直接被集成到终端站的网卡当中 以太网可采用广播机制 所有与网络连接的工作站都可以看到网络上传递的数据 通过查看包含在帧中的目标地址 确定是否进行接收或放弃 如果证明数据确实是发给自己的 工作站将会接收数据并传递给高层协议进行处理 网络接口一般采用RJ 45标准插头 PC机上一般都配置10M 100M以太网卡 实现局域网连接 通过以太网连接和网络协议 可以实现快速的数据通讯和文件传输 另外 目标机也可以利用远程组件来促进开发 比如内核可以通过TFTP协议下载到目标机 根文件系统 rootfs 也可以通过NFS加载来代替存储在目标机上 利用NFS加载根文件系统实际上是一件非常好的事情 因为它避免了频繁的复制程序修改 3 JTAG口JTAG技术是一种嵌入式调试技术 它在芯片内部封装了专门的测试电路测试接口 TAP TestAccessPort 通过JTAG测试工具对芯片的核进行测试 它是联合测试行动小组 JTAG JointTestActionGroup 定义的一种国际标准测试协议 主要用于芯片内部测试及对系统进行仿真 调试 目前大多数比较复杂的器件都支持JTAG协议 如ARM DSP FPGA器件等 标准的JTAG接口是4线 TMS TCK TDI和TDO 分别为测试模式选择 测试时钟 测试数据输入和测试数据输出 因为JTAG接口的时钟一般在1 16MHz之间 所以传输速率可以很快 但是实际的数据传输速度要取决于仿真器与主机端的通讯速度和传输软件 4 4 2可拔插通信方式在这种模式下 在宿主机和目标机之间没有实际的物理连接 而是主机写存储设备 如软盘 CDROM USB盘等移动存储介质 然后再传给目标机 最后目标机启动它 在这种模式下 宿主机包括了交叉编译环境 而目标机只包括了一个小型的启动文件 其他的组件存储在一个可移动的 可以被宿主机编程的 同时又可以被目标机启动的存储介质上 比如CompactFlashIDE设备 或者其他类型的驱动 有可能目标机不包括任何一种可永久存储数据的设备 举例来说 代替了固定存储设备到目标机上 目标机只包括了一个接口 闪存芯片可以很轻易的插入和移开 这个闪存芯片同时需满足可以很轻易的被一个宿主机上闪存烧写器编程 并且轻易的在目标机的接口上进行一般的实验 这种模式在嵌入式系统开发的最初阶段非常流行 当然 当最初阶段结束以后 也可能发现互连模型应用更好 因此 当修改了内核或者根文件系统以后 可以避免从宿主机和目标机之间传递存储设备 4 5交叉开发环境建立4 5 1创建交叉开发工具链交叉开发工具链包括交叉编译器 交叉连接器和交叉调试器 这些交叉开发工具链是嵌入式系统开发的必备工具 它是要安装在宿主机 PC 上的 对于它的创建有三种途径 第一种是下载别人已做好的工具链 当然这是最省事的方法 第二种是到官方网站上下载crosstool 第三种是自己一步一步制作自己的交叉开发工具链 这是最有趣的 也是最能体现自己能力的方式 本章所使用的交叉开发工具链是前面两种 其中 第一种交叉开发工具链是UP NETARM2410 S开发平台的北京博创公司所提供的 4 5 2宿主机开发环境配置1 宿主机安装发行版Linux操作系统宿主机安装发行版Linux操作系统有以下三个方案 1 基于PC机Windows操作系统下的CYGWIN 2 在Windows下安装虚拟机后 再在虚拟机中安装Linux操作系统 3 直接安装Linux操作系统 安装方案的选择不同 主要依据PC机的系统配置 对于当前的PC机配置 建议选择在虚拟机下安装Linux操作系统 这样便于系统任务的切换 对于它的安装方法可参见本教材2 1节 如果选择RedHat9 0 它安装后占用空间约为2 4 5GB之间 还要安装ARMLinux开发软件 对开发计算机的硬盘空间要求较大 硬件要求如下 CPU 高于奔腾500MB 推荐高于赛扬1 7GB 内存 大于128MB 推荐256MB 硬盘 大于10GB 推荐高于40GB 2 开发工具链的安装开发工具链的第一种来源 安装较简单 一般运行安装光盘的可执行文件 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配置网口的IP地址 查看本机IP地址 ifconfig a修改本机IP地址 ifconfigeth0192 168 254 1点击开始菜单 选择网络 即可以通过RedhatLinux9的图形配置界面来配置 图4 3所示就是网络设备配置的图形窗口 图4 3网络设备配置的图形窗口 4 串口配置串行通信接口很适合作为控制台 在各种操作系统上一般都有现成的控制台程序可以使用 Windows操作系统有超级终端 Hyperterminal 工具 Linux UNIX操作系统有minicom等工具 无论什么操作系统还是通信工具 都可以作为串口控制台 如果在Windows平台上运行Linux虚拟机 这个串口通信软件可以任选一种 超级终端 Windows开始菜单的附件中 是Windows系统的串口通讯工具 完全图形化的界面 操作非常简单 使用超级终端也要配置相应的连接 建立一个超级终端的连接 需要为其配置如图4 4所示的参数 主要是串口号 通讯速率和是否流控 每建立一个配置可以保存下来 图4 4Windows系统下的超级终端 Linux系统通常使用minicom串口通讯工具 由于minicom不是图形窗口的工具 操作起来要麻烦一些 使用minicom串口终端之前 需要先配置参数 在Linux操作系统Xwindow界面下建立终端 在桌面上点击右键选择新建终端 在终端的命令行提示符后输入 minicom 就会看到minicom的启动画面 minicom启动后 先按Ctrl A键 再按Z键 注意不是连续按 Ctrl A松开后才按Z 进入minicom配置主界面 如图4 5所示 图4 5minicom配置主界面 5 NFS服务网络文件系统 NetworkFileSystem NFS 是一种允许透明文件共享的技术 这种共享出现在通过局域网 也就是LAN 连接的Unix和Linux系统之间 NFS已出现了很长时间 它在Linux和Unix世界里广为人知而且被广泛使用 特别地 NFS常用于在网络上多台机器之间共享主目录 当用户登录至LAN上的一台机器 任何一台机器 时 这为用户提供了一致的环境 由于NFS 挂装远程文件系统并将其完全集成到系统的本地文件系统成为可能 NFS的透明性和成熟使它成为在Linux下进行网络文件共享的有用 流行的选择 也是嵌入式系统软件调试的一种重要 方便的方法 NFS服务的主要任务是把本地的一个目录通过网络输出 其他计算机可以远程地挂接这个目录并且访问这个文件 NFS服务有自己的协议和端口号 但是在文件传输或者其他相关信息传递的时候 NFS则使用远程过程调用 RPC RemoteProcedureCall 协议 RPC负责管理端口号的对应与服务相关的工作 NFS本身的服务并没有提供文件传递的协议 它通过RPC的功能负责 因此 还需要系统启动portmap服务 NFS服务的设置可以通过Linux图形界面来操作 也可以在终端下用配置文件来操作 1 图形界面操作 点击主菜单运行系统设置 服务器设置选择NFS服务器 点击增加 出现如图4 6所示界面 在目录 Drictory 中填入需要共享的路径 在主机 Hosts 中填入允许进行连接的主机IP地址 并选择允许客户对共享目录的操作为只读 Read only 或读 写 Read write 图4 6NFS服务图形设置界面 2 配置文件操作 NFS服务的配置文件是 etc exports 配置文件的语法格式如下 共享目录主机名称1或IP1 参数1 参数2 主机名称2或IP2 参数3 参数4 共享目录 是主机上要向外输出的一个目录 主机名称或者IP 则是允许按照指定权限访问这个共享目录的远程主机 参数 则定义了各种访问权限 6 DHCP服务目标板的引导程序 Bootloader 或者内核都需要分配IP地址 这可以通过动态主机配置协议 DHCP DynamicHostConfigurationProtocol 或者BOOTP协议实现 BOOTP协议可以给计算机分配IP地址并且通过网络获取映像文件的路径 DHCP则是向后兼容BOOTP的协议拓展 Linux操作系统的主机一般包含dhcpd的软件包 可以配置DHCP服务 配置服务的操作需要root用户的权限 首先要确认主机上已经安装所有必需的软件包 创建相关文件 确认 var lib dhcp dhcpd leases已经存在 如果这个文件不存在 可以手工创建目录和文件 网络服务的启动和停止也可以通过图形化窗口来配置 在RedhatLinux9 0系统上可以点击主菜单运行系统设置 图4 7所示为DHCP服务配置窗口 图4 7DHCP服务配置窗口 7 TFTP服务TFTP协议是简单的文件传输协议 适合目标机引导程序使用 但是文件传输是基于UDP的 文件传输 特别是大文件 是不可靠的 TFTP服务在Linux系统上有客户端和服务器两个软件包 配置TFTP服务 必须先安装好 TFTP服务也可以通过图形化的配置窗口来启动 当然 操作过程需要root权限 缺省的情况下 把 tftpboot目录作为输出文件的根目录 4 6基于UP NETARM2410 S开发平台交叉开发环境建立4 6 1安装PC机RedHatLinux虚拟机4 6 2开发工具软件的安装本节中所讲的开发工具的安装与4 5 1节中所讲的创建交叉开发工具链的第一种方法相似 即博创公司目标机的开发工具光盘 插入CDROM 然后执行以下命令 cd mnt cdrom 2410 s06 03 03 linux V5 1 install sh会出现如图4 8所示的安装界面 如果想了解在安装过程会执行哪些内容 可用vi查看这个脚本文件install sh 图4 8开发工具安装界面 4 6 3宿主机网络配置NFS的本质就是将宿主机和目标机组建成一个小的局域网 因此对宿主机的网络配置包括 IP地址的设置 安全级别的设置和NFS服务的配置 1 IP地址的设置 对于IP地址设置可参看4 5 2节中的网络配置方法 目标机的IP地址的初始设置为 192 168 0 115 注意对宿主机的IP设置中要把它设置成和目标机在同一个子网中 2 安全级别的设置 要使宿主机和目标板之间相互顺利传送文件 宿主机的安全级别应该设置成无防火墙状态 对于REDHAT9 0 它默认的是打开了防火墙 因此对于外来的IP访问全部拒绝 这样其他网络设备根本无法访问它 即无法用NFS挂载它 许多网络功能都将无法使用 因此网络安装完毕后 应立即关闭防火墙 操作如下 点击开始菜单 选择安全级别设置 选中无防火墙 如图4 9所示 3 NFS服务的配置 NFS服务的配置方法可参看4 5 2节中的NFS功能的讲述 在系统设置菜单中选择服务器设置菜单 再选中服务菜单 将iptables服务的勾去掉 并确保选中nfs选项 图4 9宿主机安全级别设置 4 6 4宿主机串口配置目标机是资源受限的系统 没有像宿主机那样的显示器 如果想看程序在目标板的运行结果等 可利用串口通信将目标机的一些信息传送到宿主机的minicom控制台中 minicom控制台即相当于目标机的显示器 其宿主机的串口配置方法可参看4 5 2节中串口配置内容 进入串口设置界面后 有几个重要选项改为如下值 SerialDevice dev ttyS0 端口号使用串口1 E BPS par bits 1152008N1 波特率 115200 8位数据位 无校验 1位停止位 F E硬件流 软件流都改为NO 4 6 5基于UP NETARM2410 S开发平台交叉开发环境建立的总结交叉开发环境的建立 就是充分利用宿主机 PC 强大的功能 建立能够编写 编译 下载和调试运行在目标机 UP NETARM2410 S 上的二进制程序 包括 RedHatLinux虚拟机的安装 交叉开发工具链的制作和安装 串口的配置 网络的配置及JTAG口的连接等 它们各自的作用总结如下 1 RedHatLinux虚拟机的安装 利用它的强大的功能 开发一个能够运行在目标机的Linux操作系统 2 交叉开发工具链的制作和安装 编译能够运行在目标机上的二进制代码 3 串口的配置 相互通信 可将minicom或超级终端作为目标机显示器 4 网络的配置 宿主机和目标机之间局域网的建立 利用NFS进行文件系统的挂载 方便程序的调试 5 JTAG口 可在目标机没有任何通信之前将引导程序烧写到目标机 在引导程序中可建立如串口等接口的初始化等 宿主机和目标机之间的配置及通信线路如图4 10所示 图4 10宿主机和目标机之间的配置及通信线路图 4 7交叉编译和交叉调试实例 1 建立工作目录 在上面的交叉开发环境建立的共享目录 arm2410s 中建立工作目录 mkdirpthread cdpthread 2 编写源代码 在此工作目录下用vi编写程序源代码 用vi编写pthread c vipthread c源代码如下 include stdio h include math h 3 编写makefile CC armv4l unknown linux gccEXEC pthreadOBJ
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 企业资金管理流程及工具手册
- 动物成语考试题及答案
- 企业资料信息检索与分析工具包
- 采购物品库存管理标准化流程模板
- (正式版)DB15∕T 3246-2023 《大兴安岭岭东南大豆宽垄高台机械化栽培技术规程》
- 人才招聘及培训服务合作合同
- 家庭教育举措落实承诺书(6篇)
- 初级护理资格证考试题库及答案
- 产品设计及功能开发评估模板
- 《元素周期律的应用与解释:高中化学教学教案》
- 预防校园欺凌家长告知书
- 儿童托管中心疫情防控应急预案
- 《中国战略导弹》课件
- 人教版三年级上册《生命.生态.安全》全册教案(及计划)
- 人教统编版(部编版)小学科学教材目录
- 2024年污水管道维修协议书范文范本
- 颈椎后路单开门椎管扩大成形术的护理课件
- 新外研版(三起)三年级上册英语全册教学课件(2024年新版教材)
- 外研版七年级上册初一英语全册课时练(一课一练)
- 2024年重庆市高考思想政治试卷真题(含答案解析)
- 高考英语语法填空模拟题
评论
0/150
提交评论