当前位置: 首页 > article >正文

Bootloader的作用

为什么bootloader的代码都是用汇编写的

CPU上电后会从IO空间的某地址取第一条指令。但此时:PLL没有启动,CPU工作频率为外部输入晶振频率,非常低;CPU工作模式、中断设置等不确定;存储空间的各个BANK(包括内存)都没有驱动,内存不能使用。在这种情况下必须在第一条指令处做一些初始化工作,这段初始化程序与操作系统独立分开,称之为bootloader

一个嵌入式Bootloader最初始部分的代码几乎必须是用汇编语言写成的,因为开发板刚上电后没有准备好C程序运行环境,比如堆栈指针SP没有指到正确的位置。汇编代码应该完成最原始的硬件设备初始化,并准备好C运行环境,这样后面的功能就可以用C语言来写了。

Bootloader的作用

初始化开发板上主要硬件(时钟,内存,硬盘),把操作系统从硬盘拷贝到内存,然后让CPU跳到内存中执行操作系统。nandflash本身不能运行程序,它里面的内容必须拷贝到RAM中才能运行,但是CPU上电后,RAM中是空的,谁来执行这个拷贝的工作呢

bootloader阶段分为boot阶段和loader阶段

boot阶段

  • 关闭影响CPU正常执行的外设

看门狗,相当于定时器,特点是里面有一个基准值,还有一个递减计数器;每个时钟周 期把寄存器里面的数值减1,当减到0时有一个reset复位信号,导致芯片重启

目的:防止程序死机

我们需要关闭它的原因是:如果不关闭就经常导致重启,这样不好

  • 关闭中断
  • 初始化时钟

把开发板的时钟设定在最优情

  • 串口驱动
  • 初始化内存控制器,DDRAM

验证内存是否工作,往地址里写一个值,读出来还是那个值,说明内存可以使用,间接 证明内存可读可写。

  • 初始化硬盘,nand Flash

读驱动(从nand往外读数据),需要加载硬盘驱动

loader阶段

  • 从硬盘指定的地址加载Kernel到内存指定的地址
  • 跳转到内存Kernel所在的地址,执行

其实bootloader主要的必须的作用只有一个:就是把操作系统映像文件拷贝到RAM中去,然后跳转到它的入口处去执行。而操作系统文件的来源,可以是flash,sd card,PC(可以通过网络,USB,甚至串口传输)等等,所谓的EBOOT,UBOOT,其实就是表明了系统文件是通过Ethernet或者USB从PC传输过去的。

bootloader是不是必须的?

bootloader并不是必须的,如果我们的硬件有足够大的norflash,并且实现了XIP技术,那么WinCE 操作系统可以直接在norflash里面运行起来,不需要将它复制到RAM中去,所以bootloader就失去了作用。

但是考虑到成本因素,现在的硬件一般都不会配置这么大的norflash,image文件都存储在nand flash里面,所以都会用到bootloader。

总结

简单说来,Bootloader就是操作系统内核运行的一段小程序,完成进行初始化系统硬件设置的任务,包括CPU、SDRRAM、Flash、串口等初始化,时钟的设置、存储器的映射。

分为启动加载模式和下载模式。

(1)启动加载(Boot laoding)模式又称为“自主”(Autonomous)模式,是指 Bootloader 从目标机上的某个固态存储设备上将操作系统加载到 RAM 中运行,整个过程并没有用户的介入。

(2)在下载模式下,目标机上的 Bootloader 将先通过串口连接或网络连接等通信手段从宿主机下载文件。


http://www.kler.cn/a/9800.html

相关文章:

  • 华为大咖说 | 浅谈智能运维技术
  • git初始化和更新项目中的子模块
  • JMeter基础篇
  • c/c++--struct对比
  • Electron 项目中杀掉进程的不同方式
  • ESLint 使用教程(四):ESLint 有哪些执行时机?
  • [ 应急响应基础篇 ] Windows系统隐藏账户详解(Windows留后门账号)
  • 从存算分离说起:金融行业数据库分布式改造之路
  • 【Linux】工具(5)——gdb
  • 浏览器:好用的浏览器插件,亲测好用
  • 分布式场景下,Apache YARN、Google Kubernetes 如何解决资源管理问题?
  • Quaternion插值方法
  • FFMPEG VCL Pack Crack显示位置支持或光标
  • 是面试官放水,还是公司实在是太缺人?这都没挂,字节原来这么容易进...
  • 【并发编程】异步编程CompletableFuture实战
  • MySQL开发05-MySQL开发规范
  • 分布式文件系统FastDFS
  • android framework实战车机手机系统开发环境相关问题补充
  • 为什么提升客户服务是长期成功的关键
  • 高精度尘埃粒子计数器工厂空气质量监测必备
  • FreeRTOS 列表和列表项
  • java equals和==的区别
  • 自由度的理解
  • SM59 RFC 目标 SAP_PROXY_ESR 设置到服务资源库连接的检查列表
  • ChatGTP如此强大,我们普通人如何利用它来赚钱?
  • 小程序页面跳转方法