Uboot

发布时间:2023年12月25日

什么是Bootloader?

Linux系统要启动就必须需要一个 bootloader程序,也就说芯片上电以后先运行一段bootloader程序。
这段 **bootloader程序会先初始化时钟,看门狗,中断,SDRAM,等外设,然后将 Linux内核从flash(NAND, NOR FLASH,SD,MMC等)拷贝到内存中,最后启动Linux内核。**当然了,bootloader的实际工作要复杂的多,但是它最主要的工作就是启动 Linux内核。

总得来说,Bootloader就是一小段程序,它在系统上电时开始执行,初始化硬件设各、准备好软件环境,最后调用操作系统内核。

Bootloader启动流程

  1. 第一阶段:初始化时钟,关闭看门狗,关中断,启动ICACHE,关闭DCACHE和TLB,关闭MMU,初始化内存,初始化NAND FLASH,重定位。
    补充:存储芯片根据短电后是否保留原有存储的信息分为易失性存储芯片(RAM)和非易失性存储芯片(ROM)
    非易失性存储芯片(ROM)又可以分为闪存存储器和只读存储器。目前闪存存储器FLASH是主流,主要又分为NAND FLASH和NOR FLASH..
NAND Flash

NAND Flash 为大容量数据存储的实现提供了廉价有效的解决方案,是目前全球市场大容量非易失存储的主流技术方案。

  1. 第二阶段:初始化一个串口,检测系统内存映射,将内核映象和根文件系统映象从 Flash上读到SDRAM空间中,为内核设置启动参数,调用内核。

uboot是怎么和内核完成参数传递的?

uboot启动后已经完成了基本的硬件初始化(如:内存、串口等),接下来,它的主要任务就是加载Linux内核到开发板的内存,然后跳转到Linux内核所在的地址运行。

想要启动LINUX 内核,uboot必须要给内核传递一些的必要的信息来告诉内核当前所处的环境。

  1. uboot把机器ID通过R1传递给内核,Linux内核运行的时候,首先就从R1中读取机器ID来判断是否支持当前机器。这个机器ID实际上就是开发板CPU的ID。
  2. R2存放的是块内存的基地址,这块内存中存放的是uboot给Linux内核的其他参数。这些参数有内存的起始地址、内存大小、Linux内核启动后挂载文件系统的方式等信息。
  3. 除了约定好参数存放的地址外,还要规定参数的结构。Linux2.4.x以后的内核都期望以标记列表(tagged_list)的形式来传递启动参数
    在这里插入图片描述
文章来源:https://blog.csdn.net/qqmrchen124/article/details/135195660
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。