ARM Linux重启过程

时间:2017-10-06 06:29:25

标签: arm embedded-linux

重启程序如何在运行Linux的ARM SOC上运行,例如引导加载程序重新初始化DDR内存?任何人都可以详细解释我重启过程。

4 个答案:

答案 0 :(得分:1)

这太宽泛了。它不仅依赖于SoC供应商,还依赖于硬件和软件。

但是,最典型的设置是:

  1. CPU执行第一阶段引导加载程序(FSB)。

    FSB位于芯片本身的ROM或EEPROM中,非常小(AT91RM9200 FSB最大10kB,AFAIR)。 FSB然后初始化最小外设集(时钟,RAM,闪存),将第二阶段引导加载程序(U-Boot)传输到RAM,然后执行它。

  2. U-Boot启动。

    U-Boot初始化其他一些硬件(串口,以太网等),将Linux内核传输到RAM,准备指向内核输入参数的指针并跳转到它的入口点。

  3. Linux内核启动。

    魔术发生在这里。系统现在可以通过SSH控制台为您提供cookie和/或执行需要执行的任何操作。

  4. 有关热启动的更深入信息

    热启动是软件重置,而冷启动是开机或硬件重置。一些(大多数?)SoC能够将关于热启动的信息传递给FSB / SSB。这样,引导加载程序可以通过跳过已初始化外设的重新初始化来最小化整体引导时间。

    同样,这是我在嵌入式领域15年以上经验中最典型的设置。

答案 1 :(得分:1)

  

重启过程如何在运行Linux的ARM SOC上运行,??

目前使用的典型ARM处理器与外设集成在单个IC上,称为 SoC ,片上系统。通常,重启过程几乎与开机启动过程相同。在复位时,ARM处理器通常会跳转到地址0。

主存储器,例如DRAM和非易失性存储器,例如, NAND闪存通常位于SoC外部(具有Linux功能),可实现最大的设计灵活性 但通常有一个小的(可能是128KB)嵌入式ROM(只读存储器)来初始化最小系统组件(例如时钟,外部存储器)以开始自举操作。处理器复位将导致执行此引导ROM。 (该ROM是真正的只读,不能修改。在芯片制造过程中,代码被掩盖在硅片中。)
SoC可能有一个捆绑选项来代替执行外部启动存储器,例如NOR闪存或EEPROM,它们可以直接执行(即XIP,就地执行)。
第一阶段引导程序使用的任何ROM,闪存和SRAM的显着特征是在复位后必须立即访问这些存储器。

引导使用DRAM作为主存储器的系统的一个问题是其硬件初始化。在将代码加载到DRAM中并执行之前,必须用特定于板的参数初始化DRAM存储器控制器。那么这个特定于电路板的初始化代码从何处执行,因为它不能存在于主存储器中? 每个供应商都有自己的解决方案 有些要求将存储器配置数据存储在非易失性存储器中以供引导ROM访问 一些SoC集成了SRAM(不需要像DRAM这样的初始化)来执行一个小的第二阶段自举程序 一些SoC使用NOR闪存来保存XIP(就地执行)引导程序(例如U-Boot的SPL程序)。

每个SoC供应商都有自己的引导方法来加载和执行操作系统 有些使用硬件捆绑读取GPIO引脚来确定引导序列下一阶段的来源 另一个供应商可以使用有序的存储器和设备列表来探测引导程序 另一种技术是分支到NOR闪存中的固件,可以直接执行(即XIP,就地执行)。

一旦引导程序初始化了DRAM,那么这个主存储器可用于加载下一级引导。这可能是一个复杂的启动实用程序,如U-Boot,或者(如果引导程序能够)Linux内核。 ROM引导程序可以完成加载ARM Linux内核(例如ETRAX)的所有操作,但更常见的是在处理器重置与执行OS之间会有多个引导程序或阶段。

以下文档中详细说明了引导Linux ARM内核的要求:Booting ARM Linux
较早版本的Linux ARM使用ATAG列表将基本配置信息传递给内核。现代版本使用设备树的编译二进制文件提供完整的电路板配置。

  

...例如,引导装载程序是否重新初始化DDR内存?

在我看到的几个例子中,启动程序无条件地配置动态RAM控制器。

PC具有BIOS和开机自检,即POST。 POST的执行是上电复位(又称冷启动)与软件复位(也称为热启动或重启)之间的主要区别。 ARM系统通常不执行POST,因此您通常会看到重置类型之间的差异很小甚至没有差异。

答案 2 :(得分:0)

取决于SoC,它变化很大。我将描述类似“典型”的东西(飞思卡尔iMX6)......

通常,片内看门狗定时器用于干净地复位SoC。有时,可以激发外部电源管理IC来执行板级复位(这种方法可能更好,因为它避免了外部芯片在意外状态下“卡住”的风险,但并非所有电路板设计都支持它)。

复位后,SoC将开始正常启动过程:检查选项引脚,熔丝设置和初始化时钟以及引导设备(例如eMMC)。这通常由从小型片上ROM执行的CPU代码控制。

内部引导ROM将初始化DDR SDRAM(使用从保险丝获取的设置或从引导设备上的文件读取),引导加载程序被加载到内部RAM然后它负责DDR初始化(和其他事情)。可以将U-Boot引导加载程序配置为以任一方式工作。

最后,将内核和DTB加载到内存中并启动。

答案 3 :(得分:-2)

注意uboot等不需要它们是GROSS矫枉过正,它们本身就是操作系统。加载和运行linux你需要内存并运行将内核分支复制到它,一些寄存器设置为指向你从内核设置或复制的表。

你在冷复位或温暖方面做了什么取决于你,同样的芯片和电路板没有理由为什么任何两个解决方案必须做同样的事情,除非它是由硬件驱动(如果你做一个wdt重置启动over和that reset擦除整个芯片,包括ddr控制器)。您只需将系统置于Linux期望的状态。