欢迎来到天天文库
浏览记录
ID:59208382
大小:418.50 KB
页数:43页
时间:2020-09-26
《第5章 嵌入式bootloaderppt课件.ppt》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、嵌入式Linux的构建及应用开发©2005博创科技北京博创兴业科技有限公司BEIJNGUNIVERSALPIONEERINGTECHNOLOGYCo.,LTD博创科技嵌入互动第2讲嵌入式BootLoader技术1324Bootloader的概念BootLoader的操作模式主要任务与典型结构框架Linux的Bootloader(vivi)5BLOB简介2.1Bootloader的概念BootLoader就是在操作系统内核运行之前运行的一段小程序。通过它,我们可以初始化硬件设备、建立内存空间的映射图,从而将系统的软硬
2、件环境带到一个合适的状态,以便为最终调用操作系统内核准备好正确的环境。通常,BootLoader是严重地依赖于硬件而实现的,特别是在嵌入式世界。因此,在嵌入式世界里建立一个通用的BootLoader几乎是不可能的。尽管如此,我们仍然可以对BootLoader归纳出一些通用的概念来,以指导用户特定的BootLoader设计与实现。BootLoader所支持的CPU和嵌入式板通常,每种CPU体系结构都有不同的BootLoader。有些BootLoader也支持多种体系结构的CPU,比如U-Boot就同时支持ARM体系结
3、构和MIPS体系结构。移植的工作,Bootloader的板级移植BootLoader的安装媒介系统加电或复位后,所有的处理器通常都从某个预先安排的地址上取指令。比如,ARM在复位时从地址0x0取指。嵌入式系统中通常都有某种类型的固态存储设备(比如:ROM、EEPROM或FLASH等)被映射到这个预先安排的地址上。因此在系统加电后,处理器将首先执行BootLoader程序Bootloader是最先被系统执行的程序固态存储设备的典型空间分配结构BootLoader的控制方式主机和目标机之间一般通过串口建立连接,Boot
4、Loader软件在执行时通常会通过串口来进行通讯,比如:输出打印信息到串口,从串口读取用户控制字符也可以通过JTAG等其他接口通讯2.2BootLoader的操作模式大多数BootLoader都包含两种不同的操作模式:启动加载模式下载模式最终用户的角度看,BootLoader的作用就是用来加载操作系统,而并不存在所谓的启动加载模式与下载工作模式的区别启动加载模式启动加载模式,称为“自主”(Autonomous)模式BootLoader从目标机上的某个固态存储设备上将操作系统加载到RAM中运行,整个过程并没有用户的介
5、入。这种模式是BootLoader的正常工作模式,因此在嵌入式产品发布的时侯,BootLoader显然必须工作在这种模式下。下载模式在下载模式下,目标机上的BootLoader将通过串口连接或网络连接等通信手段从主机下载文件,如:下载内核映像和根文件系统映像等从主机下载的文件通常首先被BootLoader保存到目标机的RAM中,然后再被BootLoader写到目标机上的FLASH类固态存储设备中。这种模式通常在第一次安装内核与根文件系统时被使用;此外,以后的系统更新也会使用BootLoader的这种工作模式。工作于
6、这种模式下的BootLoader通常都会向它的终端用户提供一个简单的命令行接口。BootLoader与主机通信串口传输,传输协议通常是xmodem/ymodem/zmodem。程序简单,传输的速度比较慢,115200bps通过以太网传输是个好方法。TFTP协议是最常见的方式2.3BL的主要任务与典型结构框架大多数BootLoader都分为stage1和stage2两大部分。依赖于处理器体系结构和板级初始化的代码,通常都放在stage1中,用汇编言实现而stage2则通常用C语言来实现,这样可以实现更复杂的功能,而且
7、代码会具有更好的可读性和可移植性。BootLoader的stage1通常包括以下步骤(以执行的先后顺序):硬件设备初始化。为加载BootLoader的stage2准备RAM空间。拷贝BootLoader的stage2到RAM空间中。设置好堆栈。跳转到stage2的C入口点。BootLoader的stage2(1/2)通常包括以下步骤(以执行的先后顺序):初始化本阶段要使用到的硬件设备。检测系统内存映射(memorymap)。将kernel映像和根文件系统映像从flash上读到RAM空间中。为内核设置启动参数。调用内
8、核。BootLoader的stage2确(2/2)stage2的代码通常用C语言来实现,以便于实现更复杂的功能和取得更好的代码可读性和可移植性。与普通C语言应用程序不同的是,在编译和链接bootloader这样的程序时,我们不能使用glibc库中的任何支持函数。2.4Linux的Bootloader系统配置、中断接管、引导装载内核、根文件系统、参数传递、内核
此文档下载收益归作者所有