为什么需要bootloader
本文链接: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的更多相关文章
- STM8如何使用自带的bootloader
1,首先确认你使用的STM8有没有自带的bootloader.参考下表 2,STM8空器件可以直接使用自带的bootloader. 3,STM8在使用SWIM烧录后,要想继续使用自带的bootload ...
- Android Bootloader LittleKernel的两篇文章 【转】
转自:http://blog.csdn.net/loongembedded/article/details/41747523 2014-12-05 14:37 3599人阅读 评论(2) 收藏 举报 ...
- 斐讯k1路由器刷Breed BootLoader(不死UBoot)教程
刷入Breed BootLoader: 因为这个K1路由器可以开启telnet服务,所以此处刷Breed可以不使用编程器刷Flash芯片的方法进行. 1.打开K1路由器的Telnet服务. 电脑通过有 ...
- Linux学习 : 自己写bootloader
一.bootloader 目标:启动内核 基本功能: ①初始化硬件:关看门狗.设置时钟.设置SDRAM.初始化NAND FLASH ②image比较大需要重定位到SDRAM ②将内核从NAND FLA ...
- 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 ...
- Encrypting bootloader (程序BIN文件加密及在线升级)
了解更多关于bootloader 的C语言实现,请加我QQ: 1273623966 (验证信息请填 bootloader),欢迎咨询或定制bootloader(在线升级程序). 在上一个博客随笔,我介 ...
- Xmodem Bootloader
了解更多关于bootloader 的C语言实现,请加我QQ: 1273623966 (验证信息请填 bootloader),欢迎咨询或定制bootloader(在线升级程序). 多年前玩Cisco交换 ...
- 采用TCP协议的PIC32MZ ethernet bootloader
了解更多关于bootloader 的C语言实现,请加我QQ: 1273623966 (验证信息请填 bootloader),欢迎咨询或定制bootloader(在线升级程序). 趁热打铁,在上一PIC ...
- 采用UDP协议的PIC32MZ ethernet bootloader
了解更多关于bootloader 的C语言实现,请加我QQ: 1273623966 (验证信息请填 bootloader),欢迎咨询或定制bootloader(在线升级程序). 经过千辛万苦,今天终于 ...
- C语言PIC32 serial bootloader和C#语言bootloader PC端串口通信程序
了解更多关于bootloader 的C语言实现,请加我QQ: 1273623966 (验证信息请填 bootloader),欢迎咨询或定制bootloader(在线升级程序). 今天介绍下我新完成的为 ...
随机推荐
- IDEA集成Mybatis打印日志插件
MyBatis Log Plugin :把 mybatis 输出的sql日志还原成完整的sql语句. 如下图所示,点击Tools>MyBatis Log Plugin 然后运行程序后,就会看到对 ...
- .NET COM+级别的事务Transaction实现
参考: https://docs.microsoft.com/zh-cn/dotnet/api/system.enterpriseservices.contextutil?view=netframew ...
- python的filter,reduce,map
1.filter filter(func,iter) 只能处理一个参数(iter),仅仅将满足func方法的数值过滤出来 如: a = [,,,,] list(filter(lambda x:x> ...
- Git remotes/origin/pr/* 分支清理,代码回退等
代码在gitHub上托管,每次git pull完后,用git branch -a都可以看到一堆remotes/origin/pr/*分支: 可以通过两种方式去除: 1,修改git的config文件找到 ...
- dp培训完结(8.9)
概率与期望dp 期望: 为什么下面的式子成立? 若x可以取1,2,3,则x+c可以取1+c,2+c,3+c..........x*c可以取1*c,2*c,3*c why? 举个例子(E(x+y)=E( ...
- sqlalchemy批量添加数据-数据源是json(小算法)
需求: 想要写1个增加case的接口 问题: sqlalchemy添加case的方式,只能是1条数据1条数据的插入,像这样: ro2 = Role(name='user') db.session.ad ...
- 16/7/8_PHP-正则表达式
什么叫正则表达式 PCRE库函数中,正则匹配模式使用分隔符与元字符组成,分隔符可以是非数字.非反斜线.非空格的任意字符.经常使用的分隔符是正斜线(/).hash符号(#) 以及取反符号(~),例如: ...
- Web高级 JavaScript中的数据结构
复杂度分析 大O复杂度表示法 常见的有O(1), O(n), O(logn), O(nlogn) 时间复杂度除了大O表示法外,还有以下情况 最好情况时间复杂度 最坏情况时间复杂度 平均情况时间复杂度 ...
- Maven-Eclipse使用maven创建HelloWorld Java项目,maven常用的命令解析
1.开发过程常用的maven命令有: mvn clean mvn compile mvn test mvn package mvn install mvn deploy 2.mvn clean:清理t ...
- 到底如何设置 Java 线程池的大小?
来源:ifeve.com/how-to-calculate-threadpool-size/ 在我们日常业务开发过程中,或多或少都会用到并发的功能.那么在用到并发功能的过程中,就肯定会碰到下面这个问题 ...