嵌入式交叉开发环境介绍

上传人:枫** 文档编号:568000413 上传时间:2024-07-23 格式:PPT 页数:52 大小:828KB
返回 下载 相关 举报
嵌入式交叉开发环境介绍_第1页
第1页 / 共52页
嵌入式交叉开发环境介绍_第2页
第2页 / 共52页
嵌入式交叉开发环境介绍_第3页
第3页 / 共52页
嵌入式交叉开发环境介绍_第4页
第4页 / 共52页
嵌入式交叉开发环境介绍_第5页
第5页 / 共52页
点击查看更多>>
资源描述

《嵌入式交叉开发环境介绍》由会员分享,可在线阅读,更多相关《嵌入式交叉开发环境介绍(52页珍藏版)》请在金锄头文库上搜索。

1、嵌入式交叉开发环境介绍1.5.4 嵌入式系统的开发结构l一个新的开发模式原因:嵌入式系统通常是一个资源受限的系统,因此直接在嵌入式系统的硬件平台上编写软件比较困难,有时候甚至是不可能的。模式的特点:目前一般采用的解决办法是首先在通用计算机上编写程序,然后通过交叉编译生成目标平台上可以运行的二进制代码格式,最后再下载到目标平台上的特定位置上运行。 1.5.4 嵌入式系统的开发结构l概念:Cross需要交叉开发环境(Cross Development Environment)的支持是嵌入式应用软件开发时的一个显著特点,交叉开发环境是指编译、链接和调试嵌入式应用软件的环境,它与运行嵌入式应用软件的环

2、境有所不同,通常采用宿主机目标机模式,如下图所示。 1.5.4 嵌入式系统的开发结构lCross的图示1.5.4 嵌入式系统的开发结构l构成之一:宿主机(Host)是一台通用计算机(如PC机或者工作站),它通过串口或者以太网接口与目标机通信。宿主机的软硬件资源比较丰富,不但包括功能强大的操作系统(如Windows和Linux),而且还有各种各样优秀的开发工具(如WindRiver的Tornado、Microsoft的Embedded Visual C+等),能够大大提高嵌入式应用软件的开发速度和效率。 1.5.4 嵌入式系统的开发结构l构成之二目标机(Target)一般在嵌入式应用软件开发期间

3、使用,用来区别与嵌入式系统通信的宿主机它可以是嵌入式应用软件的实际运行环境,也可以是能够替代实际运行环境的仿真系统,但软硬件资源通常都比较有限。 1.5.4 嵌入式系统的开发结构l相关工具:嵌入式系统的交叉开发环境一般包括交叉编译器、交叉调试器和系统仿真器,l其中交叉编译器用于在宿主机上生成能在目标机上运行的代码,l而交叉调试器和系统仿真器则用于在宿主机与目标机间完成嵌入式软件的调试。1.5.4 嵌入式系统的开发结构l过程:在采用宿主机目标机模式开发嵌入式应用软件时,l首先利用宿主机上丰富的资源和良好的开发环境开发和仿真调试目标机上的软件,l然后通过串口或者以太网络连接将交叉编译生成的目标代码

4、传输并装载到目标机上,l并在监控程序或者操作系统的支持下利用交叉调试器进行分析和调试,l最后目标机在特定环境下脱离宿主机单独运行。1.5.4 嵌入式系统的开发结构l建立交叉开发环境是进行嵌入式软件开发的第一步,目前常用的交叉开发环境主要有开放和商业两种类型。l开放的交叉开发环境的典型代表是GNU工具链、目前已经能够支持x86、ARM、MIPS、PowerPC等多种处理器。l商业的交叉开发环境则主要有Metrowerks CodeWarrior、ARM Development Software Toolkit、SDS Cross compiler、WindRiver Tornado、Micros

5、oft Embedded Visual C+等。 1.5.4 嵌入式系统的开发结构l一个e.g.1.5.4 嵌入式系统的开发结构软件开发流程9.1 Bootloader引入l引入引入:对于计算机系统来说,从开机上电到操作系统启动需要一个引导过程。嵌入式Linux系统同样离不开引导程序,这个引导程序就叫做BootLoader。l对比对比:回忆一下PC的体系结构我们可以知道,PC机中的引导加载程序由BIOS(其本质就是一段固件程序)和位于硬盘MBR中的引导程序一起组成。BIOS在完成硬件检测和资源分配后,将硬盘MBR中的引导程序读到系统的RAM中,然后将控制权交给引导程序。引导程序的主要运行任务就

6、是将内核映象从硬盘上读到RAM中然后跳转到内核的入口点去运行,也即开始启动操作系统。9.1 Bootloader引入l而在嵌入式系统中,通常并没有像BIOS那样的固件程序。l因此整个系统的加载启动任务就完全由BootLoader来完成比如在一个基于ARM7TDMI core的嵌入式系统中,系统在上电或复位时都从地址0x00000000开始执行而在这个地址处安排的通常就是系统的BootLoader程序。而存储介质一般是Flash l定义:简单地说BootLoader就是在操作系统内核或用户应用程序运行之前运行的一段小程序。通过这段小程序,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的

7、软硬件环境带到一个合适的状态,以便为最终调用操作系统内核或用户应用程序准备好正确的环境。 9.1 Bootloader概念l通常,BootLoader 是依赖于硬件而实现的,特别是在嵌入式领域,为嵌入式系统建立一个通用的BootLoader是很困难的。当然,我们可以归纳出一些通用的概念来,以便我们了解特定BootLoader的设计与实现。 l现实开发中,我们都是采用现有的BootLoader进行修改Vivi,blob,u-boot是最常见的,它们都是开源的Vivi是三星公司的,我们的实验板子就是使用的它9.1 Bootloader开发和修改lLinux系统是通过BootLoader引导启动的。

8、一上电,就要执行BootLoader来初始化系统。 l系统加电或复位后,所有CPU都会从某个地址开始执行,这是由处理器设计决定的。比如,基于 ARM7TDMI core 的 CPU 在复位时通常都从地址 0x00000000 取它的第一条指令。l而基于 CPU 构建的嵌入式系统通常都有某种类型的固态存储设备(比如:ROM、EEPROM 或 FLASH 等)被映射到这个预先安排的地址上。因此在系统加电后,CPU将首先执行Boot Loader程序。 9.1 Bootloader启动过程l主机和目标机之间一般有串口可以连接,BootLoader软件通常会通过串口来输入输出。例如:输出出错或者执行结

9、果信息到串口终端,从串口终端读取用户控制命令等。lPC上,利用del键,可以进入bios的交互界面 9.1 Bootloader交互lBootLoader启动过程通常是多阶段的,这样既能提供复杂的功能,又有很好的可移植性。 第一个阶段的代码是采用汇编完成的,和硬件平台相关第二个阶段是采用c语言,可以实现平台无关9.1 Bootloader多阶段启动9.1 Bootloader启动举例9.1 Bootloader启动举例9.1 Bootloader启动举例l大多数BootLoader都包含两种不同的操作模式 (下图描述了vivi的模式选择)本地加载模式远程下载模式 :可以完成Linux内核和文件

10、系统的重新烧入(即升级)l对比,PC计算机上:利用del进入bios的配置命令界面不输入del,则自动完成内核的载入9.1 Bootloader模式9.1 Bootloader模式l诸如uboot的BootLoader本身集成网络功能支持l这种方式开发板不需要配置较大的存储介质,跟无盘工作站有点类似。但是使用这种启动方式之前,需要把BootLoader安装到板上的EPROM或者Flash中。BootLoader通过以太网接口远程下载Linux内核映象或者文件系统。 lBootLoader下载文件一般都使用TFTP网络协议,还可以通过DHCP的方式动态配置IP地址。 9.1 Bootloader

11、网络支持9.1 Bootloader 网络支持l我们要进行的实验之:利用vivi升级内核9.1 Bootloader举例l我们要进行的实验之:利用vivi升级文件系统9.1 Bootloader举例l板子上没有任何东西(包括BootLoader)的时候,需要专门的工具对vivi等BootLoader进行烧写9.1 Bootloader举例l板子上诸如vivi等BootLoader后,再进行升级,就可以利用Target上已经存在的(旧的)BootLoader了9.1 Bootloader举例6.2 嵌入式Linux的关键技术l6.2.1 交叉开发l6.2.2 内核精简和移植l6.2.3 定制文件

12、系统l6.2.4 GUI界面设计6.2.1 交叉开发l交叉开发环境:是指编译、链接和调试程序采用宿主机目标机模式。l正如在第一章所讲的,嵌入式系统开发一般采用Host/Target模式,嵌入式Linux也不例外。l具体的来说,Host一般采用完整的Linux系统,而Target也采用相应版本的嵌入式Linux系统。开 发 工 具 也 是 相 应 的 嵌 入 式 Linux工 具 链(ToolChain)6.2.1 交叉开发l在基于ARM体系结构的gcc交叉开发环境中,arm-linux-gcc是交叉编译器,arm-linux-ld是交叉链接器。l通常情况下,并不是每一种体系结构的嵌入式微处理器

13、都只对应于一种交叉编译器和交叉链接器,比如:对于M68K体系结构的gcc交叉开发环境而言,就对应于多种不同的编译器和链接器。如果使用的是COFF格式的可执行文件,那么在编译Linux内核时需要使用m68k-coff-gcc和m68k-coff-ld,而在编译应用 程 序 时 则 需 要 使 用 m68k-coff-pic-gcc和 m68k-coff-pic-ld。 6.2.1 交叉开发l函数库:嵌入式系统在链接过程中通常都要求使用较小的函数库,以便最后产生的可执行代码能够尽可能地小,因此实际运用时一般使用经过特殊处理的函数库。l对于嵌入式Linux系统来讲,功能越来越强、体积越来越大的C语言

14、函数库glibc和数学函数库libm已经很难满足实际的需要,因此需要采用它们的精化版本uClibc、uClibm和newlib等。 6.2.1 交叉开发l交叉调试(Cross Debug)又常常被称为远程调试(Remote Debug),是一种允许调试器以某种方式控制目标机上被调试进程的运行方式,并具有查看和修改目标机上内存单元、寄存器以及被调试进程中变量值等各种调试功能的调试方式。一般而言,远程调试过程的结构如右图所示。 6.2.1 交叉开发l在嵌入式Linux系统的开发中,远程调试时目标机上使用的调试服务器通常是gdbserver,而宿主机上使用的调试器则是gdb,两者相互配合共同完成调试

15、过程。 6.2.1 交叉开发l在嵌入式Linux的开发的过程中,会采用一些测试和测量工具,比如:系统跟踪工具:Strace,Ltrace,LTT性能测量工具:LTP,Lmbench,gprof,gcov内存泄漏测量工具:mtrace,dmalloc,memwatch,YAMD6.2.2 内核精简和移植l内核的精简是基于源代码的编译来完成Linux内核源代码很多地方都可以下载,而且发行商(如RedHat)的光盘中也提供都包括了源代码编译内核的过程在后面的授课内容会具体介绍l具体到一个特定的硬件平台,具体的CPU和外围设备千差万别,因此一般需要对内核进行修改,即移植内核。内核移植的本质就是修改通用

16、内核中的以有的设备驱动代码比如:针对ARM平台,一般要修改ARM Linux中的Driver目录的相关文件。6.2.2 内核精简和移植lLinux内核的精简是比较复杂的工作,需要对源代码有一定的理解l而幸运的是一般嵌入式Linux硬件平台提供者,比如ARM平台,都完成的针对其的嵌入式Linux的移植一般在进行硬件平台的选择的时候,都是选择已有嵌入式Linux支持的硬件。驱动程序的编写是一个“搜索模仿测试的过程”6.2.3定制文件系统l文件系统是Linux不可缺少的一部分,嵌入式Linux也不例外,root文件系统是内核启动后要加载的。l嵌入式Linux一般采用flash作为存储介质,空间有限,

17、不可能象Host上的Linux那样,有很多的命令和工具。一般只包括必须存在的命令、工具和配置文件。l目前,Linux对flash上的文件系统提供了较好的支持,如ramdisk,cramfs,romfs,jffs,yaffs文件系统等而且有第三方工具和文档的支持,如BusyBox和LFS等6.2.3定制文件系统l一般的方法:从下载使用BUSYBOX软件进行功能裁减,产生一个最基本的根文件系统再根据自己的应用需要添加其他程序。默认的启动脚本一般都不会符合应用的需要,所以就要修改根文件系统中的启动脚本,它的存放位置位于/etc目录下,包括:/etc/init.d/rc.S、/etc/profile、

18、/etc/.profile等,自动挂装文件系统的配置文件/etc/fstab,具体情况会随系统不同而不同。根文件系统在嵌入式系统中一般设为只读,需要使用mkcramfs、genromfs等工具产生烧写映像文件。6.2.4 GUI的界面设计l目前,嵌入式系统越来越多的用于人们的生活当中,随着非专业用户对嵌入式系统需求的增加,对嵌入式系统的界面也提出了更高的要求:比如界面友好、操作简单。这推动了嵌入式系统的GUI的产生和发展如PDA和高端手机l对嵌入式Linux系统而言,和Linux系统一样,也存在了大量的类Windows系统。l针对特定的需要,可以对这些GUI系统进行移植,移植到嵌入式Linux

19、下,然后基于这些GUI系统来开发友好易用的应用程序。6.2.4 GUI的界面设计l目前,已经有很多开源和商业的GUI系统已经移植到了嵌入式Linux系统上。QTMicroWindowsTiny XMiniGUI调用QT开发包编写的用户程序QT开发包和支持包各个操作系统平台各个硬件平台6.3 嵌入式Linux的开发流程l6.3.1 开发流程简介l6.3.2 实验平台的操作流程简介6.3.1 开发流程简介l一般流程描述6.3.1 开发流程简介lStep1: 硬件平台的设计根据需要选择CPU,外设和其他接口芯片lStep2: Host主机的环境搭建根据硬件平台,在Host主机上安装Linux系统,并

20、且安装GCC、GDb,binutils,glibc库等所构成的ToolChain. (e.g: arm-linux-gcc,m68k-linux-gcc等)这是一比较麻烦和浪费时间的过程,可以借助一些其他工具,如crosstool (URL: http:/ 开发流程简介lStep3: bootloader的定制:Bootloader就好比PC上的BIOS,主要负责嵌入式Linux内核的加载,当然很多Bootloader的功能不仅仅如此它是和硬件平台相关的代码,一般采用汇编,或者汇编和c混合实现一般方法:从网络上下载一些公开源代码的BOOTLOADER,如U-BOOT、BLOB、VIVI、LIL

21、O、ARM-BOOT、RED-BOOT等,根据自己具体的芯片进行移植修改。l比如:网络上有免费下载的Windows下通过JTAG并口简易仿真器烧写ARM外围Flash芯片的烧写程序,也有Linux下的公开源代码的J-Flash程序。 6.3.1 开发流程简介lStep4:内核精简和移植已经进行了讲解,主要包括硬件平台的驱动的修改,然后进行编译,生成一个zImage的映像文件,然后也烧写到Target上lStep5: 文件系统的定制一般采用内核已经支持的文件系统:如jffs,romfs等lStep6: GUI系统的设计根据具体的用户和硬件平台进行选择和定制lStep7:应用程序的开发完成用户的主

22、要功能,设计到了Linux下的应用程序开发。一般来说,嵌入式Linux平台上既有系统提供的程序,也有后来用户自己编写的程序6.3.1 开发流程简介一个典型嵌入式Linux的存储布局6.3.1 开发流程简介6.3.1 开发流程简介6.3.2 实验平台的操作流程简介lStep1: 建立Host的开发环境:Linux的安装ToolChain的快速安装串口通讯程序的配置:如超级终端或者Minicom网络环境的设置:如NFS,FTP等lStep2: 给Target下载bootloaderJTAG串口网络接口6.3.2 实验平台的操作流程简介lStep3: 编译Linux内核,下载到Target上lStep4:建立root文件系统,下载到Target上lStep5: 应用程序的开发和测试(交叉环境)

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > 工作计划

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号