MIPS架构U-Boot启动流程与RTL8197F-VG芯片实践

1. MIPS架构U-Boot启动流程深度解析

在嵌入式系统开发中,U-Boot作为最常用的Bootloader之一,其启动流程对系统开发者至关重要。本文将基于MIPS架构,详细分析U-Boot从CPU上电到内核启动的全过程,特别针对Realtek RTL8197F-VG芯片的实现进行解读。

1.1 硬件平台与启动特性

RTL8197F-VG是一款集成MIPS 24Kc内核的SoC,主要应用于网络设备。其启动流程具有以下特点:

  • 支持从SPI Flash和NAND Flash启动
  • 采用两阶段启动设计(汇编阶段 + C语言阶段)
  • 内置SRAM作为初始运行环境
  • 支持DDR2/DDR3内存控制器自动配置

启动地址空间映射如下:

code复制物理地址      虚拟地址       用途
0x1FD00000 -> 0xBFD00000  ROM (非缓存)
0x1FE00000 -> 0xBFE00000  SRAM (非缓存) 
0x1FD00000 -> 0x9FD00000  ROM (缓存)
0x1FE00000 -> 0x9FE00000  SRAM (缓存)

1.2 启动流程概览

完整启动流程可分为以下几个关键阶段:

  1. 上电复位:CPU从固定地址(0xBFC00000)开始执行
  2. 汇编阶段:start.S完成最基础的硬件初始化
  3. C语言阶段:start_c.c完成DRAM等外设初始化
  4. 镜像加载:将U-Boot从Flash拷贝到DRAM
  5. 内核启动:跳转到Linux内核入口

需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。

2. 第一阶段:汇编启动代码分析

2.1 启动头文件解析

start.h定义了启动阶段的关键参数和宏:

c复制/* 启动地址配置 */
#ifdef CONFIG_NONO_COMPRESS
    #define BOOT_ADDR    0xA0000000  // 非压缩镜像地址
#else
    #define BOOT_ADDR    0x80100000  // 压缩镜像地址
#endif

/* 条件判断宏 */
#define IF_EQ(a,b,lab)  or t6,zero,a;\
                        or t7,zero,b;\
                        beq t6,t7,lab;\
                        nop;

/* 内存测试模式 */
#define PATT0 0x5a0000a5
#define PATT1 0xA5A55A5A
#define PATT2 0x005AA500

/* 时钟管理寄存器 */
#define CLK_MANAGER 0xb8000010
#define DCR 0xb8001004

这些定义反映了几个关键设计选择:

  1. 支持压缩和非压缩两种镜像加载方式
  2. 使用特定模式字进行内存测试
  3. 通过硬件strap引脚配置DRAM类型

2.2 启动汇编代码(start.S)

2.2.1 基础初始化

mips复制__start:
    j   reset       // 复位跳转
    nop
    nop

rese

内容推荐

已经到底了哦
已经到底了哦