T113 Longan Linux系统启动流程深度解析

1. 从按下电源到第一个字符:T113启动的幕后英雄

大家好,我是老张,在嵌入式Linux这行摸爬滚打十多年了,从当年的2440到现在的T113,看着这些芯片一步步变得强大。今天咱们不聊高深的理论,就掰开揉碎了讲讲,当你给一块搭载全志T113-S3的开发板通电后,它到底是怎么一步一步“活”过来的。这个过程,我们称之为“启动流程”,它就像一个人的出生、成长、开始工作一样,环环相扣,缺一不可。

很多新手朋友拿到开发板,烧录好镜像,看到串口刷刷地出日志,就觉得大功告成了。但一旦系统启动失败,面对满屏的英文日志,往往就懵了,不知道从哪里下手排查。其实,只要你理解了整个启动链条,这些日志就不再是天书,而是精准的“病历”,告诉你系统在哪个环节“卡壳”了。T113这套基于Longan SDK的启动流程,算是目前国产平台里比较典型和清晰的一套,非常适合作为我们理解嵌入式Linux启动的样板。

简单来说,T113的启动可以分成几个大的阶段:首先是芯片内部的固化ROM代码(我们常说的BROM)开始执行,它负责把存储介质(比如SPI NAND或eMMC)里最开始的Bootloader(通常是全志的Boot0)加载到芯片的内部SRAM运行;然后Boot0会初始化更复杂的外部DDR内存,并把下一阶段的引导程序(比如U-Boot)加载到DDR中;U-Boot接着会初始化更多的硬件设备,准备好环境,最后把Linux内核从存储中读到内存,并跳转执行。内核启动后,会挂载根文件系统,并启动第一个用户空间进程init,之后就是各种系统服务和你的应用程序陆续登场了。

听起来好像挺多步骤?别急,下面我就结合实际的启动日志,带大家一个阶段一个阶段地走一遍,我会把关键日志拎出来,告诉你它背后发生了什么,以及如果这里出错了,你该怎么去应对。咱们的目标是:看完这篇文章,你不仅能看懂T113的启动日志,还能自己动手调整和优化启动过程中的各个环节。

2. 第一阶段:芯片上电与Boot0的舞台(内部SRAM)

当我们给T113开发板通电的瞬间,CPU的复位引脚被释放,芯片开始从一个非常特殊的地址开始取指令执行。这个地址指向的是芯片内部一块只读存储器(ROM),里面固化着全志厂商编写的初始引导代码,业内通常称之为BROM。这段代码是芯片出厂时就写死的,用户无法修改,它的任务非常明确且基础。

BROM的核心工作我把它总结为“三板斧”

  1. 初始化最基本的系统时钟和控制器:让芯片的心脏先跳起来。
  2. 探测启动介质:它会按照一个预设的顺序(比如先尝试SD卡,再尝试SPI NAND,再尝试eMMC)去探测系统是从哪个存储设备启动的。这个顺序通常在芯片数据手册里有定义,有些型号也可以通过芯片上的启动选择引脚来配置。
  3. 加载并验证Boot0:从选定的启动介质的最开头(通常是0地址偏移处)读取一小段代码(Boot0)到芯片的内部SRAM中。这块SRAM很小,对于T113可能就几十KB,所以Boot0必须做得非常精简。BROM在加载后,还会对Boot0进行简单的校验(比如校验和),通过后才跳转到SRAM中去执行它。

在我们提供的日志里,你看不到BROM的具体打印,因为它跑得太早,串口可能还没初始化呢。日志的第一行 [298]BOOT0 commit : 5224261,这已经是Boot0开始执行后打印的了。这个[298]很可能是一个时间戳或者步骤计数器。这一行告诉我们,现在控制权已经成功地从BROM交接给了Boot0。

Boot0跑在内部SRAM里,它的工作环境还比较“简陋”,但它要完成一项关键任务:初始化DDR内存。没有DDR,后续庞大的U-Boot和内核根本无处安身。看日志:

[325]DRAM BOOT DRIVE INFO: V0.32
[328]DRAM CLK = 792 MHz
[331]DRAM Type = 3 (2:DDR2,3:DDR3)
[344]DRAM SIZE =128 M
[360]DRAM simple test OK.

这几行信息量很大。Boot0识别出了DRAM类型是DDR3,时钟配置到了792MHz,并且成功检测到板子上挂了128MB的内存(对应T113-S3的配置,如果是S4会是256MB)。最后还做了一个简单的内存测试,通过了。这里是个关键检查点:如果你的板子启动时卡在这里,或者打印的DRAM SIZE是0,那大概率是DDR电路有问题,或者Boot0里的DDR初始化参数(时序、大小等)与你板子上的DDR颗粒不匹配。这些参数通常在SDK的device/config/chips/t113/configs/你的板子/目录下的某个文件里,比如sys_config.fex,需要根据硬件规格进行适配。

DDR初始化成功后,Boot0的使命就完成了一大半。接下来,它就可以利用这片宽敞的DDR内存,去加载更强大的“第二阶段的引导程序”了。

3. 第二阶段:U-Boot与OP-TEE的接力(DDR内存)

有了可用的DDR内存,Boot0就可以大展拳脚了。在Longan SDK的默认配置里,Boot0并不会直接去加载Linux内核,而是加载一个“boot包”。这个包里面通常包含了多个组件。从日志里我们能清晰地看到:

[521]Loading boot-pkg Succeed(index=0).
[524]Entry_name = u-boot
[531]Entry_name = optee
[536]Entry_name = dtb

Boot0从存储设备(日志前面显示是mmc设备)上加载了一个“boot包”成功。这个包里至少有三样东西:u-boot(我们最熟悉的引导加载程序)、optee(一个安全执行环境,用于

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值