- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
嵌入式系统讲义第一章嵌入式系统概述-Read
嵌入式系统讲义第6章 嵌入式系统软件移植与Linux下程序开发;本章主要内容;6.1 Bootloader 及vivi移植;建立交叉编译环境;6.1.1 Bootloader简介; Bootloader在软件的层次位置; Bootloader的地址:在嵌入式系统中,系统在上电或复位时从地址0x0000,0000处开始执行,在这个地址处安排的就是Bootloader。
Bootloader是严重地依赖于硬件而实现的。每种不同体系结构的处理器都有不同的Bootloader。不过Bootloader的发展也趋于支持多种体系结构,如现在比较成熟的vivi、RedBoot和U-Boot等。 ;几种发布的Bootloader;6.1.2 Bootloader操作模式 ;1、启动加载(Bootloading)模式
启动加载模式称为“自举”(Autonomous)模式。即Bootloader从目标机上的某个固态存储设备上将操作系统加载到 RAM 中运行,整个过程并没有用户的介入。
启动加载模式是 Bootloader的正常工作模式,在嵌入式产品发布的时侯,Bootloader必须??作在这种模式下。 ;2、下载(Downloading)模式
下载方式:在这种模式下,目标机上的Bootloader将通过串口连接或网络连接等通信手段从主机下载文件。
下载内容及存储:主要是下载内核映像和根文件系统映像等。从主机下载的文件通常首先被Bootloader保存到目标机的RAM中,然后再被 Bootloader写到目标机上的FLASH 类固态存储设备中。; 下载模式应用场合:Bootloader的这种模式通常在第一次安装内核与根文件系统时被使用;此外,以后的系统更新也会使用到这种工作模式。
用户应用接口:工作于这种模式下的Bootloader通常都会向它的终端用户提供一个简单的命令行接口。 如在RedBoot下,将出现“RedBoot”提示符;在vivi Bootloader 下出现“vivi”提示符。;2、下载(Downloading)模式
;RedBoot的Bootloader
像RedBoot或U-Boot等功能强大的Bootloader通常都可同时支持这两种工作模式,而且允许用户在这两种工作模式之间进行切换。
比如,RedBoot在启动时处于正常的启动加载模式,但是它会延时3秒等待终端用户按下任意键而将RedBoot切换到下载模式。如在等待时间内没有接收到用户按键,则继续启动 Linux 内核。 ;6.1.3 Bootloader启动过程; 它通常包括以下工作:屏蔽所有的中断、设置 CPU 的速度和时钟频率、关闭处理器内部指令/数据cache等。; (2)、为阶段2代码准备RAM空间
为了获得更快的执行速度,通常把 阶段2 的代码加载到 RAM 空间中来执行。
准备RAM空间考虑的因素:阶段2代码大小、堆栈、页大小(4KB的倍数)、安排位置等。
总的空间有1MB足够,安排在RAM的顶端较恰当。; (3)、拷贝阶段2代码到RAM空间
(4)、设置好堆栈
堆栈指针sp设置在1MB 的 RAM 空间的最顶端(堆栈向下生长)。
(5)、跳转到阶段2的C程序入口点
在上述一切都就绪后,就可以跳转到 Bootloader 的 stage2 去执行了。; Bootloader的阶段2可执行映像刚被拷贝到RAM空间时的系统内存布局 ;2、第二阶段
阶段2通常用C语言来实现,以便实现更复杂的功能,也使程序有更好的可读性和可移植性。这个阶段的主要任务有5:
(1)、初始化本阶段要使用到的硬件
至少初始化一个串口,以便和终端用户进行 I/O 输出信息等。; (2)、检测系统内存映射(memory map)
所谓内存映射,就是指在整个物理地址空间中有哪些地址范围被分配用来作为系统的 RAM 单元。为后面使用RAM、运行程序做好准备。
(3)、将kernel和根文件系统映像从flash读到RAM空间; (4)、为kernel设置启动参数
这是在调用内核之前应该做的准备工作。Linux 2.4.x 以后的内核都期望以标记列表(tagged list)的形式来传递启动参数。
启动参数标记列表方法:以ATAG_CORE标记开始,以ATAG_NONE标记结束。
在嵌入式 Linux 系统中,通常需要由 Boot Loader 设置的启动参数有:ATAG_CORE、ATAG_MEM(内存映射)、ATAG_NONE等。; (5)、调用内核
Bootloader调用Linux kernel的方法是直接跳转到内核的第一条指令处。在跳转时必须满足下列条件:
1
文档评论(0)