bootloader和bootstrap的区别

bootloader和bootstrap的区别

在 《embedded linux primer 》上看到的,其实还有一些分歧和不精确的地方,
比如bootstrap 和bootstrap loader似乎在PC上还有区别,不过还是不影响理解了
http://www.devbone.com/leadbbs/MINI/Default.asp?100-2246-0-0-0-0-0-a-.htm
又如RedBoot(RedHat Embedded Debug and Bootstrap),本质是一个bootloader但名字又有bootstrap,让人郁闷
http://sourceware.org/redboot/

这里仅限于嵌入式+ARM+Linux环境

bootloader 翻译为 (第一阶段)引导装入程序
bootstrap loader 翻译为 第二阶段引导装入程序

bootloader不用多解释都能理解--上电后执行的第一个程序,它绝对不会依赖内核。比如uboot、vivi
bootstrap,第二阶段引导装入程序,属于内核代码(没有被编译进vmlinux,但是可执行的镜像如zImage中含有bootstrap ),充当bootloader和内核镜像之间的纽带。
bootstrap通常会校验内核镜像、解压缩内核镜像、重新部署内核镜像到内存、为内核执行提供合适的上下文(无非是关中断、开指令cache和数据cache、设置c语言运行环境)

执行流程
上电-->bootloader -->bootstrap(head.o)-->内核vmlinux(head.o)-->内核start_kernel(main.o)
以上两个head.o并不相同
bootstrap用的是/arch/arm/boot/compressed/head.S
内核vmlinux用的是/arch/arm/kernel/head.S
虽然都是head.o,但是不在一个时代了,自此区分开了bootstrap和内核vmlinux
等于你看到Uncompressing Linux... done, booting the kernel. 还属于bootstrap
等到打印出第二行内核版本信息的时候,就已经是真正的内核main.o的时代了

最后配合原书的图再说一下

一个严格意义上的内核,make的一个最重要的生成文件 vmlinux
去掉了符号、标记和注释后生成了image
gzip压缩后变成piggy.gz
接下来,一个名为piggy.s的文件被汇编成piggy.o
非常有意思的是它仅有7行代码,其实就只有把piggy.gz 包含进来的作用
.section .piggydata,#alloc
           .globl input_data
   input_data:
           .incbin "arch/arm/boot/compressed/piggy.gz"
           .globl input_data_end
   input_data_end:

接着piggy.o同misc.o、head.o等属于bootstrap的代码一起链接成为zImage等可以被引导的合成镜像。
其中misc.o负责解压缩、head.o head_xx.o 负责进行内核上下文的初始化

  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值