【全志】 OKT153(sun8iw22) 启动链全流程详解

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
  1. 自动倒计时启动,AMP 多核协同初始化完成;
  2. 读取 Android 格式内核镜像,加载到指定内存地址;
  3. 加载设备树(DTS) 二进制文件(硬件配置描述表);
  4. 执行 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. 各层健康度

  1. Boot0:✅ 完全正常
  2. OP-TEE:⚠️ 串口引脚告警,主体正常
  3. U-Boot:⚠️ 串口/SPI/LCD/网口 DTS 配置异常,引导功能正常
  4. Kernel:🔴 内存重叠、RTC/I2C、网口、WiFi、SD 卡故障(均为DTS问题)
  5. 应用层:⚠️ 权限、用户、环境变量、字符集配置缺失,基础服务正常

3. 核心根因

90% 异常 = 设备树(DTS) 配置不全、引脚/电源/内存/中断定义错误

剩余问题为根文件系统缺少用户、组、环境变量、字符集

硬件本身(芯片、DDR、NAND、蓝牙)无损坏

相关推荐
键盘上的猫头鹰1 小时前
【Linux 基础教程(一)】概述、安装与网络配置:VMware + CentOS + NAT + XShell 远程连接
linux·网络·centos
枳实-叶1 小时前
【Linux驱动开发】第18天:I2C驱动深度解析
linux·运维·驱动开发
shandianchengzi1 小时前
【记录】Ubuntu|Ubuntu 26.04 笔记本耗电过快,排查 省电过程
linux·运维·ubuntu
陳10302 小时前
Linux:信号
linux·运维·服务器
小此方2 小时前
Re:Linux系统篇(二十五)进程篇·十:深度硬核!Linux 进程等待,从 task_struct 源码到位图状态解构
linux·运维·驱动开发
z202305082 小时前
RDMA之DCQCN (14)
linux·服务器·网络·人工智能·ai
zh路西法2 小时前
【ROS2相机标定】基于棋盘格的单目标定法
linux·c++
用户2367829801682 小时前
Linux killall 命令详解:按进程名批量终止进程的原理与实践
linux
无限进步_2 小时前
【Linux】进度条:行缓冲区、\r 与 fflush 的实战
linux·服务器·开发语言·数据结构·后端