本文链接:https://blog.csdn.net/u012351051/article/details/50557899

受单片机和ARM7等小型CPU设备编程思维的影响,开始对嵌入式linux和PC中存在bootloader/BIOS的意义有了疑问

bootloader到底有没有必要存在呢?答案是:大部分情况下是有必要的。

首先,bootloader的作用是在硬件商店后运行的第一段软件代码,也叫引导加载程序,是在操作系统内核运行之前运行的一小段程序,这小段程序的作用一般是初始化硬件设备,比如内存啊,堆栈等等,从而将系统的硬件环境编程一种合适的状态,然后再引导加载操作系统,如linux或windows。

乍一看,其实挺有用,但这是一定必须的吗?显然不是,因为完全可以上电直接运行操作系统,当然这个操作系统的开头必须要包含上述bootloader的功能。这一点在单片机和ARM7中使用keil编程环境能理解。

但是,问题来了,如果我们想升级操作系统呢?我们想升级应用程序呢?这一点对于windows或者linux都是很常见的,如果没有bootloader,那么我们必须要找到烧写电脑或者CPU的烧写工具,事实上,这对于生产商来讲,都不是一件容易的事情。但是有bootloaer就很方便了,我们只需要将升级后的操作系统放到“硬盘”或nandflash中的某个位置,然后断电重启一下,bootloader就能在引导系统的同时,完成了对操作系统的升级。这样是不是很方便了。

后续,目前有一些手机厂家对bootloader“上锁”,这个就相当于是给bootloader引导上了把锁,升级的操作系统如果是自家的,自然是有“解锁”的钥匙的,但是是其他家的,那就不行了。

假如你做的产品卖给用户,当你发现该产品存在致命的问题,你是不是要去对程序进行更改,由于销售路径遍布各地,你不可能拿着一堆东西(电脑、下载器等)去找人家升级程序吧? 再说产品都是包装好的,预留的接口都是常用的接口,如USB、232/485 、SD卡等等,难道你还要去拆卸产品?   有了Bootloader就方便很多了,例如将升级文件拷贝在SD卡里面,或者通过nfs tftp,简单按下按钮、点一下屏幕就可以升级,别人操作起来也方便。

上述论述,如果需要升级系统,

bootloader将功能并入linux,那么需要重新编译整个image

sd卡没什么问题,都是将image拷贝进去,比较方便(bootloader和linux分开,就是拷贝linux image,否则就是拷贝整个image)

对于nand启动(bootloader和linux分开,可以通过tftp或nfs将linux image下载到内存,再通过uboot烧写到nand,有网口就可以,否则就是要通过工具烧写nand了),在这一点上是有差别的。

以上是一个原因,还有一个原因是:

内核启动需要必要的启动参数
(1)内核是不能开机自动完全从零开始启动的,内核启动需要别人帮忙。uboot要帮助内核实现重定位(从SD卡到DDR )uboot还要给内核提供启动参数。

启动内核第一步:加载内核到DDR中
uboot要启动内核,分为2个步骤:第一步是将内核镜像从启动介质中加载到DDR中,第二步是去DDR中启动内核镜像。(内核代码根本就没考虑重定位,因为内核知道有bootloader帮忙把自己加载到DDR中链接地址处,内核就直接从链接地址处运行的)

为什么需要bootloader的更多相关文章

  1. STM8如何使用自带的bootloader

    1,首先确认你使用的STM8有没有自带的bootloader.参考下表 2,STM8空器件可以直接使用自带的bootloader. 3,STM8在使用SWIM烧录后,要想继续使用自带的bootload ...

  2. Android Bootloader LittleKernel的两篇文章 【转】

    转自:http://blog.csdn.net/loongembedded/article/details/41747523 2014-12-05 14:37 3599人阅读 评论(2) 收藏 举报 ...

  3. 斐讯k1路由器刷Breed BootLoader(不死UBoot)教程

    刷入Breed BootLoader: 因为这个K1路由器可以开启telnet服务,所以此处刷Breed可以不使用编程器刷Flash芯片的方法进行. 1.打开K1路由器的Telnet服务. 电脑通过有 ...

  4. Linux学习 : 自己写bootloader

    一.bootloader 目标:启动内核 基本功能: ①初始化硬件:关看门狗.设置时钟.设置SDRAM.初始化NAND FLASH ②image比较大需要重定位到SDRAM ②将内核从NAND FLA ...

  5. How to acquire an Android phone with locked bootloader?

    As we know that some devices come with locked bootloaders like Sony, HUAWEI, hTC...If you try to unl ...

  6. Encrypting bootloader (程序BIN文件加密及在线升级)

    了解更多关于bootloader 的C语言实现,请加我QQ: 1273623966 (验证信息请填 bootloader),欢迎咨询或定制bootloader(在线升级程序). 在上一个博客随笔,我介 ...

  7. Xmodem Bootloader

    了解更多关于bootloader 的C语言实现,请加我QQ: 1273623966 (验证信息请填 bootloader),欢迎咨询或定制bootloader(在线升级程序). 多年前玩Cisco交换 ...

  8. 采用TCP协议的PIC32MZ ethernet bootloader

    了解更多关于bootloader 的C语言实现,请加我QQ: 1273623966 (验证信息请填 bootloader),欢迎咨询或定制bootloader(在线升级程序). 趁热打铁,在上一PIC ...

  9. 采用UDP协议的PIC32MZ ethernet bootloader

    了解更多关于bootloader 的C语言实现,请加我QQ: 1273623966 (验证信息请填 bootloader),欢迎咨询或定制bootloader(在线升级程序). 经过千辛万苦,今天终于 ...

  10. C语言PIC32 serial bootloader和C#语言bootloader PC端串口通信程序

    了解更多关于bootloader 的C语言实现,请加我QQ: 1273623966 (验证信息请填 bootloader),欢迎咨询或定制bootloader(在线升级程序). 今天介绍下我新完成的为 ...

随机推荐

  1. 巧用SimpleDateFormat将Date类型数据按照规定类型转换。

    在使用SimpleDateFormat之前,我们来了解一下这个类.SimpleDateFormat is a concrete class for formatting and parsing dat ...

  2. es之词库热更新解决方案

    1. 下载tomcat,作为远程词库的容器 , 需要在tomcat中配置词库 /webapp/ROOT这个路径下新建一个远程词库:​Vim hot.dicHot.dic中存放的就是实时热词 2.测试t ...

  3. 我用HTML写简历

    本文属于原创文章,转载请注明--来自桃源小盼的博客 起因 每次换工作写简历都是有点痛苦的事情,尤其是下载word模板,各种注册流程,有的还得买积分,冲会员,甚是不爽.就算下载好了,修改其中的一些细节也 ...

  4. centos php 安装 decrypt

    CentOS php Fatal error: Call to undefined function mcrypt_decrypt() // yum安装没有 #yum install libmcryp ...

  5. mysqlbinlog读懂binlog

    binlog 报unknown variable 'default-character-set=utf8' 方法1: 在/etc/my.cnf 中将default-character-set=utf8 ...

  6. 2014 ECML: Covariate-correlated lasso for feature selection (ccLasso)

    今天看了一篇 ECML 14 的文章(如题),记录一下. 原文链接:http://link.springer.com/chapter/10.1007/978-3-662-44848-9_38 这篇文章 ...

  7. 阶段1 语言基础+高级_1-3-Java语言高级_03-常用API第二部分_第4节 System类_3_System类的常用方法

    复制数组

  8. try...catch语句

    程序的异常:Throwable 严重问题Error我们不处理,这种问题一般都是很严重的,比如内存溢出 问题Exception 编译期问题不是RuntimeException的异常必须进行处理,如果不处 ...

  9. 阿里云SLB产品HTTP、HTTPS、UDP协议使用

    1.http协议测试 第一步:添加http监听服务,前端端口为8080,后端端口为80,健康检查中检查端口为后端端口80: 第二步:在绑定的服务器上安装服务,步骤如下 centos系统中启动http协 ...

  10. 应用安全 - 代码审计 - PHP

    RCE RCE函数 eval.preg_replace + /e模式.assertJavascript:evalVbscript: Execute.EvalPython:exec <?php i ...