启动内核为什么一定要先启动bootloader



有个参考资料:

下面是我的理解,基于上面的补充,如有不对的或者需要补充的地方,欢迎指正。

1、linux一开始的设计是在inter的X86上,是有BIOS的。而bootloader是嵌入式设备才有的,一部分功能就是替代了BIOS。 完成对内核的引导和加载。
2、基于上面的考虑,操作系统在设计之初就是基于BIOS的引导而实现的,所以操作系统是单纯独立的。想想笔记本跟台式机   可以安装相同的Windows系统,但是BIOS一定是不一样的(硬件设计不一样,BIOS是主板设计厂商提供的)。   放在嵌入式设备上也可以这么理解。
3、操作系统的启动是个复杂的过程,单纯依靠硬件的时序触发是不可能完成的。操作系统一般放在非易失的存储介质中,比如在机械硬盘(HDD),固态硬盘(SSD),eMMC,Nand-Flash等,也可以通过网络加载,前提是一定要有代码能够驱动相应的硬件或网络运行,也就是驱动程序(有时还需要支持相应的文件系统读写)。而这部分工作就是BIOS或者bootloader做的。
4、BIOS和OS之间还有一个GRUB,准确来说,bootloader相当于BIOS+GRUB。
   至于为什么需要GRUB,我的理解是(我对这个不熟):
   (1)操作系统的启动需要传递参数,BIOS做不到,GRUB可以做到,BootLoader可以做到。
   (2)磁盘一般有多个分区,操作系统一定不是放在第一个扇区(就是从0开始的地方)。放在哪儿,GRUB知道。
        而BIOS要从0这个地方开始读程序。所以GRUB相当于一个门童。
        Windows上有“启动和故障恢复”,可以选择默认启动的操作系统,意思就是如果安装双系统,需要修改GRUB(增加引导程序)。
        然后在下面就可以选择默认启动的那个操作系统,也可以设置其他参数。
     

跟同事讨论之后,同事提了一点看法:

1、为了更好的启动以及把不动部分提出来,内核是经常要动的,升级失败是很头痛的事情;boot基本做好后不动了,这样uImage升级失败就简单了,所以有时需要3段式启动,
      把变的boot再单独出来,这也是grub的思想。华三的设备基本都是3段式启动,MIPS的cn7130也是,海思内部也有个自己的boot,也属于3段式启动。

你可能感兴趣的:(嵌入式)