UBOOT启动原理分析
文章主要围绕两个问题探讨。一方面是启动流程,另一方面是为什么这么启动。
前言
聊到uboot,我们得提一下单片机,我们在单片机上写代码的时候一般都不会考虑uboot,即使我们考虑bootloader也是在做OTA升级的时候才会去编码。这种一般都比较简单。但是当我们使用操作系统的时候,我们就得考虑uboot的移植和适配(这个工作原厂也做好了准备,实际上,我们只需要修改里面的一些加载地址和配置的功能项)。因为这两者的程序一个是跑着flash上,一个的跑着DDR上。
一、UBOOT是什么?
我简单描述一下UBOOT,uboot就是把linux内核镜像的代码搬运到内存上运行的东西(搬运到内存上运行,是因为在内存上运行速度比较快)。它有一个承上启下的作用。它引导操作系统,配置操作系统的参数,并完成一些硬件工作的初始化。
二、UBOOT启动流程
1.nuc980 内存分布图

2.启动流程

| 启动文件 | 功能 |
|---|---|
| IBR | 选择启动方式、初始化DDR(芯片自带),拷贝SPL程序到DDR 0x200地址运行 |
| SPL | 初始化默认串口0,拷贝uboot内容到DDR中去,详见上图 |
| UBOOT | 初始化设置的串口外设、设置GD结构体变量、重定位、初始化串口控制台并开始接收命令or执行自动化命令跳转到内核 |
三.为什么这么启动
1.统一性
统一Linux操作系统的启动方式,方便管理。尽管在这个方案中DDR初始化在芯片内部已经完成可以直接加载UBOOT到DDR中,但是就是一个另类的存在。
2.内存受限
如果芯片内部内存空间太少,这时候就需要外接DDR。那么,一般来说是在SPL中初始化外部DDR,然后将uboot搬运到外部DDR上运行。
总结
我写这些文章没有打算长篇大论,而且这些只是辅助性的功能。如果你真的想完全了解uboot,一定要去看看源代码。有什么好的建议也可以留言,作者都会回复。

UBOOT是一个引导加载器,负责将Linux内核加载到内存中运行。文章详细介绍了UBOOT的启动流程,包括nuc980内存分布和启动步骤,如初始化DDR、拷贝SPL和UBOOT内容等。此外,解释了为何如此启动,主要是为了统一Linux启动方式和应对内存资源限制。
408

被折叠的 条评论
为什么被折叠?



