bootloader启动过程

bootloader启动过程,第1张

  一个嵌入式 Linux 系统从软件角度看可以分为四个部分:引导加载程序(Bootloader), Linux 内核,文件系统,应用程序。

  当系统首次引导时,或系统被重置时,处理器会执行一个位于Flash/ROM中的已知位置处的代码,Bootloader就是这第一段代码。它主要用来初始化处理器及外设,然后调用 Linux 内核。Linux 内核在完成系统的初始化之后需要挂载某个文件系统作为根文件系统(Root Filesystem),然后加载必要的内核模块,启动应用程序。这就是嵌入式Linux系统启动过程 Linux 引导的整个过程。

  根文件系统是 Linux 系统的核心组成部分,它可以作为Linux 系统中文件和数据的存储区域,通常它还包括系统配置文件和运行应用软件所需要的库。应用程序可以说是嵌入式系统的“灵魂”,它所实现的功能通常就是设计该嵌入式系统所要达到的目标。如果没有应用程序的支持,任何硬件上设计精良的嵌入式系统都没有实用意义。

  从以上分析可以看出 Bootloader在运行过程中虽然具有初始化系统和执行用户输入的命令等作用,但它最根本的功能就是为了启动 Linux 内核,让我们进一步分析 Bootloader 和 Linux 内核在嵌入式系统中的关系和作用。

  

  Bootloader启动的两个阶段

  从 *** 作系统的角度看,Bootloader的总目标就是正确地调用内核来执行。另外,由于Bootloader的实现依赖于CPU的体系结构,因此大多数Bootloader都分为stage1和stage2两大部分,以便使Bootloader的功能更加强大和提供更加良好的移植性能。

  stage1主要是一些依赖于CPU体系结构的代码,比如硬件设备初始化代码等。这一阶段的代码主要是通过汇编来实现的,已达到短小精悍和高效的目的。stage1为位置无关代码,通常在Flash中运行。所以有的指令为相对寻址,可以在任何位置运行。

  stage1负责的主要任务有:

  ① 硬件设备初始化包括:关闭Watchdog、关闭中断、设置CPU的速度和时钟频率、配置SDRAM存储控制器及IO、关闭处理器内部指令/数据Cache等;

        ② 为加载Bootloader的stage2代码准备RAM空间(这个地址由链接脚本指定为运行域地址,通常为RAM的高端地址)测试内存空间是否有效;

        ③ 复制Bootloader的stage2代码到RAM空间中;

        ④ 设置好堆栈;

  ⑤ 跳转到stage2的C函数入口点。stage2则是通常用C语言来实现,这样可以实现更复杂的功能,而且代码会具有更好的可读性和可移植性。

       stage2负责的主要任务有:

  ① 初始化本阶段要使到的硬件设备(如串口、Flash和网卡等);

        ② 检测系统内存映射;

  ③ 没有用户干预时将内核映像从Flash读到RAM空间中;

        ④ 为内核设置启动参数;

        ⑤ 调用内核。

  Bootloader 的启动方式   1.网络启动方式

  这种方式的开发板不需要较大的存储介质,跟无盘工作站有点类似,但是使用这种启动方式之前,需要把Bootloader安装到板上的EPROM或者Flash中。Bootloader通过以太网接口远程下载Linux内核映像或者文件系统。Bootloader下载文件一般都使用TFTP网络协议,还可以通过DHCP的方式动态配置IP地址。

  2.硬盘启动方式

  传统的Linux系统运行在台式机或者服务器上,这些计算机一般都使用BIOS引导,并使用磁盘作为存储介质。Linux传统上是LILO (Linux Loader) 引导,后来又出现了GUN的软件 (Grand Unified Bootloader) 。 这两种Bootloader广泛应用在X86的Linux系统上。

  3. Flash启动方式

  大多数嵌入式系统上都使用Flash存储介质。Flash有很多类型,包括NOR Flash、NAND Flash和其它半导体盘。它们之间的不同在于: NOR Flash 支持芯片内执行(XIP, eXecute In Place),这样代码可以在Flash上直接执行而不必拷贝到RAM中去执行。而NAND Flash并不支持XIP,所以要想执行 NAND Flash 上的代码,必须先将其拷贝到 RAM中去,然后跳到 RAM 中去执行。NOR Flash 使用最为普遍。Bootloader一般放在Flash的底端或者顶端,这需要根据处理器的复位向量来进行设置。可以配置成MTD设备来访问Flash分区

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/dianzi/2717116.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-08-17
下一篇 2022-08-17

发表评论

登录后才能评论

评论列表(0条)

保存