1、第4章:嵌入式交叉编译环境及系统裁剪 4.1 嵌入式交叉编译环境构建4.2 Bootloader程序4.3 Linux操作系统的裁剪和编译第4章:嵌入式交叉编译环境及系统裁剪 4.1 嵌入式交叉编译环境构建4.2 Bootloader程序4.3 Linux操作系统的裁剪和编译 在通用计算机上开发软件时,一般是软件开发环境(编译、调试)与软件运行环境相同。(1)什么叫交叉编译?(2)为什么要使用交叉编译?1 1、交叉编译概述、交叉编译概述交叉开发(Cross Developing)的模式是指:开发系统在PC机(一般称为宿主机或host)上,即完成软件的编辑、编译、链接等工作;软件的运行是在嵌入式
2、设备(一般称为目标机或target)上。宿主机目标机交叉编译定义:交叉编译是指:在宿主机上进行软件编辑、编译、链接等,并生成能够在目标机上运行的可执行程序的过程。宿主机目标机 使用交叉编译的原因:由于嵌入式系统的硬件资源有限,不能安装编译所需要的资源。开发机与目标机的不同l体系结构不同体系结构不同l处理能力不同处理能力不同l运行的操作系统不同运行的操作系统不同l输入输出方式不同输入输出方式不同(1)实时在线仿真(2)模拟调试(3)软件调试(3)OCD调试2 2、嵌入式常用的调试方法、嵌入式常用的调试方法(1)实时在线仿真(ICE)方式 实时在线仿真(In-Circuit Emulator,IC
3、E)是一种用于替代目标上CPU的设备,可以执行目标机CPU指令,能够将内部的信号输出到被控的目标机,ICE上的内存也可以被映射到用户的程序空间。这样,即使目标机不存在,也可以进行代码调试。实时在线仿真具有以下优缺点:优点:功能非常强大,软硬件均可做到完全实时在线调试。缺点:价格昂贵。(2)模拟调试 调试工具和待调试的嵌入式软件都在宿主机上运行,由宿主机提供一个模拟的目标运行环境,可以进行语法和逻辑上的调试。优点:简单方便,不需要目标机,成本低。缺点:功能非常有限,无法实时调试。(3)软件调试 宿主机和目标机通过某种接口(通常是串口)连接,宿主机上提供调试界面,待调试软件下载到目标机上运行。这种
4、方式的先决条件是在宿主机和目标机之间建立起通信联系(目标机上需要固化监控程序)将一段称为ROM Monitor的程序固化在目标机上,负责监控目标机上被调试程序的运行。优点:纯软件,价格较低,简单,软件调试能力较强。缺点:需要事先在目标机上烧写监控程序(往往需多次试验才能成功),且目标机能正常工作,功能有限,特别是硬件调试能力较差。(4)OCD方式 OCD(片上调试器)将ICE提供的实时跟踪和运行控制分开,使用很少的实时跟踪功能放弃,而大量使用的运行控制放到目标机的CPU核内,由一个专门的调试控制逻辑模块来实现,并用一个专用的串行信号接口开放给用户。这样,OCD可以提供ICE80%的功能,成本还
5、不到ICE的20%。由于历史原因,OCD有许多不同的实现方式,标准并不统一。比较典型的有:IBM和TI公司提出的连接测试存取组(Joint Test Action Group,JTAG)。Motorola公司提出的后台调试模式(Background Debugging Method,BDM)JTAG仿真器的功能有2种.第一是完成程序仿真调试;第二,完成对Flash存储器的烧写。本课程使用的调试方法是:软件调试方式。其中:ROM Monitor程序是利用JTAG写入Flash存储器。嵌入式交叉编译硬件连接图串口线网线JTAG3 3、交叉编译环境构建、交叉编译环境构建 交叉编译环境构建包括2个部分
6、:第一部分是:宿主机(嵌入式交叉编译环境)PC+Linux+交叉编译器+库函数。第二部分是:目标机(嵌入式软件运行环境)实验箱+引导程序+嵌入式操作系统。方案1:宿主机上应安装的软件有:Linux操作系统软件开发工具包交叉编译工具包宿主机交叉编译软件配置宿主机交叉编译软件配置 方案2:宿主机上应安装的软件有:Windows操作系统+虚拟机(Linux操作系统)+Samba服务软件开发工具包交叉编译工具包串口线(终端方式操作)网线(将硬盘,让实验箱使用)宿主机(host)目标板(target)1、在宿主机上,安装好Linux操作系统 Linux操作系统,如果安装了gcc编译。就可以进行c语言程序
7、编译。1、在宿主机上,安装好Linux操作系统 Linux操作系统,如果安装了gcc编译。就可以进行c语言程序编译。2、安装NFS服务器3、安装交叉编译软件包 主要目的是:提供一套与目标机一致的库函数和编译器。要实现交叉编译需要的软件有:交叉编译工具(一组编译器、库函库和头文件)安装步骤:博创公司提供了一套开发工具光盘。光盘中有一个安装批处理文件install.sh。运行安装程序后,会自动新建2个目录。arm2410s目录主要存放:linux内核源代码、各种实验源程序等。opt目录主要存放:交叉编译器、资源库、头文件等。1、交叉主编译器:armv4l-unknown-linux-gcc2、主编
8、译器存放的目录:/opt/host/armv4l/bin/3、自动搜索主编译器的方法:在文件/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 系统引导程序/a
9、rm2410s/img/zImage ARMLinux-2.4内核压缩映象文件/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)缩主
10、机安装的是Linux操作系统,则可以选择minicom串口通信软件。4 4、串口通信软件配置、串口通信软件配置选项:(1)选串口。在linux系统中COM1的设备文件名为/dev/ttyS0。(2)速度等参数。“115200 8N1”5 5、FlashFlash程序烧写程序烧写 在宿主机上编译好引导程序、Linux系统内核、根文件系统、应用程序。然后,将它们烧写到目标机的Flash中。比较典型的是将Flash分成5个分区,分别用于保存引导程序(BootLoader)、启动参数、系统内核、根文件系统和应用程序等,1、确定flash空间如何分配。2、准备好以下软件:引导程序(vivi)-vivi参
11、数(param)内核(kernel)-zImage根文件系统(root)-root.cramfs应用程序-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 infoNo offset size flags bad0:0 x0000 0000 0 x0002 0000 0000 0000 0 128k1:0 x0002
12、0000 0 x0001 0000 0000 0000 0 64k2:0 x0003 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 showName offset size flags vivi 0 x0000 0000 0 x0002 0000 0 128kparam
13、0 x0002 0000 0 x0001 0000 0 64kkernel 0 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步
14、:分区后,flash内的数据全部被删除,所以要重新写入vivi,可以采用前面的方法,也可以用 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.3 Linux操作系统的裁剪和编译一、初识一、初识BootLoadert程序程序 从Linux系统角度看,通常可以分为四个层次,即:引导加载程序(BootLoader
15、)Linux内核根文件系统用户应用程序嵌入式软件系统分四层 嵌入式系统的BootLoader程序相当于PC中的什么程序?相当于:BIOS+MBR 大多数BootLoader程序都包括两种不同的操作模式:启动加载模式(Bootloading)下载模式(Downloading)1、按Enter按进行启动加载模式。2、按其它键进行下载模式。1、启动加载模式。2、下载模式。下载模式能够做什么?1、分区2、从宿主机上下载文件到SDRAM或FLASH3、引导系统查看FLASH分区命令(part show)BootLoader程序的结构框架分两部分:Stage1(用汇编语言来实现,主要进行设备的初始化)St
16、age2下载模式(用C语言来实现,增强程序的移植性和可读性)二、二、BootLoadert程序结构程序结构Stage1通常包括以下步骤:硬件设备初始化 为Stage2准备RAM空间 拷贝Stage2到RAM中 设置好堆栈 跳转到Stage2的入口Stage2通常包括以下步骤:初始化本阶段使用到的硬件设备 检测系统内存映射(Memory Map)将Kernel和根文件系统从Flash上读到RAM空间 设置内核启动参数 引导内核常用的引导程序有:uu-bootuBlobuARMbootuRedBootuvivi三、常用的三、常用的BootLoadert程序程序(1)U-Boot U-Boot,全称
17、 Universal BootLoader,是遵循GPL条款的开放源码项目。支持的操作系统:Linux,VxWorks,QNX等。支持的处理器:ARM、PowerPC、MIPS、x86等。源码下载:uboot.sourceforge(2)Blob Blob是Boot Loader Object的缩写。它遵循GPL,源泉代码完全开放。Blob最初是为一块专用开发板写的(处理器是StrongARM SA-1100)。现在Blob已经被移植到了很多CPU上。源码下载:sourceforge/projects/blob(3)ARMBoot Armboot是一个bootloader,是为基于ARM或者S
18、trongARM CPU的嵌入式系统所设计的。它支持多种类型的Flash。源码下载:sourceforg/projects/armboot(4)RedBoot Redboot 是Red Hat公司开发的一个独立运行在嵌入式系统上的BootLoader程序,是目前比较流行的一个功能、可移植性好的BootLoader。源码下载:sourceware.org/rdboot(5)vivi vivi 是韩国mizi 公司开发的bootloader,适用于ARM9处理器。目前实验箱上使用的Bootloader是vivi 源码下载:mizivivi(下载模式)使用的典型命令load:用于加载文件到内存或Fl
19、ash中part:显示Flash的分区,包括vivi,kernel,rootfs等的位置param:修改vivi的参数,如核心命令行参数flash:管理flash。boot:启动Linux核心1、vivi结构 vivi的结构分为两个阶段:Stage1的代码在vivi目录下的arch/s3c2410/head.s中,Stage2的代码从vivi目录下init/main.c的main函数开始。四、四、vivi的裁剪与编译的裁剪与编译Stage1完成如下任务:(1)关闭WatchDog;(2)禁止所有终端;(3)初始化系统时钟;(4)初始化内存控制寄存器;(5)检查是否从掉电模式唤醒,如果是,则调用
20、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生成文件vivi2、vivi配置及编译
侵权处理QQ:3464097650--上传资料QQ:3464097650
【声明】本站为“文档C2C交易模式”,即用户上传的文档直接卖给(下载)用户,本站只是网络空间服务平台,本站所有原创文档下载所得归上传人所有,如您发现上传作品侵犯了您的版权,请立刻联系我们并提供证据,我们将在3个工作日内予以改正。