活动介绍

ARM u-boot 初始化流程1

preview
需积分: 0 1 下载量 191 浏览量 更新于2022-08-03 收藏 34KB PDF 举报
ARM架构的启动过程通常涉及到多个步骤,特别是在使用u-boot引导加载程序时。u-boot是一个流行的开源固件项目,用于初始化和管理嵌入式系统,尤其是基于ARM处理器的系统。以下是对ARM u-boot初始化流程的详细解释: 1. **启动过程**:当系统上电后,CPU的第一个指令是从预设地址(Addr123)读取的。因此,u-boot的可执行文件必须位于这个地址。 2. **进入SVC模式**:第一个执行的指令通常是一个跳转操作,它将ARM CPU切换到服务模式(Supervisor Mode),这是系统初始化过程的安全模式。 3. **中断和看门狗禁用**:在SVC模式下,u-boot会立即禁用所有中断和看门狗,以防止在初始化阶段被打断或发生未预期的操作。 4. **MMU、D/I缓存禁用**:为了安全和效率,u-boot会关闭内存管理单元(MMU)以及数据/指令缓存(D/I Cache)。这有助于简化内存操作并防止潜在的数据不一致问题。 5. **内存配置**:接着,u-boot调用MEMSETUP函数来配置RAM。此步骤可能还包括初始化其他内存芯片,如静态存储器控制器(SMC)或双倍数据速率同步动态随机访问内存(DDR)。 6. **代码重定位**:如果u-boot的执行代码存储在闪存中,如NAND Flash,u-boot会将自身复制到RAM中的预定地址。如果u-boot已经在RAM中运行,则跳过此步骤。 7. **栈指针设置**:在这一阶段,栈指针(SP)会被设定,为后续调用"C"语言代码做好准备。 8. **清除BSS段**:BSS段是未初始化的全局变量和静态变量的内存区域,初始化时通常会被清零。 9. **执行`start_armboot`**:PC指针被设置为"C"代码中的`start_armboot`函数地址,这是u-boot初始化流程的关键部分。 10. **初始化序列**:`init_sequence`函数执行一系列初始化任务,包括: - `cpu_init`:配置CPU,例如分配IRQ和FIQ堆栈内存。 - `board_init`:初始化GPIO,开启LED,以及其他板级初始化工作。 - `interrupt_init`:初始化定时器控制器,以处理中断。 - `env_init`:初始化环境变量的存储位置。 - `init_baudrate`:设置串口波特率。 - `serial_init`:配置串行通信接口。 11. **闪存和NAND初始化**:根据需要初始化闪存设备,如NAND Flash,以便读取和操作存储在其中的u-boot或系统映像。 12. **系统信息显示**:在完成这些初始化步骤后,u-boot通常会在控制台上打印一些系统配置信息,以便用户了解系统的状态。 13. **主要循环**:初始化完成后,u-boot进入主循环(`Main loop()`),在这里等待进一步的命令或操作,如加载操作系统映像或执行用户交互。 这个流程概括了u-boot在ARM系统上启动的基本步骤,但具体实现可能会因平台和需求的不同而有所差异。在实际应用中,可能还会包括设备驱动初始化、网络配置、电源管理等更多复杂的初始化步骤。
身份认证 购VIP最低享 7 折!
30元优惠券