找回密码
 注册
关于网站域名变更的通知
查看: 71|回复: 0
打印 上一主题 下一主题

BootLoader都有几种

[复制链接]

该用户从未签到

跳转到指定楼层
1#
发表于 2023-5-30 14:54 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

EDA365欢迎您登录!

您需要 登录 才可以下载或查看,没有帐号?注册

x
首先区分一下BootLoaderMonitor的概念。严格来说,BootLoader只是引导设备并且执行主程序的固件;而Monitor还提供了更多的命令行接口,可以进行调试、读写内存、烧写Flash、配置环境变量等。Monitor嵌入式系统开发过程中可以提供很好的调试功能,开发完成以后,就完全设置成了一个BootLoader。所以,习惯上大家把它们统称为BootLoader, V  g6 e1 S3 k. b. z9 G
目前,嵌入式系统中广泛应用的BootLoaderU-BootviviblobARMboot等。嵌入式系统中硬件的种类繁多,差距较大,而BootLoader是严重依赖于硬件而实现的。不同的CPU体系需要不同的BootLoader,即便是同一种体系结构,由于其它硬件设备配置的不同,如板卡硬件地址的分配、RAM芯片的型号等,也需要对BootLoader作一定的修改才能使用。因此,开发人员需针对不同的处理器和开发板,对BootLoader进行定制,来实现不同的功能。' T( s6 G& q* {  u
    Linux的开放源码引导程序及其支持的体系结构见表1。5 E' H; ]. q1 X* C& m( g! ^  C% M$ i
1 }+ Z' n- Q+ n3 H6 r2 ~: l  [5 c& C4 b5 H
  开放源码的Linux引导程序" k; u  u3 S+ ~1 f4 {4 A. S" T7 ~- _+ c9 t! L. G
BootLoader" s( d$ k- ]; N0 |" O% q
描述: l1 o( F' p4 K; ~; ]1 M; C4 a* N& j5 y& c% G7 [
x866 }, h3 Q5 {; T% d0 g
: B  I9 O1 M; `+ F3 }, @4 ?9 F
ARM/ m3 x3 q5 A* ]2 V9 z- e/ ~- c4 ^' A: Y0 W2 W4 W+ X. n
PowerPC) X  K3 k& h* p- x/ i- s* K/ e/ Q+ X- ]. o- y7 O0 [  g
LILO
3 }+ q3 S5 N/ [* ^' ?! w8 E
Linux磁盘引导程序! s) u& r- i5 _1 x- E! m8 u7 X' ]* ~# R+ T# Z( i
1 _& {% p4 g$ M9 t2 c# @/ _- l4 c! z* e8 }8 D. D
* t9 B5 ]6 |7 H- r( _7 k2 L+ ~1 C1 U+ k3 a9 d
3 w) K3 m: T$ u( e5 r- j
- g8 }+ k/ B+ r
GRUB3 ]2 h& g  }) e4 d  @: _- N1 A  l8 e8 B2 O$ }8 V6 d
GNULILO替代程序9 G0 B3 h0 h# p! t6 J. v. q' H0 o, n+ O4 s
" w6 Q+ K* ?1 T

6 O! c6 c& f3 G) g
' x2 v0 F* E& Q; h* K
" ^3 K- F6 N' z! n1 }$ u' U3 \; ~6 V
Loadlin4 V! {& x  Z. {' j
DOS引导Linux( y$ X( J2 ]& f6 Z6 @8 n- |6 z
3 x1 J. l" Y) n0 l
) l; q) X9 j4 s0 O8 @  ^. q
4 z4 @4 Y( o, S* X* a
7 R- t  r( V2 f; r$ C& V2 t- c+ a2 e  D2 o" T' a' \; ]4 @4 n# E

: ^+ @2 Z) W) o. H8 Q9 z
ROLO1 `; j- c: \% k) I) a) M
$ ~0 Z4 i; ?  j3 t( B8 d
ROM引导Linux而不需要BIOS5 m, z2 a! B& v, o
. p' v  b/ g0 @* H0 }7 B

; w4 e; U- ]/ }, ]3 R! Y' s5 @
& v  \8 t  n& D' t$ u0 `# w* [3 F2 `) H
! ]3 Y3 R1 t  K# ^6 z- C3 R% t9 x5 U& U2 c" U4 T
Etherboot. Y/ x' G8 r. u# {( P$ ^, n
. s! j6 r( E) b& R4 i
通过以太网卡启动Linux系统的固件+ m( s" z8 U1 K" m' u8 V2 a
# z# a8 ], O9 M' L- }0 B# v
9 s3 r* v0 }3 m( H2 ]3 Y4 @# W9 M+ [4 L1 y, \! V6 r! @
! i' U  ?& E  n5 l8 Z
2 C0 d( G$ y& Y: i: d

) \* p8 C: ]3 l# N/ ^4 F& `/ g
LinuxBIOS1 d5 ?; Z$ E: Z# h3 k- }! a( t( k9 X
完全替代BUISLinux引导程序0 H* P- z- I* y2 [' a; K" n7 G3 P9 B9 ]4 a! y/ ~  {& ~9 X
. w# G# ^* l1 U; x" G9 B9 b& }' A, B+ b6 P

* j6 i6 A, p9 h7 X  p/ \; l8 k

4 q. B% j8 u: m+ \" b" G0 O
BLOB( `6 P# G- j) z3 C/ n9 Y3 }* ~4 L0 o5 D* T% T( _
LART等硬件平台的引导程序3 s# ~& z- B6 d0 ^
) A5 s; V# d/ D! @7 y/ u
+ w, J) h' y3 k# A) X3 V% q* }- m& a3 @* H4 Y
$ `% v7 j; q( o
* E2 A% a/ q! p0 G; j0 B+ o

4 F  N+ d1 N9 o! T* h
U-boot& T, x; @6 e- Y1 ~0 H) \. M- L8 y8 o$ E
通用引导程序5 Q  n  X0 W( E1 M$ H1 ^/ x& o7 w4 |! M
3 _% F, y! m( [% ?* P) q
# ~! u3 {$ I8 O
# F% R/ P) `: a2 ~* P; [
RedBoot+ O% c8 w0 G! O# I& `4 l
2 w  d$ e9 H$ F% U$ y4 {; j
基于eCos的引导程序8 h. _0 k7 [# i3 W
5 y; c8 J8 [( k2 d. r& I
! _0 z3 r+ E) Q$ C7 |5 N- R4 b2 k' G- @" k1 I; B* e  H7 l6 h
7 i! l: _" d& j, G) u+ B5 C7 ?
5 R. k$ Q0 j; f# E
下面,对嵌入式世界里几种常见的BootLoader做一简单介绍。
5 _# O* L6 }; C: D& z. b/ l; X) ]1 Y( }$ q. @
; h8 ^4 s2 J! w: C
1 U-Boot( d. d/ l0 `: D! d& n
( o, h+ i. K5 H2 `/ j$ f- u  }* ]9 s. D$ l: o5 u7 I  u  C5 ^5 ?  e' s
3 v- ^' C; y+ q7 i% a
$ w, s4 ]$ P7 o% u- |! `U-BootUniversal BootLoader)是遵循GPL条款的开放源码项目,是在PPCBoot以及ARMBoot的基础上逐步发展和演化而来,现在U-Boot已经能够支持PowerPCARMX86MIPS等体系结构的上百种开发板,已经成为功能最多、灵活性最强,并且开发最积极的开放源码的BootLoader  e) e9 F9 T, [$ y  Y  G
U-Boot提供大量外设驱动,支持多个文件系统,附带调试、脚本、引导等工具,特别支持Linux,为板级移植做了大量的工作。: W5 }9 c. {- E& X$ O+ b+ h8 t/ j" H) O" s" d
U-Boot源码目录、编译形式与Linux内核很相似,事实上,不少U-Boot源码就是相应的Linux内核源程序的简化,尤其是一些设备的驱动程序,这从U-Boot源码的注释中能体现这一点。但是U-Boot不仅支持嵌入式Linux系统的引导,而且还支持NetBSDVxWorksQNXRTEMSARTOSLynxOS等嵌入式操作系统。
$ X0 J# E( t, n1 G0 `U-Boot可支持的主要功能如下:% K' @& b$ L' O( `9 K
· 系统引导:从FLASH中引导压缩或非压缩系统内核、支持NFS挂载、RAMDISK(压缩或非压缩)形式的根文件系统。
& q% A3 z! s( i5 N0 _· 基本辅助功能:可灵活设置、传递多个关键参数给操作系统内核,适合系统在不同开发阶段的调试要求与产品发布,尤其对Linux支持最为强劲;支持开发板环境参数多种存储方式,如FLASHNVRAMEEPROMCRC32校验,可校验FLASH中内核、RAMDISK镜像文件是否完好。4 h6 o' X" q: f) }: m$ |# C( u
/ b+ T* ~  [+ ^4 N& D+ N" B, C' v6 ?· 设备驱动:驱动的支持包括串口、SDRAMFLASH、以太网、LCDNVRAMEEPROM、键盘、USBPCMCIAPCIRTC等。
& b: l0 I" \0 }/ X7 a& d9 X· 上电自检功能:SDRAMFLASH大小自动检测、SDRAM故障检测、CPU型号。# g+ l5 d4 D3 L' P# o* s$ A' i2 p$ \+ G. q% r2 _) ~$ d) Q0 W
· 特殊功能:XIPeXecute In Place,芯片内执行)内核引导,这样程序可以直接在Flash闪存内运行,不必再把代码读到RAM中。, J+ f" P5 k' l4 W; V
) n# \( u4 B% F/ q7 o. LU-Boot源码包的下载网站:http://sourceforge.net/project/u-boot8 J( o6 ~  W0 r. N# R; L& ^* t
: ^- M( l; T4 t' s" A, U, K" `/ O7 @: ~! N, K" i5 A9 G& b
% K( e, p$ U- N, c& m6 j4 n: c0 S# U0 n: ?$ @+ ~5 R
2 vivi
3 @8 ^. s6 C7 \( h5 e7 S8 T- g8 {" M. T% a$ b- m: q% h  C& x, I( s/ v
7 W& v4 k0 f  m6 q/ C. Z* V8 ?0 s5 L) N
vivi是由韩国Mizi公司开发的一种BootLoader,专门针对ARM9处理器而设计,支持S3C2410x处理器。和所有的BootLoader一样,vivi有两种工作模式,即启动加载模式和下载模式。当vivi处于下载模式时,它为用户提供一个命令行接口,通过该接口可以使用vivi提供的一些命令。+ _. H. s9 s; o& N' j
6 O# x# X" }- Fvivi作为一种BootLoader,其运行过程分成两个阶段。& y8 g2 ?& T4 n& l. q
% q! `- c: _7 j. v/ m$ a8 ]& P第一阶段的代码在vivi/arch/s3c2410/head.s中定义,大小不超过10 KB,它包括从系统上电后在0x00000000地址开始执行的部分。这部分代码运行在Flash中,它包括对S3C2410的一些寄存器、时钟等的初始化并跳转到第二阶段执行。2 e" c" N( _/ ?6 o( g; i) [# {
    第二阶段的代码在vivi\init\main.c中,主要进行一些开发板初始化、内存映射和内存管理单元初始化等工作,最后会跳转到boot_or_vivi()函数中,接收命令并进行处理。8 m6 q8 f7 Z* |: h' c
8 j+ d- r9 e' |/ J2 `
/ H3 i0 {6 J7 `+ |5 l4 j# f: Z: ^" c
( B) p2 v5 K( |) h3 Blob- G: C& f1 b- g) W5 h, [0 B
* ?" j$ ^) ^' R( k2 j
8 {' ^0 ~0 l1 H0 S/ C6 }6 d1 _9 W: q' [5 e2 v! t" x# U' ^
3 r$ P. P+ [" i5 C; KBlobBootLoader Object)是由Jan-Derk BakkerErik Mouw发布,专为StrongARM构架下的LART设计的BootLoader8 e; U8 n* E5 w+ I, D4 T1 ?; S0 n; q5 A, X
Blob支持SA1100LART主板,但用户也可以自行修改移植。Blob也提供两种工作模式,在启动时处于正常的启动加载模式,但是它会延时10秒等待终端用户按下任意键而将Blob 切换到下载模式。如果在10秒内没有用户按键,则Blob继续启动Linux内核。
5 i! x3 }& Q3 Q       Blob功能比较齐全,代码较少,比较适合做修改移植,用来引导Liunx,目前大部分S3C44B0板都用Blob修改移植后来加载uCLinux' X; v& z, a% I, I6 V. ~
) {- ~; r' L* C" M4 [9 O5 y( U( ^! E( Q  K, }
9 Q" N2 P  t( x$ B; G
  k! N% l2 V+ n$ [; I/ [) A4 ARMboot
; {% v* k" b( V$ Y8 l4 k# P! X  h3 a  s: o9 q
  ^, F7 L2 y( ^( V: s+ Z/ b5 {. J7 \6 k, E
ARMboot是一个ARM平台的开源固件项目,它严重依赖于PPCBootARMboot支持的处理器构架有StrongARMARM720TPXA250等,是为基于ARM或者StrongARM CPU的嵌入式系统所设计的。ARMboot的目标是成为通用的、容易使用和移植的引导程序,非常轻便地运用于新的平台上。总得来说,ARMboot介于大、小型BootLoader之间,相对轻便,基本功能完备,缺点是缺乏后续支持。ARMboot发布的最后版本为ARMboot1.1.02002年终止了ARMboot的维护,3 k. Q0 W( Z6 I0 ~) q" U& u
, A) F9 a9 t4 V  O. H0 h0 g9 A, h/ D* b* E
5  Redboot! k$ R  c8 j4 E( ^" f
RedBoot是标准的嵌入式调试和引导解决方案,是一个专门为嵌入式系统定制的引导工具,最初由Redhat开发,是嵌入式操作系统eCos的一个最小版本,是随eCos发布的一个BOOT方案,是一个开源项目。现在交由自由软件组织FSF管理,遵循GPL。集BootLoader、调试、Flash烧写于一体。支持串口、网络下载、执行嵌入式应用程序。既可以用在产品的开发阶段(调试功能),也可以用在最终的产品上(Flash更新、网络启动)。4 W3 [; Q8 c- Z" \
      RedBoot支持的处理器构架有ARMMIPSPowerPCx86等,是一个完善的嵌入式系统BootLoader( p- N( Y2 Y' Y$ o) y9 e
您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

推荐内容上一条 /1 下一条

EDA365公众号

关于我们|手机版|EDA365电子论坛网 ( 粤ICP备18020198号-1 )

GMT+8, 2025-7-29 13:53 , Processed in 0.140625 second(s), 24 queries , Gzip On.

深圳市墨知创新科技有限公司

地址:深圳市南山区科技生态园2栋A座805 电话:19926409050

快速回复 返回顶部 返回列表