




已阅读5页,还剩50页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1,2,3,Bootloader几种发布的BootloaderBootloader工作模式Bootloader启动过程viviBootloader源代码分析viviBootloader接口命令vivi源代码修改移植,PART3Bootloader,4,5,6,7,3.1Bootloader简介,一、什么是bootloader(引导加载程序)Bootloader,为引导加载程序,是嵌入式系统加电后运行的第一段代码,相当于PC机的BIOS。Bootloader的位置:通常固化在硬件上的某个固态存储设备上,加电后自启动。,典型的嵌入式系统组成,Bootloader在系统中的位置,Bootloader功能:初始化硬件设备、建立内存空间的映射图(有的CPU没有内存映射功能如S3C44B0 x),将系统的软、硬件环境带到一个合适的状态,以便为最终调用操作系统内核或用户应用程序准备好正确的环境。,通常的硬件初始化工作:关闭处理器内部指令/数据cache等关闭中断关闭看门狗配置PLL配置内存初始化各工作模式的堆栈配置中断拷贝RW段,初始化ZI段,Bootloader的地址:在嵌入式系统中,系统加电复位后,几乎所有的CPU都从由复位地址上取指令。比如,基于ARM处理器核的CPU在复位时通常都从地址0 x00000000取它的第一条指令。在这个地址处安排的就是Bootloader。,从44binit.s开始运行ENTRYbResetHandler;fordebugbHandlerUndef;handlerUndefbHandlerSWI;SWIinterrupthandlerbHandlerPabort;handlerPAbortbHandlerDabort;handlerDAbortb.;handlerReservedbHandlerIRQbHandlerFIQ,back,Bootloader是严重地依赖于硬件而实现的。每种不同体系结构的处理器都有不同的Bootloader。不过Bootloader的发展也趋于支持多种体系结构,如现在比较成熟的vivi、RedBoot和U-Boot等。,3.2几种发布的Bootloader,1、vivivivi是韩国Mizi公司开发的Bootloader,适用于ARM9处理器。2、RedBootRedBoot即红帽(RedHat)嵌入式调试引导程序,是一种用于嵌入式系统的独立开放源代码引导/装载器。3、U-BootU-Boot(UniversalBootloader)由德国DENX小组开发,是一款目前功能较为强大的开源Bootloader程序,它支持多种处理器平台,包括ARM、PowerPC、MIPS等。,back,3.3Bootloader操作模式,大多数Bootloader都有两种不同的操作模式:“启动加载”模式和“下载”模式。其区别对于开发人员才有意义。从最终用户的角度看,Bootloader的作用就是用来加载操作系统,而并不存在所谓的启动加载模式与下载模式的区别。,1、启动加载(Bootloading)模式启动加载模式称为“自举”(Autonomous)模式。即Bootloader从目标机上的某个固态存储设备上将操作系统加载到RAM中运行,整个过程并没有用户的介入。启动加载模式是Bootloader的正常工作模式,在嵌入式产品发布的时侯,Bootloader必须工作在这种模式下。,2、下载(Downloading)模式下载方式:在这种模式下,目标机上的Bootloader将通过串口连接或网络连接等通信手段从主机下载文件。下载内容及存储:主要是下载内核映像和根文件系统映像等。从主机下载的文件通常首先被Bootloader保存到目标机的RAM中,然后再被Bootloader写到目标机上的FLASH类固态存储设备中。,下载模式应用场合:Bootloader的这种模式通常在第一次安装内核与根文件系统时被使用;此外,以后的系统更新也会使用到这种工作模式。用户应用接口:工作于这种模式下的Bootloader通常都会向它的终端用户提供一个简单的命令行接口。如在RedBoot下,将出现“RedBoot”提示符;在viviBootloader下出现“vivi”提示符。,下载(Downloading)模式示例,RedBoot的Bootloader像RedBoot或U-Boot等功能强大的Bootloader通常都可同时支持这两种工作模式,而且允许用户在这两种工作模式之间进行切换。比如,RedBoot在启动时处于正常的启动加载模式,但是它会延时3秒等待终端用户按下任意键而将RedBoot切换到下载模式。如在等待时间内没有接收到用户按键,则继续启动Linux内核。,back,3.4Bootloader启动过程,Bootloader的启动可以分为两个阶段1、第一阶段阶段1主要包含依赖于CPU体系结构及硬件设备的初始化等。通常都用汇编语言来实现。这个阶段的任务有5:(1)、基本的硬件设备初始化这是Bootloader一开始就执行的操作,其目的是为阶段2的执行、以及随后kernel的执行准备好一些基本的硬件环境。,它通常包括以下工作:关闭处理器内部指令/数据cache等关闭中断关闭看门狗配置PLL配置内存初始化各工作模式的堆栈配置中断拷贝RW段,初始化ZI段,ARM7引导程序示例,(2)、为阶段2代码准备RAM空间为了获得更快的执行速度,通常把阶段2的代码加载到RAM空间中来执行。准备RAM空间考虑的因素:阶段2代码大小、堆栈、页大小(4KB的倍数)、安排位置等。(3)、拷贝阶段2代码到RAM空间(4)、设置好堆栈堆栈指针sp设置在1MB的RAM空间的最顶端(堆栈向下生长)。(5)、跳转到阶段2的C程序入口点在上述一切都就绪后,就可以跳转到Bootloader的stage2去执行了。,Bootloader的stage2可执行映像刚被拷贝到RAM空间时的系统内存布局,2、第二阶段阶段2通常用C语言来实现,以便实现更复杂的功能,也使程序有更好的可读性和可移植性。这个阶段的主要任务有5:(1)、初始化本阶段要使用到的硬件至少初始化一个串口,以便和终端用户进行I/O输出信息等。,(2)、检测系统内存映射(memorymap)所谓内存映射,就是指在整个物理地址空间中有哪些地址范围被分配用来作为系统的RAM单元。为后面使用RAM、运行程序做好准备。(3)、将kernel和根文件系统映像从flash读到RAM空间,(4)、为kernel设置启动参数这是在调用内核之前应该做的准备工作。Linux2.4.x以后的内核都期望以标记列表(taggedlist)的形式来传递启动参数。启动参数标记列表方法:以ATAG_CORE标记开始,以ATAG_NONE标记结束。在嵌入式Linux系统中,通常需要由BootLoader设置的启动参数有:ATAG_CORE、ATAG_MEM(内存映射)、ATAG_NONE等。,(5)、调用内核Bootloader调用Linuxkernel的方法是直接跳转到内核的第一条指令处。在跳转时必须满足下列条件:1)、CPU寄存器的设置:R0为0;R1为机器类型ID;R2为启动参数,标记列表在RAM中的起始基地址。(机器类型参见linux/arch/arm/tools/mach-types目录)2)、CPU模式:CPU必须设置为SVC模式,必须禁止中断(IRQs和FIQs)。3)、MMU和Cache的设置:MMU必须关闭;指令Cache可以打开也可以关闭;数据Cache必须关闭。,back,3.5viviBootloader源码分析,vivi是韩国Mizi公司开发的Bootloader,适用于ARM9处理器。vivi有两种工作模式,在启动时可以选择。在vivi启动时,通过串行口发出如下信息:PressReturntostarttheLinuxnow,anyotherkeyforvivi按回车键启动LinuxOS,按其它键进入vivi命令接口模式,可以使用vivi提供的命令进行一些操作。,一、vivi源代码目录结构vivi源代码包含的目录有:arch、Documentation、drivers、init、include、lib、scripts、test、util等10目录,共300多个文件。各个目录内容如下:1、arch(architecture)目录它下面的文件为与CPU硬件相关的初始化代码,此目录包含了所用vivi支持的CPU。一般只包含S3C2410 x的文件。2、Documentation目录其下文件为vivi使用指南。3、drivers目录存放的为MTD(memorytechnologydevice内存技术设备)(数据存储媒质)设备读写控制文件和串行口操作文件,对串行口支持xmodem和ymodem协议。4、include目录存放所有的头文件,包括S3C2410微处理器的和S3C2410开发板的头文件。,5、init目录该目录下是系统初始化文件main.c、version.c,后者是vivi版本信息,main.c为vivi整个初始化的结构。6、lib目录该目录下是公共应用及接口代码,如时钟功能文件time.c,堆栈初始化文件heap.c等文件。7、scripts目录该目录存放的是系统配置需要的脚本文件,如menuconfig和configue文件。8、CVS目录所有的目录下面都有一个CVS目录,存放的是该目录的路径和它的子目录。,二、vivi源代码文件与功能结构vivi源代码文件:1、vivi/arch/s3c2410/head.s2、一段过渡,实现循环调用,main返回后重新复位LDRSP,DW_STACK_STARTMOVFP,#0MOVA2,#0BLMAINMOVPC,#FLASH_BASE;main返回后重新复位3、vivi/init/main.cvivi源代码示例,back,3.6viviBootloader接口命令,vivi有两种工作模式,一种是“启动加载”模式,另一种是命令行模式。利用串行口与主机的连接,可以进行命令行操作。vivi启动后,通过串行口发出如下信息:PressReturntostarttheLinuxnow,anyotherkeyforvivi按下除了“Enter”之外的键,便可进入命令行模式。vivi的接口命令有5条。,1、load-下载文件命令功能:将二进制文件下载到Flash或RAM格式:load|media_type:存储器类型,Flash或RAMpartname:分区名称addrsize:下载的地址及占用空间大小x|y|z:文件的传输协议。x表示采用xmodem协议,y表示采用ymodem协议,z表示采用zmodem协议。目前vivi仅支持xmodem协议。,例1:viviloadflashkernelx表示下载压缩的内核映像文件zImage到flash存储器的内核分区中,采用xmodem传输协议。例2:viviloadflashucosx,2、part-MTD分区操作命令操作命令:显示、增加、删除、复位、保存MTD分区等。各个命令格式:partshow:显示分区信息partdel:删除指定的分区partreset:恢复分区的默认值partsave:在flash中保存分区和参数值,增加新的分区partadd:partname:新分区名称offset:新分区的偏移地址size:新分区的大小flag:新分区的类型,可以是JFFS2、BONFS,3、param-设置或查看分区参数命令查看分区参数:paramshow设置启动等待按键延迟:paramsetboot_delayn(s)设置通信初始化超时:paramsetxmodem_initial_timeoutm(s),4、boot-引导内核命令格式:bootmedia_type|media_type:存储器类型,flash或RAMpartname:内核所在分区名称addr:内核所在器件的偏移地址size:内核的大小若boot(无参数),则从kernel内核对应的分区中(kernel)读取内核映像启动。,例如:1、vivibootnand0 x80000内核在nandflash中,偏移地址为0 x80000,大小为缺省值0 xc00002、vivibootnor0 x800003、vivibootucos,5、flash-flash存储器管理命令擦除flash数据格式:flasherase|说明:对flash只有擦除命令。例如:flasherase0 x800000 xc0000,vivi接口命令,back,3.7vivi源码的修改移植,vivi的移植方法步骤:对vivi进行修改移植对vivi进行配置对vivi进行编译下载、运行vivi,一、对vivi进行修改移植设Linux系统的目录结构为:cygwinfriendly-armcrosstoolkernelvivi,1、修改vivi中与硬件相关的部分需要修改:/friendly-arm/vivi/arch/s3c2410/head.s(启动代码)/friendly-arm/vivi/include/s3c2410.h(接口寄存器地址)/friendly-arm/vivi/include/platform/smdk2410.h(接口寄存器值)文件smdk2410.h的内容是针对开发板的硬件配置的,主要有:时钟设置、存储器初始化、通用I/O口初始化、UART初始化、vivi初始配置等。根据自己的目标板的实际情况进行设置即可。,2、修改vivi/Makefile(1)修改交叉编译库和头文件1)修改编译器路径:将:CROSS_COMPILE=/opt/host/armv4l/bin/armv4l-unknown-linux-修改为:CROSS_COMPILE=arm-linux-gcc的路径如:CROSS_COMPILE=/friendly-arm/crosstool/arm-linux/gcc-2.95.3-glibc-2.2.3/bin/arm-linux-,2)修改编译器库文件路径:将:ARM_GCC_LIBS=/opt/host/armv4l/bin/gcc-lib/armv4l-unknown-linux/2.95.2修改为:ARM_GCC_LIBS=符合本机的路径如:ARM_GCC_LIBS=/friendly-arm/crosstool/arm-linux/gcc-2.95.3-glibc-2.2.3/lib/gcc-lib/arm-linux/2.95.3,3)增加交叉编译时头文件的搜索路径:LIBC_INCLUDE_DIR=本机的include的路径如:LIBC_INCLUDE_DIR=/friendly-arm/crosstool/arm-linux/gcc-2.95.3-glibc-2.2.3/include,(2)Linux内核包含文件修改Linux头文件所在路径将:LINUX_INCLUDE_DIR=/opt/host/armv4l/include改为:LINUX_INCLUDE_DIR=符合本机的如:LINUX_INCLUDE_DIR=/friendly-arm/kernel/include,3、支持NorFlash启动的修改(vivi/arch/s3c2410/smdk.c)(1)Norflash分区对于一个嵌入式系统,可能会采用Norflash、Nandflash、SDRAM等多种介质构成存储器系统,Norflash(如1、2MB)用于存放、运行bootloader,Nandflash用于存放操作系统、其它系统软件、应用程序和各种文件,SDRAM用于运行程序和存放数据。,修改方法:在vivi/arch/s3c2410/smdk.c中的分区代码,添加上Norflash分区:#ifdefCONFIG_S3C2410_AMD_BOOTmtd_partition_tdefault_mtd_partitions=name:vivi,offset:0,size:0 x00020000,flag:0,name:param,offset:0 x00020000,size:0 x00010000,flag:0,name:kernel,offset:0 x00030000,size:0 x000C0000,flag:0,name:root,offset:0 x00100000,size:0 x00140000,flag:MF_BONFS;#endif,(2)内核启动参数设置经过上面修改,系统板可以从Nandflash中启动Linux,也可以从Norflash中启动Linux,另外还需要修改启动命令:,#ifdefCONFIG_S3C2410_NAND_BOOTCharLinux_cmd=noinitrdroot=/dev/bon/2init=/linuxrcconsole=tty1console=ttyS0;#elseCharLinux_cmd=noinitrdroot=/dev/mtdblock/3init=/linuxrcconsole=tty1console=ttyS0;,式中启动命令:noinitrd:不使用ramdisk;root:根文件系统所在的MTD分区init:内核运行入口命令文件console:内核信息输出控制台ttyS0表示串行口;tty1表示虚拟终端LCD。说明:关于Linux启动命令的参数,可以参考Kernel/Documentatio/下面的文件kernel-parameters.txt。,4、增加一种下载操作loadflashj
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 部队培训安全保密协议课件
- 社区服务边缘智能应用-洞察及研究
- 湖北省黄石市大冶市2024-2025学年七年级下学期期末考试数学试卷(含答案)
- 安徽省黄山市2024-2025学年高二上学期期末质量检测物理试卷(含答案)
- 部门安全培训需求课件
- 遨游汉字王国课件
- 基于循环经济理念的分条带钢边角料高值化再利用工艺创新图谱
- 基于代谢组学的前列康片多靶点作用机制网络图谱构建
- 培养基配方迭代与专利壁垒下的中小企业研发困境
- 国际标准体系下高强浇注料出口认证壁垒突破与质量追溯体系重构
- 南通市事业单位招聘笔试真题2024
- 铁路设备企业数字化转型与智慧升级战略研究报告
- 化妆工具、彩妆产品的认识及用途
- 电梯自动化与智能化技术的前沿探索
- 物料计划控制管理
- 2025年万达商业地产租赁合同标准版
- 感染性腹泻病例演示文档
- 涂塑钢管焊接施工方案
- DB21-T 4079-2024 畜禽养殖场污水贮存设施建设规范
- 诚信培训教育课件
- 人教版八年级上册历史的知识点
评论
0/150
提交评论