本文链接: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中链接地址处,内核就直接从链接地址处运行的)

最新文章

  1. UI控件(UISegmentedControl)
  2. rpm 软件管理
  3. Bete冲刺第一阶段
  4. loj 1154(最大流+枚举汇点)
  5. JavaPersistenceWithHibernate第二版笔记-第五章-Mapping value types-001Mapping basic properties(@Basic、@Access、access="noop"、@Formula、@ColumnTransformer、@Generated、 @ColumnDefaul、@Temporal、@Enumerated)
  6. Fedora下载地址
  7. xCode如何导入自定义的snippets文件
  8. 【转】PHP网站常见安全漏洞,及相应防范措施总结
  9. PhpStorm常用快捷键大全
  10. Jquery-uploadify多文件上传插件使用介绍
  11. 前端上传组件 - Plupload
  12. Vue2.x中的父组件数据传递至子组件
  13. 在容器中利用Nginx-proxy实现多域名的自动反向代理、免费SSL证书
  14. zabbix 2.2.20 安装详解(Centos6.9)
  15. Mybatis中常用的SQL
  16. 如何优雅地退出python程序
  17. 【转】安装ambari的时候遇到的ambari和hadoop问题集
  18. Standalone的更改方式
  19. MySQL存储过程错误No data - zero rows fetched, selected, or processed
  20. git连接华为开发云devcloud

热门文章

  1. IIS发布mvc网站需操作的内容
  2. Java数据结构与算法(3):队列
  3. mycat 配置简介
  4. awk调用系统命令
  5. (转) intellij idea部署web项目时的位置(Tomcat)
  6. Numpy的补充(重要!!)
  7. HslControls
  8. android:为ListView 添加自定义头部和尾部,上拉主动加载 .(引)
  9. Jenkins持续集成_03_添加测试报告
  10. pyAudioAnalysis-audioFeatureExtraction 错误纠正