ARM Bootloader启动详解:前4K加载与NAND/NOR启动差异

4星 · 超过85%的资源 需积分: 10 17 下载量 122 浏览量 更新于2024-09-18 1 收藏 64KB DOC 举报
"本文主要探讨了bootloader的启动过程,特别是前4K加载阶段,以及NAND和NOR闪存的启动区别。Bootloader分为两个阶段,第一阶段负责初始化硬件,复制第二阶段到RAM,设置堆栈并跳转执行。第二阶段则进一步初始化硬件,检测内存映射,加载内核和文件系统。对于只使用NAND Flash没有NOR Flash的系统,bootloader是必要的,因为它允许程序从RAM中运行。" 在嵌入式系统中,bootloader扮演着至关重要的角色,它是系统启动的第一步。当处理器上电或复位后,通常会从预设的地址开始执行代码,这个预设地址通常是ROM或Flash中的前4K代码。这部分代码被称为引导加载器的第一阶段。 在第一阶段,bootloader主要任务包括: 1. 初始化基本硬件:如屏蔽中断,设置CPU速度和时钟频率,初始化RAM控制器,点亮或关闭LED,关闭CPU的指令和数据Cache。 2. 准备第二阶段所需的RAM空间:根据第二阶段代码和堆栈的大小,在RAM中分配足够的空间。 3. 复制第二阶段代码:从存储设备(如NAND或NOR Flash)复制第二阶段代码到RAM中,并确定起始和结束地址。 4. 设置堆栈指针SP:为C语言程序执行做好准备。 5. 跳转执行:转移到第二阶段的入口地址执行。 第二阶段,bootloader会继续更复杂的初始化工作,如初始化串口用于输出信息,检测系统内存映射(可能涉及MMU的配置),加载内核和文件系统到RAM,并为内核设置启动参数,最终调用内核启动操作系统。 如果直接运行像UCOS这样的实时操作系统,而不通过bootloader,UCOS的执行会直接在Flash中开始。但通常,为了提高效率和可靠性,会复制整个UCOS到RAM中执行。在没有NOR Flash的情况下,只有NAND Flash,bootloader仍然是必要的,因为它能将程序从不能直接执行的NAND Flash移动到RAM中。尽管NAND Flash容量较大,适合存储大量数据,但UCOS这样的小型操作系统更适合于NOR Flash或RAM中运行,因为它们的启动速度更快,访问效率更高。在实际产品设计中,考虑到成本和性能平衡,选择适当的启动策略和存储设备至关重要。