《《交叉编译环境》PPT课件.ppt》由会员分享,可在线阅读,更多相关《《交叉编译环境》PPT课件.ppt(66页珍藏版)》请在三一办公上搜索。
1、第4章:嵌入式交叉编译环境及系统裁剪,4.1 嵌入式交叉编译环境构建4.2 Bootloader程序4.3Linux操作系统的裁剪和编译,第4章:嵌入式交叉编译环境及系统裁剪,4.1 嵌入式交叉编译环境构建4.2 Bootloader程序4.3Linux操作系统的裁剪和编译,在通用计算机上开发软件时,一般是软件开发环境(编译、调试)与软件运行环境相同。,(1)什么叫交叉编译?(2)为什么要使用交叉编译?,1、交叉编译概述,交叉开发(Cross Developing)的模式是指:开发系统在PC机(一般称为宿主机或host)上,即完成软件的编辑、编译、链接等工作;软件的运行是在嵌入式设备(一般称为
2、目标机或target)上。,宿主机,目标机,交叉编译定义:交叉编译是指:在宿主机上进行软件编辑、编译、链接等,并生成能够在目标机上运行的可执行程序的过程。,宿主机,目标机,使用交叉编译的原因:由于嵌入式系统的硬件资源有限,不能安装编译所需要的资源。,开发机与目标机的不同,体系结构不同处理能力不同运行的操作系统不同输入输出方式不同,(1)实时在线仿真(2)模拟调试(3)软件调试(3)OCD调试,2、嵌入式常用的调试方法,(1)实时在线仿真(ICE)方式 实时在线仿真(In-Circuit Emulator,ICE)是一种用于替代目标上CPU的设备,可以执行目标机CPU指令,能够将内部的信号输出到
3、被控的目标机,ICE上的内存也可以被映射到用户的程序空间。这样,即使目标机不存在,也可以进行代码调试。,实时在线仿真具有以下优缺点:优点:功能非常强大,软硬件均可做到完全实时在线调试。缺点:价格昂贵。,(2)模拟调试 调试工具和待调试的嵌入式软件都在宿主机上运行,由宿主机提供一个模拟的目标运行环境,可以进行语法和逻辑上的调试。,优点:简单方便,不需要目标机,成本低。缺点:功能非常有限,无法实时调试。,(3)软件调试 宿主机和目标机通过某种接口(通常是串口)连接,宿主机上提供调试界面,待调试软件下载到目标机上运行。这种方式的先决条件是在宿主机和目标机之间建立起通信联系(目标机上需要固化监控程序)
4、,将一段称为ROM Monitor的程序固化在目标机上,负责监控目标机上被调试程序的运行。,优点:纯软件,价格较低,简单,软件调试能力较强。缺点:需要事先在目标机上烧写监控程序(往往需多次试验才能成功),且目标机能正常工作,功能有限,特别是硬件调试能力较差。,(4)OCD方式 OCD(片上调试器)将ICE提供的实时跟踪和运行控制分开,使用很少的实时跟踪功能放弃,而大量使用的运行控制放到目标机的CPU核内,由一个专门的调试控制逻辑模块来实现,并用一个专用的串行信号接口开放给用户。这样,OCD可以提供ICE80%的功能,成本还不到ICE的20%。,由于历史原因,OCD有许多不同的实现方式,标准并不
5、统一。比较典型的有:IBM和TI公司提出的连接测试存取组(Joint Test Action Group,JTAG)。Motorola公司提出的后台调试模式(Background Debugging Method,BDM),JTAG仿真器的功能有2种.第一是完成程序仿真调试;第二,完成对Flash存储器的烧写。,本课程使用的调试方法是:软件调试方式。其中:ROM Monitor程序是利用JTAG写入Flash存储器。,嵌入式交叉编译硬件连接图,串口线,网线,JTAG,3、交叉编译环境构建,交叉编译环境构建包括2个部分:第一部分是:宿主机(嵌入式交叉编译环境)PC+Linux+交叉编译器+库函数
6、。第二部分是:目标机(嵌入式软件运行环境)实验箱+引导程序+嵌入式操作系统。,方案1:宿主机上应安装的软件有:Linux操作系统软件开发工具包交叉编译工具包,宿主机交叉编译软件配置,方案2:宿主机上应安装的软件有:Windows操作系统+虚拟机(Linux操作系统)+Samba服务软件开发工具包交叉编译工具包,串口线(终端方式操作),网线(将硬盘,让实验箱使用),宿主机(host),目标板(target),1、在宿主机上,安装好Linux操作系统 Linux操作系统,如果安装了gcc编译。就可以进行c语言程序编译。,1、在宿主机上,安装好Linux操作系统 Linux操作系统,如果安装了gcc
7、编译。就可以进行c语言程序编译。,2、安装NFS服务器,3、安装交叉编译软件包 主要目的是:提供一套与目标机一致的库函数和编译器。,要实现交叉编译需要的软件有:交叉编译工具(一组编译器、库函库和头文件),安装步骤:博创公司提供了一套开发工具光盘。光盘中有一个安装批处理文件install.sh。运行安装程序后,会自动新建2个目录。,arm2410s目录主要存放:linux内核源代码、各种实验源程序等。,opt目录主要存放:交叉编译器、资源库、头文件等。,1、交叉主编译器:armv4l-unknown-linux-gcc2、主编译器存放的目录:/opt/host/armv4l/bin/3、自动搜索
8、主编译器的方法:在文件/root/.bash_profile中,修改PATH变量,变成 PATH=$PATH:$HOME/bin:/opt/host/armv4l/bin/存盘后运行/root/.bash_profile文件使其生效。,开发环境相关说明:,Linux开发软件的目录介绍/arm2410s/exp 各种实验的源代码/arm2410s/minigui minigui应用程序和库的源代码/arm2410s/kernel-2410s 2410-s平台Linux内核源代码/arm2410s/img/vivi 系统引导程序/arm2410s/img/zImage ARMLinux-2.4内核
9、压缩映象文件/arm2410s/img/root.cramfs 根文件系统象文件/arm2410s/img/yaffs.tar.bz2 demos演示程序的压缩文件/arm2410s/kernel-2410s/include 交叉编译时头文件目录/opt/host/armv4l/bin/armv4l-unknown-linux-gcc 主编译器,在进行嵌入式软件开发调试时,需要使用工具充当目标机的信息输出监视器,这个工具通常是串口通信软件。(1)如果宿主机安装的是Windows操作系统,则可以选择超级终端串口通信软件;(2)缩主机安装的是Linux操作系统,则可以选择minicom串口通信软件
10、。,4、串口通信软件配置,选项:(1)选串口。在linux系统中COM1的设备文件名为/dev/ttyS0。(2)速度等参数。“115200 8N1”,5、Flash程序烧写,在宿主机上编译好引导程序、Linux系统内核、根文件系统、应用程序。然后,将它们烧写到目标机的Flash中。,比较典型的是将Flash分成5个分区,分别用于保存引导程序(BootLoader)、启动参数、系统内核、根文件系统和应用程序等,,1、确定flash空间如何分配。,2、准备好以下软件:引导程序(vivi)-vivi参数(param)内核(kernel)-zImage根文件系统(root)-root.cramfs应
11、用程序-yaffs.tar,(3)硬件连接,Windows操作系统,(4)安装驱动程序(P99),(5)设置超级终端(P99),(6)烧写vivi步骤,第1步:sjf2410/f:vivi,第2步:分区 vivibon part 0 128k 192k 1216k 4288k:m 64704k,第3步:查看分区(bon分区)vivibon part info,No offset size flags bad0:0 x0000 0000 0 x0002 0000 0000 0000 0 128k1:0 x0002 0000 0 x0001 0000 0000 0000 0 64k2:0 x000
12、3 0000 0 x0010 0000 0000 0000 0 1M3:0 x0013 0000 0 x0030 0000 0000 0000 0 3M4:0 x0043 0000 0 x03b0 0000 0000 0001 0 59M5:0 x03F3 0000 0 x000c c000 0000 0000 0 816k,第4步:查看分区(mtd分区)vivi part show,Name offset size flags vivi 0 x0000 0000 0 x0002 0000 0 128kparam 0 x0002 0000 0 x0001 0000 0 64kkernel 0
13、x0003 0000 0 x0010 0000 0 1Mroot 0 x0013 0000 0 x0030 0000 4 3Myaffs 0 x0043 0000 0 x03b0 0000 8 59Mucos 0 x03F3 0000 0 x000c c000 0 816k,第6步:分区后,flash内的数据全部被删除,所以要重新写入vivi,可以采用前面的方法,也可以用 vivi load flash vivi x当出现:Ready for downloading using xmodem Waiting,第6步:分区后,flash内的数据全部被删除,所以要重新写入vivi,可以采用前面的方
14、法,也可以用 vivi load flash vivi x,第7步:烧写入内核 vivi load flash kernel x,第8步:烧写入根文件系统 vivi load flash root x,第9步:烧写入根应用程序 不使用串口,而用ftf服务器,第4章:嵌入式交叉编译环境及系统裁剪,4.1 嵌入式交叉编译环境构建4.2 Bootloader程序4.3Linux操作系统的裁剪和编译,一、初识BootLoadert程序,从Linux系统角度看,通常可以分为四个层次,即:,引导加载程序(BootLoader)Linux内核根文件系统用户应用程序,嵌入式软件系统分四层,嵌入式系统的Boot
15、Loader程序相当于PC中的什么程序?,相当于:BIOS+MBR,大多数BootLoader程序都包括两种不同的操作模式:,启动加载模式(Bootloading)下载模式(Downloading),1、按Enter按进行启动加载模式。2、按其它键进行下载模式。,1、启动加载模式。,2、下载模式。,下载模式能够做什么?,1、分区,2、从宿主机上下载文件到SDRAM或FLASH,3、引导系统,查看FLASH分区命令(part show),BootLoader程序的结构框架分两部分:,Stage1(用汇编语言来实现,主要进行设备的初始化)Stage2下载模式(用C语言来实现,增强程序的移植性和可读
16、性),二、BootLoadert程序结构,Stage1通常包括以下步骤:硬件设备初始化 为Stage2准备RAM空间 拷贝Stage2到RAM中 设置好堆栈 跳转到Stage2的入口,Stage2通常包括以下步骤:初始化本阶段使用到的硬件设备 检测系统内存映射(Memory Map)将Kernel和根文件系统从Flash上读到RAM空间 设置内核启动参数 引导内核,常用的引导程序有:u-bootBlobARMbootRedBootvivi,三、常用的BootLoadert程序,(1)U-Boot U-Boot,全称 Universal BootLoader,是遵循GPL条款的开放源码项目。支持
17、的操作系统:Linux,VxWorks,QNX等。支持的处理器:ARM、PowerPC、MIPS、x86等。源码下载:,(2)Blob Blob是Boot Loader Object的缩写。它遵循GPL,源泉代码完全开放。Blob最初是为一块专用开发板写的(处理器是StrongARM SA-1100)。现在Blob已经被移植到了很多CPU上。源码下载:http:/,(3)ARMBoot Armboot是一个bootloader,是为基于ARM或者StrongARM CPU的嵌入式系统所设计的。它支持多种类型的Flash。源码下载:,(4)RedBoot Redboot 是Red Hat公司开发
18、的一个独立运行在嵌入式系统上的BootLoader程序,是目前比较流行的一个功能、可移植性好的BootLoader。源码下载:http:/sourceware.org/rdboot,(5)vivi vivi 是韩国mizi 公司开发的bootloader,适用于ARM9处理器。目前实验箱上使用的Bootloader是vivi 源码下载:,vivi(下载模式)使用的典型命令load:用于加载文件到内存或Flash中part:显示Flash的分区,包括vivi,kernel,rootfs等的位置param:修改vivi的参数,如核心命令行参数flash:管理flash。boot:启动Linux核心
19、,1、vivi结构 vivi的结构分为两个阶段:Stage1的代码在vivi目录下的arch/s3c2410/head.s中,Stage2的代码从vivi目录下init/main.c的main函数开始。,四、vivi的裁剪与编译,Stage1完成如下任务:(1)关闭WatchDog;(2)禁止所有终端;(3)初始化系统时钟;(4)初始化内存控制寄存器;(5)检查是否从掉电模式唤醒,如果是,则调用WachupStart函数进行处理;(6)点亮所有LED;(7)初始化UART0;(8)将vivi的代码从NAND Flash复制到SDRAM中。,Stage2完成如下任务:(1)打印vivi的信息;(2)调用初始化函数。(3)boot_or_vivi():判断是否按下回车键,若按下,则进入vivi shell;若没有,则执行boot命令,启动内核。(4)boot命令执行后,找到kernel分区,并找它的偏移量和大小,执行boot_kernel()函数,复制内核映像。(4)设置Linux启动参数,打印“Now Booting Linux”。(5)调用call_linux()函数启动内核。,在vivi源程序目录下,使用以下命令:#make distclean#make menuconfig#make生成文件vivi,2、vivi配置及编译,