1. T113主线Linux启动流程深度解析
作为一名长期从事嵌入式Linux开发的工程师,我最近在MangoPi MQ-R-T113开发板上完成了主线Linux的移植工作。在这个过程中,我深入研究了从bootloader到内核再到根文件系统的完整启动流程。本文将详细分析这个过程中的关键环节和技术细节,希望能为同样在T113平台上开发的同行提供参考。
1.1 标准启动流程概述
现代嵌入式Linux系统通常遵循以下启动序列:
- ROM代码阶段:芯片上电后执行固化在ROM中的代码
- SPL阶段:Secondary Program Loader,运行在内部SRAM中
- U-Boot阶段:完整的bootloader,运行在DDR中
- 内核启动:加载设备树和内核镜像
- 根文件系统挂载:初始化用户空间
在T113平台上,这个流程具体表现为:
- 上电后执行全志特有的BROM代码
- 加载SPL到内部SRAM
- SPL初始化DDR并将完整U-Boot加载到DDR
- U-Boot加载设备树和内核镜像
- 内核挂载根文件系统并启动init进程
1.2 硬件平台特性
T113是全志推出的一款高性价比嵌入式处理器,主要特性包括:
- 双核Cortex-A7 CPU,主频可达1.2GHz
- 内置128MB DDR3内存(可扩展)
- 丰富的外设接口:USB、SDIO、SPI、UART等
- 典型功耗低于1W,适合IoT和嵌入式应用
在MangoPi MQ-R-T113开发板上,这些资源通过以下方式分配和使用:
- 内存布局:0x40000000-0x47FFFFFF(128MB)
- 串口调试:UART0(PE2/PE3)
- 存储介质:SPI NAND或SD卡
- 网络接口:可选RTL8189FTV WiFi模块
2. Bootloader实现细节
2.1 SPL关键实现
SPL作为启动的第一阶段,主要完成以下关键任务:
c复制/* 典型的SPL初始化序列 */
board_init_f() -> 初始化基础外设(时钟、GPIO等)
↓
dram_init() -> 初始化DDR控制器
↓
spl_load_image() -> 从存储介质加载U-Boot
↓
jump_to_image_no_args() -> 跳转到U-Boot
在T113平台上,DDR初始化尤为关键。根据全志提供的参数,我们需要正确配置以下寄存器:
c复制#define CONFIG_DRAM_CLK 792 /* DRAM时钟频率设为792MHz */
#define CONFIG_DRAM_ZQ 8092667 /* ZQ校准值 */
#define CONFIG_DRAM_SUNXI_TPR0 0x004a2195 /* 时序参数0 */
#define CONFIG_DRAM_SUNXI_TPR11 0x340000 /* 时序参数11 */
这些参数直接影响内存的稳定性和性能,建议直接从全志官方SDK中获取对应您具体内存芯片的配置。
2.2 U-Boot配置要点
U-Boot的
