OKT153(sun8iw22) 启动链全流程详解
启动顺序:Boot0 → OP-TEE → U-Boot → Linux Kernel → 根文件系统&应用,结合本次日志逐阶段拆解流程、关键日志、功能、异常问题。
一、第一阶段:Boot0(片上固化引导程序,底层一级引导)
1. 作用
全志芯片ROM 内置最小引导代码,上电最先执行,负责初始化基础硬件(PLL、DDR、SPI-NAND)、加载并跳转至下一阶段镜像,是整个系统启动的入口。
2. 关键日志逐行解读
[260]HELLO! BOOT0 is starting!
Boot0 正式开始运行。
[263]BOOT0 commit : {06543bc6-dirty}
Boot0 源码版本号,dirty 表示源码有未提交修改,属于定制版本。
[268][pmu]: bus read error
告警,非故障:上电瞬间访问电源管理单元(PMU)总线短暂异常,硬件上电时序导致,不影响后续启动。
[270]set pll start / [272]set pll end
初始化时钟锁相环(PLL),为芯片、DDR、外设提供基准时钟。
[274]vaild para:1 select dram para0
读取并选择 DDR 配置参数集,加载硬件适配参数。
[277]ic board init ok
芯片基础外设、板级初始化完成。
[284]spinand UBOOT_START_BLK_NUM 8 UBOOT_LAST_BLK_NUM 48
指定 SPI-NAND 闪存 中 U-Boot 镜像存放区块:起始块8、结束块48。
[294]DRAM BOOT DRIVE INFO: V0.16
[299]DRAM CLK = 933 MHz
[301]DRAM Type = 3 (3:DDR3)
[359]DRAM SIZE = 256 MBytes
[369]DRAM simple test OK.
-
DDR 驱动版本、时钟频率 933MHz、内存类型 DDR3、总容量 256MB;
-
内存自检通过,DDR 硬件正常。
[513]Check is correct. Find a good uboot copy at block 8
遍历 SPI-NAND,校验找到合法完好的 U-Boot 镜像,镜像完整性正常。
3. 本阶段总结
✅ 整体正常
完成:时钟初始化 → DDR 初始化&自检 → SPI-NAND 识别 → 校验 U-Boot 镜像。
仅存在上电瞬时 PMU 总线告警,无致命问题。
最终动作:把系统运行权交给 OP-TEE。
二、第二阶段:OP-TEE(安全操作系统,可信执行环境 TEE)
1. 作用
ARM 架构标准 可信执行环境(TEE) ,运行在安全世界 ,独立于普通系统;负责安全启动、密钥管理、加密算法、安全硬件隔离、保护敏感数据,安卓/嵌入式安全必备组件。
本平台架构:Boot0 → OP-TEE → 再跳转至 U-Boot。
2. 关键日志解读
[542]Jump to OPTEE: optee_base = 0x42900000, uboot_base = 0x43500000
Boot0 跳转至 OP-TEE,标注两者在内存中的运行基地址。
M/TC: OP-TEE version: e9d62ab8 ... #1 Fri Jun 27 02:37:21 UTC 2025 arm
M/TC: OP-TEE 32bit
OP-TEE 版本、编译时间、架构:32位 ARM 安全系统。
[00.748]ns16550_serial serial@2600000: pinctrl_select_state_full: uclass_get_device_by_phandle_id: err=-19
异常点
- 含义:串口引脚(pinctrl)配置失败,
-19=ENODEV设备未找到; - 原因:设备树(DTS) 串口引脚定义缺失/错误;
- 影响:OP-TEE 阶段串口功能异常,但不阻止继续跳转到 U-Boot。
3. 本阶段总结
OP-TEE 安全环境正常拉起,仅串口引脚配置报错;执行完毕后,主动跳转至 U-Boot。
三、第三阶段:U-Boot(通用引导加载器,核心引导层)
1. 作用
嵌入式系统最核心的引导程序,运行在普通世界 。
核心能力:板级二次初始化、解析设备树(DTS)、挂载闪存分区、加载内核镜像、传递启动参数、最终跳转到 Linux 内核。
2. 关键日志 & 问题拆解
U-Boot 2023.04-rc4-gf6c9ec46 ... Allwinner Technology
Model: sun8iw22
DRAM: 256 MiB
U-Boot 版本、芯片型号、内存容量,基础信息匹配。
sunxi_spi_probe:pinctrl_select_state fail!:-38
异常 :SPI 引脚配置失败(-38=ENOSYS),SPI 子设备引脚 DTS 配置错误,SPI-NAND 主设备仍可用。
The partition nonsupport be initialized using the device tree
告警 :MTD 分区表与设备树兼容问题,分区实际挂载正常,可忽略。
(1)MTD/NAND 分区信息
device nand0 <nand>, # parts = 5
0: boot0 1MB
1: uboot 5MB
2: secure_storage 1MB
3: boot_param 128KB
4: sys 系统主分区
SPI-NAND 划分 5 个物理分区,存放 Boot0、U-Boot、安全存储、启动参数、系统镜像。
(2)UBI 卷挂载(日志文件系统)
ubi0: attached mtd5 (name "sys", size 248 MiB)
good PEBs: 1991, bad PEBs: 0
将 sys 分区挂载为 UBI 卷,闪存无坏块,存储介质健康。
Net: [01.853]No ethernet found.
严重异常:有线以太网未识别,后续内核也会报 PHY 缺失,根源:网口PHY、MDIO、DTS 配置错误。
(3)DSI 液晶屏批量报错(重点)
Fail to get reset clk for rst_bus_de_sys
Fail to get de's irq!
panel: failed to request regulator(power0/1/2-supply): -2
panel: failed to request enable/reset GPIO: -2
Cannot get backlight: -19
- 错误码
-2=ENOENT:供电LDO、使能GPIO、复位GPIO、背光、显示时钟/中断 DTS 全部未配置; - 现象:DSI 屏幕无法点亮、背光失效,虽然能读出屏幕分辨率(1024x600),但外设驱动完全加载失败。
(4)启动内核准备
Hit any key to stop autoboot
SUNXI AMP: sunxi amp cpu on finish
## Booting Android Image at 0x40007800 ...
Kernel load addr 0x40008000 size 7348 KiB
Using Device Tree in place at 42000000
XIP Kernel Image
- 自动倒计时启动,AMP 多核协同初始化完成;
- 读取 Android 格式内核镜像,加载到指定内存地址;
- 加载设备树(DTS) 二进制文件(硬件配置描述表);
- 执行 XIP 原地执行,不拷贝内核,直接跳转运行。
3. 本阶段总结
U-Boot 主体功能正常:分区解析、UBI 挂载、内核加载、设备树加载全部完成。
主要问题集中在 DTS 配置缺失 :串口、SPI、网口、LCD 屏、GPIO/供电/时钟配置错误。
最终动作:跳转至 Linux Kernel。
四、第四阶段:Linux Kernel(操作系统内核)
1. 作用
硬件驱动加载、内存管理、进程调度、总线管理、外设枚举,内核初始化完成后挂载根文件系统,启动上层应用。
2. 关键日志 & 异常解读
(1)内存重叠(高优先级故障)
OF: reserved mem: OVERLAP DETECTED!
arm_rtos_mem_fw@44000000 与 e907_mem_fw@44000000 地址重叠
DTS 中两块预留内存区间冲突,会导致 AMP/RTOS 协同功能异常,长期运行稳定性差,必须修复设备树。
(2)CPU 配置告警
/cpus/cpu@0~3 missing clock-frequency property
CPU 节点未填写主频属性,系统无法读取 CPU 标称频率,不影响运行,仅补 DTS 即可。
(3)32K 晶振异常
ccu-nglosc not stable, 32K clk will use 16M as parent!
外部 32K 低速晶振起振不稳定,系统自动切换为 16M 时钟兜底;影响 RTC、低功耗、休眠功能。
(4)SD/MMC 卡异常
sdmmc: manual set ocr
sdmmc: smc 1 p1 err, cmd 52, RTO !!
SD 卡/EMMC 通信超时、电压配置异常,SD 卡识别/读写不稳定。
(5)I2C + RTC 实时时钟故障(功能失效)
twi3 xfer failed dev addr:0x51
rtc-pcf8563 write error, probe fail
I2C3 总线通信失败,挂载的 PCF8563 时钟芯片完全不可用,系统时间无法掉电保存。
(6)有线网彻底失效
mdio_bus stmmac-0: MDIO device at address 1 is missing.
以太网 PHY 芯片未枚举到,和 U-Boot 阶段 No ethernet found 对应,有线网功能完全不可用。
(7)WiFi 射频控制异常
rfkill: get gpio chip_en/power_en/wlan_regon failed
WiFi 使能/复位 GPIO DTS 缺失,射频开关控制异常。
(8)其他次要告警
- PWM 控制器基地址配置错误;
- 红外接收、音频 codec 调试目录重复创建(纯日志冗余)。
3. 本阶段总结
内核完整启动,调度、内存、基础总线正常。
故障来源全部指向设备树(DTS) :内存分区、时钟、I2C、RTC、网口、WiFi、LCD、GPIO 配置缺失/错误。
内核初始化完成后,自动挂载根文件系统,进入应用层。
五、第五阶段:根文件系统 & 应用服务(用户态)
1. 作用
Linux 内核只提供内核能力,所有命令、守护进程、桌面、业务程序都运行在此层。包含系统库、配置文件、开机脚本、第三方应用。
2. 关键日志解读
(1)udev 设备权限告警
udevd: specified group 'input'/'kvm'/'xenomai' unknown
根文件系统 /etc/group 缺少对应用户组,外设权限、虚拟化功能受影响。
(2)音频服务异常
dbus[240]: Unknown username "pulse"
缺少 pulse 音频用户,音频服务启动异常。
(3)蓝牙 RTL8821CS ✅ 正常
蓝牙固件加载、H5 协议、波特率切换、HCI 初始化全部成功;仅缺失两个可选配置文件,不影响基础蓝牙功能。
(4)网络服务 ✅ 正常
udhcpc DHCP 成功获取 IP 192.168.1.101,无线网络、路由、DNS 工作正常。
(5)Wayland 桌面 Weston 启动失败
fatal: environment variable XDG_RUNTIME_DIR is not set.
图形桌面必备环境变量未配置,GUI 界面无法启动,仅能使用串口控制台。
(6)中文编码告警
setlocale: LC_ALL: cannot change locale (zh_CN.utf8)
文件系统缺少中文字符集,中文乱码。
(7)基础服务正常
syslog、klog、iptables、adb、sshd、vsftpd、tftp、ptp、swupdate 升级服务全部正常启动。
3. 本阶段总结
系统控制台、网络、蓝牙、后台服务全部可用;问题集中在根文件系统配置:用户组、系统用户、环境变量、字符集缺失。
六、全启动链整体梳理 & 问题总览
1. 流程闭环
上电
↓
Boot0(ROM一级引导)→ 初始化时钟/DDR/NAND → 校验镜像
↓
OP-TEE(安全TEE)→ 安全环境初始化
↓
U-Boot(主引导)→ 解析分区/DTS → 加载内核+设备树
↓
Linux Kernel(内核)→ 驱动枚举/硬件管理
↓
根文件系统 + 应用服务(用户态)→ 命令行/后台服务/应用
2. 各层健康度
- Boot0:✅ 完全正常
- OP-TEE:⚠️ 串口引脚告警,主体正常
- U-Boot:⚠️ 串口/SPI/LCD/网口 DTS 配置异常,引导功能正常
- Kernel:🔴 内存重叠、RTC/I2C、网口、WiFi、SD 卡故障(均为DTS问题)
- 应用层:⚠️ 权限、用户、环境变量、字符集配置缺失,基础服务正常
3. 核心根因
90% 异常 = 设备树(DTS) 配置不全、引脚/电源/内存/中断定义错误
剩余问题为根文件系统缺少用户、组、环境变量、字符集 。
硬件本身(芯片、DDR、NAND、蓝牙)无损坏。