瑞芯微Rockchip平台U-Boot初始化完整流程,board_init_f/r源码拆解
大家好我们是触觉智能。很多粉丝朋友和客户在调RK板子时看不懂board init f/r本文把U-Boot两阶段初始化拆开:先内存规划后设备初始化重定位地址从DRAM顶端逐层向下算希望对大家有帮助。前言问题场景U‑Boot Proper的初始化分为两个阶段——board_init_f在低地址执行的早期初始化和board_init_r重定位后在高地址执行的后期初始化。这两个阶段被重定位分隔职责完全不同。本文通过完整时序图和每个initcall的解析深入展示两个阶段的工作细节。U‑Boot从低地址启动到最终停在命令行中间经历了一个复杂的两阶段初始化过程。看到board_init_f和board_init_r这两个函数名常常不清楚它们各自做了什么、为什么需要拆成两个阶段、以及重定位在中间扮演了什么角色。更关键的是RK3576的重定位地址是如何通initcall序列从DRAM顶端逐步向下挖计算出来的本文基于触觉智能Purple Pi OH2RK3576开发板演示逐函数拆解initcall序列用完整时序图还原从 DRAM 顶端“向下挖”的内存分配过程直至U-Boot重定位完成、进入命令行。两阶段总览board_init_f阶段详解board_init_f的核心是一个initcall序列定义在common/board_f.c。每个函数按顺序执行主要是预留内存空间和计算重定位地址。init_sequence_f 关键函数说明函数职责执行后setup_fdt检查/准备设备树设置gd-fdt_blobsetup_dest_addr计算DRAM大小确定末端地址设置gd-ram_size, gd-relocaddr初值reserve_round_4k4KB对齐gd-relocaddr向下对齐reserve_mmu为MMU页表预留空间gd-relocaddr向下移动页表大小reserve_video为显示framebuffer预留gd-relocaddr向下移动显存大小reserve_trace为trace缓冲区预留gd-relocaddr向下移动reserve_uboot★为U‑Boot自身预留空间gd-relocaddr减去monitor长度reserve_malloc为malloc堆预留gd-malloc_base确定reserve_board为板级数据预留board_before /board_after钩子reserve_global_data为gd结构预留gd-new_gd确定reserve_fdt为设备树预留新位置gd-fdt_size, fdt_relocreserve_stacks栈空间预留gd-start_addr_spsetup_reloc★最终确定gd-relocaddrrelocation就绪serial_init串口初始化print信息可用console_init_f控制台早期初始化标准输出初内存分配顺序从DRAM末端向下分配DRAM末端┌──────────────────────────┐ ← gd-ram_top│MMU页表 │ reserve_mmu├──────────────────────────┤│Videoframebuffer │ reserve_video├──────────────────────────┤│Tracebuffer │ reserve_trace├──────────────────────────┤│ U‑Boot自身 (重定位后) │ ← reserve_uboot → gd-relocaddr├──────────────────────────┤│ malloc堆 (CFG_MALLOC_LEN)│ reserve_malloc → gd-malloc_base├──────────────────────────┤│ 板级数据 (board_info) │ reserve_board├──────────────────────────┤│GD(globaldata) │ ← reserve_global_data → gd-new_gd├──────────────────────────┤│ 设备树 (FDT) │ reserve_fdt├──────────────────────────┤│ 栈 (向下增长) │ ← reserve_stacks → gd-start_addr_sp└──────────────────────────┘重定位分隔符relocate_code()在arch/arm/lib/relocate.SARM架构中实现ENTRY(relocate_code)// r0 sp (新栈地址)// r1 new_gd (新全局数据地址)// r2 relocaddr (目标地址)// 1. 复制自身ldr r1, __image_copy_startldr r2, __image_copy_endmemcpy(r0, r1, r2 - r1)// 2. 修复.rel.dyn重定位表ldr r2, __rel_dyn_startldr r3, __rel_dyn_endfix_relocations:// 3. 跳转到新地址ldr r0, board_init_r// 已经过relocation fixbx r0ENDPROC(relocate_code)board_init_r阶段详解重定位后board_init_r在common/board_r.c中执行initcall序列的核心是初始化所有设备和服务。init_sequence_r关键函数两阶段职责对比维度board_init_fboard_init_r执行地址低地址(0x40200000)高地址(DRAM末端)核心任务内存规划重定位准备完整设备初始化命令行DRAM信息使用中完全就绪驱动模型未初始化完整初始化设备树检查/预留空间扫描所有节点并绑定驱动环境变量无加载并可用网络无完整TCP/IP文件系统无ext4/FAT就绪命令行无交互式shell结束状态调用relocate_code永不返回进入main_loopPurple Pi OH2开发板是触觉智能RK3576核心板SOM7609系列配套的评估开发板搭载4核A724核A53M0多核异构处理器主频2.2GHz集成6Tops算力 NPU轻松应对AI推理、边缘计算与轻量级AI端侧学习。配套完善SDK、丰富资料与Demo有助于项目前期快速开发验证。

相关新闻

CMake构建CUDA工程全攻略:架构配置、生态库链接与调试实践

CMake构建CUDA工程全攻略:架构配置、生态库链接与调试实践

接手CUDA工程时,最让我难受的往往不是 kernel 写不出来,而是编译系统本身在拖后腿。不少项目用了三年甚至五年前的 CMake 写法,还在用find_package(CUDA REQUIRED)加一串全局宏定义和库路径,换一张显卡、换一个 SDK 版本就崩一次。…

2026/10/17 7:55:15 阅读更多 →
Odyssey-3世界模型免费试玩实测:从一句话到可交互场景

Odyssey-3世界模型免费试玩实测:从一句话到可交互场景

1. 世界模型突然免费开放,这件事为什么值得聊10月12日,Odyssey-3 世界模型宣布开放免费试玩。消息一出,不少做生成式内容、做交互应用、做游戏原型的朋友都在群里转。我第一时间去试了一轮,从注册到跑出第一段可交互场景&#xff…

2026/10/17 7:55:15 阅读更多 →
从零实现mini-redis:RESP协议解析与序列化实战指南

从零实现mini-redis:RESP协议解析与序列化实战指南

做mini-redis这类练手项目,很多人一上来就埋头写命令处理逻辑,结果写到一半发现卡在解析客户端请求这一层。我自己第一次实现时就吃过这个亏,等真正把RESP协议弄明白,后面所有功能开发都顺了。RESP全称是REdis Serialization Prot…

2026/10/17 7:55:15 阅读更多 →

最新新闻

YOLOv11+Django+DeepSeek:从零构建水下鱼类检测系统

YOLOv11+Django+DeepSeek:从零构建水下鱼类检测系统

水下鱼类检测现在是个挺热闹的方向,生态监测、水产养殖、海洋科研都在用。但真做过的朋友都知道,模型训练出来只是第一步,怎么把它包装成一个“别人能用的东西”才是麻烦事。这个项目标题其实已经把所有关键点都列出来了——YOLOv11做识别、D…

2026/10/17 8:40:24 阅读更多 →
AGI不是更聪明的AI,而是目标生成机制的范式革命

AGI不是更聪明的AI,而是目标生成机制的范式革命

1. 这不是科幻,是正在发生的工程演进——AGI到底在说什么“什么是 AGI,我们如何通向它——一份写给普通人的路线图”这个标题里,“AGI”三个字母最近频繁出现在科技媒体、投资人会议甚至咖啡馆闲聊中,但它常被混同于“更聪明的Cha…

2026/10/17 8:40:24 阅读更多 →
纯CPU跑大语言模型:免费资源下的量化部署与推理实践

纯CPU跑大语言模型:免费资源下的量化部署与推理实践

经常有人问我,没有独立显卡、只有几G内存的机器到底能不能跑大语言模型。我这次直接把手里能用的免费CPU资源翻了个底朝天,在纯CPU环境下把Qwen3.5、DeepSeek-R1、Gemma 3、Llama 3.2这几个热门开源模型都跑通了一遍。整个过程没有花一分钱,也…

2026/10/17 8:40:24 阅读更多 →
AGI本质是认知范式迁移,不是更聪明的Siri

AGI本质是认知范式迁移,不是更聪明的Siri

1. AGI不是“更聪明的Siri”,而是认知范式的彻底迁移很多人第一次听说AGI,是在某篇科技媒体标题里——“AGI即将诞生”“人类最后的堡垒即将失守”。接着点进去,发现通篇在讲大模型参数量破万亿、多模态理解能力提升、推理链长度翻倍……于是…

2026/10/17 8:40:24 阅读更多 →
SQL注入与WAF防护:从原理到纵深防御的实践指南

SQL注入与WAF防护:从原理到纵深防御的实践指南

第一次在日志里看到整页整页的 WAF 告警刷屏,是帮客户做安全加固的时候。业务倒是没瘫痪,数据库的慢查询日志里却多出了很多条明显不属于正常业务的 SQL 语句。顺着告警往前翻,攻击者对着一个搜索接口试了上百种不同的输入参数。WAF 当时是开…

2026/10/17 8:40:24 阅读更多 →
Pygame飞机大战工程拆解:代码与素材的完整游戏开发指南

Pygame飞机大战工程拆解:代码与素材的完整游戏开发指南

简介:一套结合源码与视觉素材的飞机大战游戏开发资料包,基于面向过程和面向对象两种编程范式给出完整Python实现。面向过程版将游戏拆分为初始化、渲染、事件处理、更新与主循环等模块;面向对象版通过Plane、Bullet、Enemy等类的定义、封装与…

2026/10/17 8:39:24 阅读更多 →

日新闻

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

DeepSeek选型与部署:V3/R1、Ollama、API全攻略

简介:《DeepSeek使用方法.pdf》是一份面向DeepSeek入门及进阶用户的完整使用指南,重点围绕V3与R1两款模型的能力差异与适用场景展开,帮助读者根据任务类型与成本选择合适的模型。资源共1个PDF文件,压缩包大小约311KB,篇…

2026/10/17 0:00:25 阅读更多 →
200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

200+Deepseek润色指令拆解:从底层原理到场景落地的完整指南

简介:这是一份聚焦DeepSeek提示词优化的《200Deepseek润色指令》PDF文档,共收录两百余条可直接套用的润色指令,涵盖语法修正、风格统一、逻辑梳理、表达精炼等维度,并针对商务写作、学术论文、广告文案等场景给出差异化建议。文档…

2026/10/17 0:00:25 阅读更多 →
OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

OpenCV轮廓法物体计数系统:轻量、可控、可落地的工业级实现

简介:本资源是一份基于OpenCV的本科课程设计完整报告,面向计算机视觉初学者、图像处理学习者及高校通信/信息类专业学生,解决物体智能计数与检测结果结构化记录的实际问题。项目覆盖图像预处理、轮廓检测、边界框绘制、轨迹栏交互式参数调节、…

2026/10/17 0:00:25 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/16 21:35:51 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/17 1:44:59 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/16 15:04:24 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 21:54:38 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 3:49:43 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/16 14:23:36 阅读更多 →