嵌入式系统PPT第4章:交叉编译环境构建和系统移植.ppt
《嵌入式系统PPT第4章:交叉编译环境构建和系统移植.ppt》由会员分享,可在线阅读,更多相关《嵌入式系统PPT第4章:交叉编译环境构建和系统移植.ppt(114页珍藏版)》请在文库网上搜索。
1、第4章:交叉编译环境构建和系统移植4.1嵌入式交叉编译环境构建4.2Bootloader程序4.3 Linux内核移植和编译第4章:嵌入式交叉编译环境及系统裁剪 4.1嵌入式交叉编译环境构建4.2Bootloader程序4.3 Linux内核移植和编译在通用计算机上开发软件时,一般是软件开发环境(编译、调试)与软件运行环境相同。思考以下问题:(1)什么叫交叉编译?(2)为什么要使用交叉编译?1 1、交叉编译概述、交叉编译概述交叉开发(CrossDeveloping)的模式是指:开发系统在PC机(一般称为宿主机或host)上,即完成软件的编辑、编译、链接等工作;软件的运行是在嵌入式设备(一般称为
2、目标机或target)上。宿主机目标机交叉编译定义:交叉编译是指:在宿主机上进行软件编辑、编译、链接等,并生成能够在目标机上运行的可执行程序的过程。宿主机目标机使用交叉编译的原因:由于嵌入式系统的硬件资源有限,不能安装编译所需要的资源。(1)实时在线仿真(2)模拟调试(3)软件调试(3)OCD调试2 2、嵌入式常用的调试方法、嵌入式常用的调试方法(1)实时在线仿真(ICE)方式 实时在线仿真(In-Circuit Emulator,ICE)是一种用于替代目标上CPU的设备,可以执行目标机CPU指令,能够将内部的信号输出到被控的目标机,ICE上的内存也可以被映射到用户的程序空间。这样,即使目标机
3、不存在,也可以进行代码调试。实时在线仿真具有以下优缺点:优点:功能非常强大,软硬件均可做到完全实时在线调试。缺点:价格昂贵。(2)模拟调试调试工具和待调试的嵌入式软件都在宿主机上运行,由宿主机提供一个模拟的目标运行环境,可以进行语法和逻辑上的调试。优点:简单方便,不需要目标机,成本低。缺点:功能非常有限,无法实时调试。(3)软件调试宿主机和目标机通过某种接口(通常是串口)连接,宿主机上提供调试界面,待调试软件下载到目标机上运行。这种方式的先决条件是在宿主机和目标机之间建立起通信联系(目标机上需要固化监控程序)将一段称为ROM Monitor的程序固化在目标机上,负责监控目标机上被调试程序的运行
4、。优点:纯软件,价格较低,简单,软件调试能力较强。缺点:需要事先在目标机上烧写监控程序(往往需多次试验才能成功),且目标机能正常工作,功能有限,特别是硬件调试能力较差。(4)OCD方式 OCD(片上调试器)将ICE提供的实时跟踪和运行控制分开,使用很少的实时跟踪功能放弃,而大量使用的运行控制放到目标机的CPU核内,由一个专门的调试控制逻辑模块来实现,并用一个专用的串行信号接口开放给形。这样,OCD可以提供ICE80%的功能,成本还不到ICE的20%。由于历史原因,OCD有许多不同的实现方式,标准并不统一。比较典型的有:IBM和TI公司提出的连接测试存取组(Joint Test Action G
5、roup,JTAG)。Motorola公司提出的后台调试模式(Background Debugging Method,BDM)嵌入式交叉编译硬件连接图2 2、交叉编译环境构建、交叉编译环境构建交叉编译环境构建包括2个部分:第一部分是:宿主机(嵌入式交叉编译环境)PC+Linux+交叉编译工具链(toolchain-4.4.6)第二部分是:目标机(嵌入式软件运行环境)实验箱+引导程序+嵌入式操作系统。本教材选用的目标机是FS4412,选用的操作系统是Ubuntu 12.04 LTS 64bit,并配有USB、RS232串口(也可以使用USB转串口替代)和至少一路以太网卡接口(RJ45)等。交叉编
6、译环境(交叉工具链)交叉编译环境(交叉工具链)已安装在/usr/local/toolchain/toolchain-4.6.4/bin/目录,如何让他们立即生效?(1)在/etc/bash.bashrc文件最后一行添加exportPATH=$PATH:/usr/local/toolchain/toolchain-4.6.4/bin/(2)source/etc/bash.bashrc(3)arm-none-linux-gnueabi-gcc-vecho$PATH命令是什么意思?3 3、串口通信软件配置串口通信软件配置可以使用串口通信软件来监视和控制目标机。串口通信软件很多,这里介绍“超级终端”软
7、件(1)选择“开始”“所有程序”“附件”“通讯”“超级终端”,弹出“连接描述”对话框,(2)在连接硬件时,通常使用宿主机的第一个串口,即COM1(要根据实际情况决定,如果使用USB转串口线时,则一般不是COM,可以从硬件资源中查看)(3)串口的属性主要包括:波特率、数据位、奇偶校验位,停止位和数据流控制等(属性要与连接的目标机一致)(4)对该窗口的操作就是对目标机的操作(5)目标机开机(图中的信息是目标机的启动提示信息)4、目标机运行环境构建(软件部署)、目标机运行环境构建(软件部署)问题:(1)目标机上运行Linux系统需要那些软件?部署在什么地方?(关机状态)(2)目标机启动Linux的过
8、程?(3)如何部署系统软件?复习一下:(1)PC机运行Windows部署了那些软件?部署在什么地方?(关机状态)(2)PC机启动Windows过程(BIOS、硬盘和内存等在启动过程中的作用)?FS4412目标机运行Linux系统需要的映像文件如下。(1)ubootfs4412.bin:Uboot镜像文件。(2)uImage:Linux(Ubuntu)镜像文件。(3)exynos4412fs4412.dtb:设备树镜像文件。(4)ramdisk.img:根文件系统镜像文件。FS4412目标机需要的软件软件部署启动Linux的过程如何将软件部署到如何将软件部署到Flash上上(1)利用专门的Fla
9、sh烧写设备(2)利用Uboot的命令和环境变量拨码开关启动方式OM2OM3OM5OFFONONeMMC和NFS挂载ONOFFOFFTF/SDFS4412支持的启动方式第一步:使用SD卡启动Uboot,使用命令将Uboot写入到目标机的Flash上。因为在目标机上没有任何程序时,只能选择SD卡启动。第二步:选择eMMC方式启动(因为Flash已经有了Uboot)。使用命令和环境变量,将内核镜像(uImage)、设备树(exynos4412-fs4412.dtb)和文件系统镜像(ramdisk.img)等文件烧写到目标机的Flash中。可以使用Linux系统的TFTP服务来传输文件。如何将软件部
10、署到如何将软件部署到Flash上?上?烧写步骤见教材。第1步:将目标机的“拨码开关”拨到“eMMC”启动方式。第2步:在宿主机Windows操作系统下,打开超级终端。第3步:打开目标机的电源开关,这时窗口界面会出现目标机的启动信息,按任意键停止在Uboot下载模式第4步:在Uboot环境修改环境变量值,输入命令如下。#setenvserverip192.168.100.192/主机的IP地址#setenvipaddr192.168.100.191/目标机的IP地址#saveenv/保存环境变量可以使用print命令查看修改后的环境变量,还可使用ping命令测试宿主机与目标机的网络是否连通。第5
11、步:烧写Uboot镜像文件到目标机Flash上(如不更新Uboot,可以跳过这步)。#tftp40008000u-boot-fs4412.bin/从tftp服务器上下载文件到内存#moviwriteu-boot40008000/将内存中的程序写入u-boot分区第6步:烧写内核镜像到目标机Flash上。#tftp41000000uImage#moviwritekernel41000000第7步:烧写设备树文件到目标机Flash上。#tftp41000000exynos4412-fs4412.dtb#moviwritedtb41000000第8步:烧写文件系统镜像到目标机Flash上。#tftp
12、41000000ramdisk.img#moviwriterootfs41000000300000/后面的参数是烧写大小第9步:设置启动参数。#setenvbootcmdmovireadkernel41000000;movireaddtb42000000;movireadrootfs43000000300000;bootm410000004300000042000000#setenvbootargs#saveenv第10步:重新启动目标机,等待一段时间后,如果会自动进入Linux操作系统,则表示目标机运行环境安装成功。第4章:嵌入式交叉编译环境及系统裁剪 4.1嵌入式交叉编译环境构建4.2Bo
13、otloader程序4.3 Linux内核移植和编译思考:(1)BootLoader的核心任务是什么?(2)系统加电后执行的第一段代码是什么?这段代码一般保存在什么位置?一、初识一、初识BootLoadert程序程序BootLoader的核心任务是:启动内核从Linux系统角度看,通常可以分为四个层次,即:引导加载程序(BootLoader)Linux内核根文件系统用户应用程序嵌入式软件系统分四层嵌入式系统的BootLoader程序相当于PC中的什么程序?相当于:BIOS+MBR大多数BootLoader程序都包括两种不同的操作模式:启动加载模式(Bootloading)下载模式(Downlo
14、ading)1、启动加载模式就是进入了操作系统2、下载模式就是在命令行界面(shell界面)在下载模式,可以通过命令和环境变量设置,完成系统软件部署。例如:查看FLASH分区命令BootLoader程序的结构框架分两部分:Stage1(用汇编语言来实现,主要进行设备的初始化)Stage2下载模式(用C语言来实现,增强程序的移植性和可读性)Stage1通常包括以下步骤:硬件设备初始化为Stage2准备RAM空间拷贝Stage2到RAM中设置好堆栈跳转到Stage2的入口Stage2通常包括以下步骤:初始化本阶段使用到的硬件设备检测系统内存映射(MemoryMap)将Kernel和根文件系统从Fl
15、ash上读到RAM空间设置内核启动参数引导内核常用的引导程序有:uu-bootuBlobuARMbootuRedBootuvivi二、常用的二、常用的BootLoadert程序程序(1)U-BootU-Boot,全称UniversalBootLoader,是遵循GPL条款的开放源码项目。支持的操作系统:Linux,VxWorks,QNX等。支持的处理器:ARM、PowerPC、MIPS、x86等。源码下载:http:/(2)BlobBlob是BootLoaderObject的缩写。它遵循GPL,源泉代码完全开放。Blob最初是为一块专用开发板写的(处理器是StrongARMSA-1100)。现
16、在Blob已经被移植到了很多CPU上。源码下载:http:/ bootm 命令对应就是 cmd_bootm.cdisk对磁盘的支持doc文档目录。Uboot 有非常完善的文档,供用户参考阅读。driver驱动程序,每一个子目录代表一类驱动程序,Uboot 支持的设备驱动程序都放在该目录,如支持的网卡、串口和 USB 等。fs支持的文件系统,一个目录一个文件系统代码,如:cramfs、fat、fdos和jffs2等。include头文件,还有对各种硬件平台支持的汇编文件,系统的配置文件和文件系统文件。lib与体系结构相关的库文件。net网络协议栈相关代码,如:BOOTP 协议、TFTP 协议、R
17、ARP 协议和 NFS 文件系统等等。tools生成Uboot工具,如:mkimage。3Uboot源代码结构Uboot源代码可以在ftp:/ftp.denx.de/pub/uboot/服务器上下载。问题:问题:Uboot源代码支持那些开发板?源代码支持那些开发板?答:查看顶层目录下的boards.cfg文件,文件内容如下:#TargetARCHCPUBoardnameVendorSoC#omap4_pandaarmarmv7pandatiomap4omap4_sdp4430armarmv7sdp4430tiomap4omap5_evmarmarmv7omap5_evmtiomap5s5p_g
18、oniarmarmv7gonisamsungs5pc1xxsmdkc100armarmv7smdkc100samsungs5pc1xxorigenarmarmv7origensamsungexynoss5pc210_universalarmarmv7universal_c210samsungexynosOrigen目目标的含的含义:有一个开:有一个开发板名叫板名叫origen,它是三星公司生,它是三星公司生产的的exynos芯芯片,片,该芯片芯片选用用arm架构中的架构中的armv7版本的内核。版本的内核。问题问题2:Uboot源代码支持很多开发板,如何编译出某个开发源代码支持很多开发板,如何
19、编译出某个开发板上使用的生成板上使用的生成Uboot镜像文件(镜像文件(如:u-boot.bin)?)?编译出origen开发板上使用的Uboot#make distclean#make origen_config 配置配置#make问题问题3:make origen_config(配置配置)完成的具体工作是什么完成的具体工作是什么?make origen_configMakefile文件文件%_config 表示所有以表示所有以.config结尾的文件结尾的文件$(:_config=)将去掉将去掉_configMKCONFIG 执行命令执行命令mkconfig实际上是执行:./mkconfi
20、gorigenmkconfig 的作用的作用a-解析解析boards.cfg文件中文件中origen的的相关数据相关数据。b-针对平台作了一系列链接,创建到平台、开发板相关的头文件的链接。针对平台作了一系列链接,创建到平台、开发板相关的头文件的链接。c-创建顶层创建顶层Makefile包含的文件包含的文件 include/config.mkd-创建开发板相关的头文件创建开发板相关的头文件inlucde/config.hU-Boot的编译流程(执行make命令)a-首先编译cpu/$(CPU)/start.S,对于不同的CPU,还可能编译cpu/$(CPU)下的其他文件;b-然后,对于平台/开发
21、板相关的每个目录、每个通用目录都使用它们个字的Makefile生成相应的库;c-将a、b步骤生成的.o.a文件按照board/$(BOARDDIR)/config.mk文件中指定的代码段起始地址、board/$(BOARDDIR)/config.mk文件中指定的代码段起始地址、board/$(BOARDDIR)/U-Boot.lds链接脚本进行链接。d-第c步得到的是ELF格式的U-Boot,后面的Makefile还会将它转换成二进制格式、S-Record格式。4Uboot启动流程第一阶段:第一阶段:a-设置cpu工作模式为SVC模式b-关闭中断,mmu,cachev-关看门狗d-初始化内存,
22、串口e-设置栈f-代码自搬移g-清bssh-跳c第二阶段第二阶段a-初始化外设,进入超循环b-超循环处理用户命令Uboot的程序入口:在Uboot源码中有一个arch/arm/cpu/u-boot.lds文件,这是链接脚本文件,由它指定Uboot的入口。第一阶段的文件:第一阶段的文件:(1)arch/arm/cpu/armv7/start.S1.设置CPU为SVC模式2.关闭中断,MMU,Cache跳转到lowlevel_init函数,该函数在lowlevel_init.S文件中。文件中。(2)board/samsung/origen/lowlevel_init.S3.关闭看门狗4.初始化内存
23、,串口串口5.设置栈6.代码自搬移7.清BSS8.跳转到C入口?跳转到_main函数,该函数在crt0.S文件中。第二阶段的文件:第二阶段的文件:(1)arch/arm/lib/crt0.S初始化C运行环境:_main函数所在处,初始化SP,为C语言准备,代码重定位,清BSS,设置R0R1R2R8相应寄存器跳转到board_init_f(),该函数在board.c文件中。(2)arch/arm/lib/board.cboard_init_f函数,填充GD结构体,初始化外设,执行完成后,返回。(3)arch/arm/lib/crt0.S代码重定位代码自搬移跳转到board_init_r(),该函
24、数board.c文件中。(4)arch/arm/lib/board.cboard_init_r()函数532行enable_caches();很多紧急工作都做完了,可以打开cache了535行board_init();关键关键!这个就是板级定制文件的这个就是板级定制文件的origen.c的入口函数的入口函数651行interrupt_init();中断初始化667行eth_initialize(gd-bd);网卡初始化,函数的实现在net/eth.c,会回调板级origen.c中的board_eth_init()703行for(;)main_loop();执行超循环。main_loop()的实
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 嵌入式 系统 PPT 交叉 编译 环境 构建 移植