bootloader:嵌入式BootLoader技术内幕疯狂代码 azycoder/ ĵ:
http:/azycoder/NetworkProgramming/Article33523.html
、引言 ;
在专用嵌入式板子运行 ;GNU/Linux ;系统已经变得越来越流行个嵌入式 ;Linux ;系统
从软件角度看通常可以分为四个层次: ;
1. ;引导加载包括固化在固件(firmware)中 ;boot ;代码(可选)和 ;Boot ;Loader ;
两大部分 ;
2. ;Linux ;内核特定于嵌入式板子定制内核以及内核启动参数 ;
3. ;文件系统包括根文件系统和建立于 ;Flash ;内存设备之上文件系统通常用 ;ram ;dis
k ;来作为 ;root ;fs ;
4. ;用户应用特定于用户应用有时在用户应用和内核层之间可能还会包
括个嵌入式图形用户界面常用嵌入式 ;GUI ;有:MicroWindows ;和 ;MiniGUI ;懂 ;
引导加载是系统加电后运行第段软件代码回忆下 ;PC ;体系结构我们可以知
道PC ;机中引导加载由 ;BIOS(其本质就是段固件)和位于硬盘 ;MBR ;中 ;OS
Boot ;Loader(比如LILO ;和 ;GRUB ;等)起组成BIOS ;在完成硬件检测和资源分配后
将硬盘 ;MBR ;中 ;Boot ;Loader ;读到系统 ;RAM ;中然后将控制权交给 ;OS ;Boot ;Load
erBoot ;Loader ;主要运行任务就是将内核映象从硬盘上读到 ;RAM ;中然后跳转到内核
入口点去运行也即开始启动操作系统 ;
而在嵌入式系统中通常并没有像 ;BIOS ;那样固件(注有嵌入式 ;CPU ;也会内嵌
段短小启动)因此整个系统加载启动任务就完全由 ;Boot ;Loader ;来完成比
课外体育活动如在个基于 ;ARM7TDMI ;core ;嵌入式系统中系统在上电或复位时通常都从地址 ;0x00
000000 ;处开始执行而在这个地址处安排通常就是系统 ;Boot ;Loader ; ;
本文将从 ;Boot ;Loader ;概念、Boot ;Loader ;主要任务、Boot ;Loader ;框架结构以及
题西林壁宋苏轼Boot ;Loader ;安装等四个方面来讨论嵌入式系统 ;Boot ;Loader ;
二、 ;Boot ;Loader ;概念 ;
简单地说Boot ;Loader ;就是在操作系统内核运行之前运行段小通过这段小程
序我们可以化硬件设备、建立内存空间映射图从而将系统软硬件环境带到
个合适状态以便为最终操作系统内核准备好正确环境 ;
通常Boot ;Loader ;是严重地依赖于硬件而实现特别是在嵌入式世界因此在嵌入
式世界里建立个通用 ;Boot ;Loader ;几乎是不可能尽管如此我们仍然可以对 ;Bo
ot ;Loader ;归纳出些通用概念来以指导用户特定 ;Boot ;Loader ;设计与实现 ;
1. ;Boot ;Loader ;所支持 ;CPU ;和嵌入式板 ;
每种不同 ;CPU ;体系结构都有不同 ;Boot ;Loader有些 ;Boot ;Loader ;也支持多种体系 结构 ;CPU
比如 ;U-Boot ;就同时支持 ;ARM ;体系结构和MIPS ;体系结构除了依赖于 ;CPU 体系结构外Boot ;Loader ;实际上也依赖于具体嵌入式板级设备配置这也就是说
对于两块不同嵌入式板而言即使它们是基于同种 ;CPU ;而构建要想让运行在
块板子上 ;Boot ;Loader ;也能运行在另块板子上通常也都需要修改 ;Boot ;Loade
r ;源 ;
2. ;Boot ;Loader ;安装媒介(Installation ;Medium) ;
系统加电或复位后所有 ;CPU ;通常都从某个由 ;CPU ;制造商预先安排地址上取指令
比如基于 ;ARM7TDMI ;core ; ;CPU ;在复位时通常都从地址 ;0x00000000 ;取它第条指 令而基于 ;CPU ;构建嵌入式系统通常都有某种类型固态存储设备(比如:ROM、EEPRO M ;或 ;FLASH ;等)被映射到这个预先安排地址上因此在系统加电后CPU ;将首先执行 ;B oot ;Loader ; ;
下图1就是个同时装有 ;Boot ;Loader、内核启动参数、内核映像和根文件系统映像固
态存储设备典型空间分配结构图 ;
" align=absMiddle>/RTOS/UploadFiles_RTOS/200511/20051130030711799.g ;
图1 ;固态存储设备典型空间分配结构
3. ;用来控制 ;Boot ;Loader ;设备或机制 ;
主机和目标机之间般通过串口建立连接Boot ;Loader ;软件在执行时通常会通过串口来
进行 ;I/O比如:输出打印信息到串口从串口读取用户控制等 ;
4. ;Boot ;Loader ;启动过程是单阶段(Single ;Stage)还是多阶段(Multi-Stage) ;
通常多阶段 ;Boot ;Loader ;能提供更为复杂功能以及更好可移植性从固态存储设
备上启动 ;Boot ;Loader ;大多都是 ;2 ;阶段启动过程也即启动过程可以分为 ;stage ;1
和 ;stage ;2 ;两部分而至于在 ;stage ;1 ;和 ;stage ;2 ;具体完成哪些任务将在下面几篇讨
论 ;
格鲁希5. ;Boot ;Loader ;操作模式 ;(Operation ;Mode) ;
大多数 ;Boot ;Loader ;都包含两种不同操作模式:"启动加载"模式和"下载"模式这种区
别仅对于开发人员才有意义但从最终用户角度看Boot ;Loader ;作用就是用来加载
操作系统而并不存在所谓启动加载模式与下载工作模式区别 ;
启动加载(Boot ;loading)模式:这种模式也称为"自主"(Autonomous)模式也即 ;Boo t ;Loader ;从目标机上某个固态存储设备上将操作系统加载到 ;RAM ;中运行整个过程并
没有用户介入这种模式是 ;Boot ;Loader ;正常工作模式因此在嵌入式产品发布时
赞美老师的四字成语侯Boot ;Loader ;显然必须工作在这种模式下 ;
下载(Downloading)模式:在这种模式下目标机上 ;Boot ;Loader ;将通过串口连接或
网络连接等通信手段从主机(Host)下载文件比如:下载内核映像和根文件系统映像等
从主机下载文件通常首先被 ;Boot ;Loader ;保存到目标机 ;RAM ;中然后再被 ;Boot ; Loader ;写到目标机上FLASH ;类固态存储设备中Boot ;Loader ;这种模式通常在第次
安装内核与根文件系统时被使用;此外以后系统更新也会使用 ;Boot ;Loader ;这种工
作模式工作于这种模式下 ;Boot ;Loader ;通常都会向它终端用户提供个简单命令
行接口 ;
像 ;Blob ;或 ;U-Boot ;等这样功能强大 ;Boot ;Loader ;通常同时支持这两种工作模式而且 允许用户在这两种工作模式之间进行切换比如Blob ;在启动时处于正常启动加载模式
但是它会延时 ;10 ;秒等待终端用户按下任意键而将 ;blob ;切换到下载模式如果在 ;10 ;
秒内没有用户按键则 ;blob ;继续启动 ;Linux ;内核 ;
6. ;BootLoader ;与主机之间进行文件传输所用通信设备及协议 ;
最常见情况就是目标机上 ;Boot ;Loader ;通过串口与主机之间进行文件传输传输协
议通常是 ;xmodem/ymodem/zmodem ;协议中种但是串口传输速度是有限因
此通过以太网连接并借助 ;TFTP ;协议来下载文件是个更好选择 ;
五下语文书
此外在论及这个话题时主机方所用软件也要考虑比如在通过以太网连接和 ;TFT
P ;协议来下载文件时主机方必须有个软件用来提供 ;TFTP ;服务在讨论了 ;BootLoa
钢琴是什么乐器
der ;上述概念后下面我们来具体看看 ;BootLoader ;应该完成哪些任务
--------------------------------------------------------------------------------
由 ;lefthand05 ;在 ;05-08-2004 ;16:04 ;发表: ;
嵌入式BootLoader技术内幕(二)
三、Boot ;Loader ;主要任务与典型结构框架 ;
在继续本节讨论之前首先我们做个假定那就是:假定内核映像与根文件系统映像
都被加载到 ;RAM ;中运行之所以提出这样个假设前提是在嵌入式系统中内核映像
与根文件系统映像也可以直接在 ;ROM ;或 ;Flash ;这样固态存储设备中直接运行但这种 做法无疑是以运行速度牺牲为代价从操作系统角度看Boot ;Loader ;总目标就
是正确地内核来执行 ;
另外由于 ;Boot ;Loader ;实现依赖于 ;CPU ;体系结构因此大多数 ;Boot ;Loader ;都分 为 ;stage1 ;和 ;stage2 ;两大部分依赖于 ;CPU ;体系结构代码比如设备化代码等
通常都放在 ;stage1 ;中而且通常都用汇编语言来实现以达到短小精悍目而 ;sta
ge2 ;则通常用C语言来实现这样可以实现给复杂功能而且代码会具有更好可读性和
可移植性 ;
Boot ;Loader ; ;stage1 ;通常包括以下步骤(以执行先后顺序):
·硬件设备化
·为加载 ;Boot ;Loader ; ;stage2 ;准备 ;RAM ;空间
·拷贝 ;Boot ;Loader ; ;stage2 ;到 ;RAM ;空间中
·设置好堆栈
·跳转到 ;stage2 ; ;C ;入口点
Boot ;Loader ; ;stage2 ;通常包括以下步骤(以执行先后顺序):
·化本阶段要使用到硬件设备
·
检测系统内存映射(memory ;map)
·将 ;kernel ;映像和根文件系统映像从 ;flash ;上读到 ;RAM ;空间中
·为内核设置启动参数
大鱼和小鱼米饭怎么炒好吃·内核 ;
3.1 ;Boot ;Loader ; ;stage1 ;
3.1.1 ;基本硬件化 ;
这是 ;Boot ;Loader ;开始就执行操作其目是为 ;stage2 ;执行以及随后 ;kernel
执行准备好些基本硬件环境它通常包括以下步骤(以执行先后顺序): ;
1.屏蔽所有中断为中断提供服务通常是 ;OS ;设备驱动责任因此在 ;Boot ;Loa
der ;执行全过程中可以不必响应任何中断中断屏蔽可以通过写 ;CPU ;中断屏蔽寄存器 或状态寄存器(比如 ;ARM ; ;CPSR ;寄存器)来完成 ;
2.设置 ;CPU ;速度和时钟频率 ;
3.RAM ;化包括正确地设置系统内存控制器功能寄存器以及各内存库控制寄存器
等 ;
4.化 ;LED典型地通过 ;GPIO ;来驱动 ;LED其目是表明系统状态是 ;OK ;还是 ;
Error如果板子上没有 ;LED那么也可以通过化 ;UART ;向串口打印 ;Boot ;Loader ; Logo ;信息来完成这点 ;
5. ;关闭 ;CPU ;内部指令/数据 ;cache ;
3.1.2 ;为加载 ;stage2 ;准备 ;RAM ;空间 ;
为了获得更快执行速度通常把 ;stage2 ;加载到 ;RAM ;空间中来执行因此必须为加载 ; Boot ;Loader ; ;stage2 ;准备好段可用 ;RAM ;空间范围 ;
由于 ;stage2 ;通常是 ;C ;语言执行代码因此在考虑空间大小时除了 ;stage2 ;可执行映象 大小外还必须把堆栈空间也考虑进来此外空间大小最好是 ;memory ;page ;大小(通