本文主线先吃颗定心丸别怕总结篇又长又难——本篇不教任何新硬核知识是收官对账前面 21 篇你已把每个文件拆开看过这里只干一件事把它们重新拼成「全工程地图 验收清单」顺着你已有的记忆一条条摆出来让你打勾。读时把自己当验收工程师对着清单逐项核对比喻见下方导读。本篇主线就一句本篇是一张移植收官验收单——先画清全文件地图哪些文件是你的、哪些内核是锁好的黑盒再列出八环节与四铁律作为做事顺序和红线。下面四站全是它的展开。️ 详细拆解路线四站跟着走不迷路第一站·收官动机为啥要有这篇总结前面每篇只盯一个文件容易只见树木本篇把它们串成一张可复用的地图。第二站·全文件地图把你要改的文件app/targets/和锁好的黑盒内核kernel_liteos_m/分层画清找文件 → 看编号 → 读对应篇。第三站·八环节环境→源码裁剪→配置→构建→链接→烧录→板级→汇编按顺序做事漏一步都做不完。第四站·四铁律分层 / 启动 VTORFPU / FPU 双宏 / 调度必调踩一条直接跑飞。读完全文记得回来看末尾的「全文总结」它会把上面四站串成一句话。零基础导读接第 13 篇交房清单、第 14 篇不说话的桥前面两篇你经历了毛坯房交房第 13 篇上电五步、向量表电话簿和内核过桥接管中断第 14 篇那座不说话的桥 启动文件。现在到了收房验收那天——你盖好了一栋能跑 LiteOS 的楼开发商也就是你递来一张《交房验收清单》上面列了8 道验收工序八环节和4 条绝对不许碰的红线四铁律。你照着清单一项项打勾——全过了 楼合格、板子稳稳跑起来漏一道工序或踩一条红线 验收不合格、直接跑飞。下一篇第 23 篇就是拿着这张清单和工程实际文件逐项对账的验房报告。先把 5 个对应关系记牢后面就不晕了现实比喻本文里的真名盖一栋能跑 LiteOS 的楼把 LiteOS-M 移植到 STM32MP157-M48 道验收工序八环节环境→源码裁剪→配置→构建→链接→烧录→板级→汇编4 条不可违反的红线四铁律① 分层 ② 启动(VTORFPU) ③ FPU 双宏 ④ 调度必调交房验收清单逐文件对账表第 23 篇改了啥、受哪条铁律约束拿着清单逐项打勾对账把清单和工程实际文件一条条比对一、第一站·收官动机为什么需要这张总 Checklist先说清为什么要有这篇总结。前面每篇只盯一个文件容易只见树木忘了它们怎么拼成一块能跑的板子这一站把散落的点串成一张可复用的地图后面移植任何 RTOS / 任何 Cortex-M 板子都照它走。一句话理解前面每篇只盯一个文件容易「只见树木」这篇把散落的点串成一张可复用的地图。前十四篇有个共同节奏每篇只盯一个文件或一类问题。讲board.c时全世界只有 GPIO讲los_dispatch.S时全世界只有寄存器和栈帧。这很利于单点吃透但容易让人忘了它们怎么拼成一块能跑的板子。本篇只做一件事把散落的点串成一张可复用的地图。你以后移植任何 RTOS / 任何 Cortex-M 板子照这张图走就不会漏环节、不会踩铁律。核心结论移植的工作量 app/ targets/ 里那十几个文件内核kernel_liteos_m/一行都不用改也不许改。做对靠8 环节按顺序做不挂靠4 铁律不踩线。第一站小结这篇是收官对账——前面每篇只盯一个文件容易只见树木本篇串成可复用地图。核心结论移植活儿全在 app/targets/ 那十几个文件内核禁改做对靠 8 环节按序、做不挂靠 4 铁律不踩线。二、第二站·全文件地图每个文件 一篇博客避坑先认清哪些是我的活、哪些不许碰。自改文件全收敛在 app/ 和 targets/内核是 git submodule锁死只读。读法很简单找文件 → 看编号 → 读对应篇。一句话理解自改文件全在 app/ 和 targets/ 两层内核层是「锁好的黑盒」禁改但出问题时得读得懂。自改文件全部收敛在app/和targets/内核是 git submodulesubmodulegit 的「子仓库」机制把别人维护的内核代码当成一个锁定版本的依赖挂进来本工程规定它只读、不准改禁改。读法很简单找文件 → 看编号 → 读对应篇。层文件对应文章一句话定位应用层app/main.c07 / 18启动四步法串联主线app_task.c18 / 19两个 LED 任务 任务创建板级适配targets/board.h/board.c08业务与硬件的插座标准system_stm32mp1xx.c09SystemInit 里到底干了什么startup_stm32mp15xx.S13 / 14复位后、main 前的五步 弱符号stm32mp157_m4_256k.lds10 / 11256KB SRAM 怎么分房子OS_CONFIG/target_config.h15-17一个宏决定一个功能去留securec/securec.h02手写安全函数垫片内核编译依赖内核层kernel_liteos_m/los_dispatch.S汇编 01-06上下文切换怎么换任务los_exc.S20 / 21死机了怎么进异常处理、怎么 bt其余数千文件—不碰但出问题时得读得懂内核层「禁改」是福不是坑把它想象成一个「出厂锁好的黑盒」——厂家把 RTOS 内核调好了封在里面你不用、也不许撬开改。你要做的只是在它外面「接线」。接线对错决定了板子跑不跑得起来但内核本身不用你重造。这恰恰是移植「省力」的地方。第二站小结自改文件全收敛在 app/targets/ 两层内核 submodule 锁死只读读法就是找文件 → 看编号 → 读对应篇内核出问题时也得读得懂。三、第三站·八环节按顺序做事漏一步都做不完认清地图后按八道工序顺序做事。前一步是后一步的地基——顺序错了后面全白搭。一句话理解移植有八步先后依赖前一步是后一步的地基——顺序错了后面全白搭。图注八环节就是八道关必须从左往右依次过先把环境搭好再配时钟、写链接脚本……一直到最后能汇编出固件。跳关会卡在后面某步到时候回头补。环节做什么对应文章为什么这步不能省① 环境准备装 GCC、OpenOCD、配 Git Bash01没工具链后面全白搭② 源码下载裁剪拉 kernel submodule删 HAL 胖依赖02不裁剪编译不过、体积爆 SRAM③ 配置头文件los_config.htarget_config.hsecurec垫片03 / 15-17内核怎么看你的板子全在这④ 构建 MakefileC_SOURCES裁剪清单、头文件搜索顺序04清单错一个文件就编不出⑤ 链接脚本 lds256KB SRAM 排布、ASSERT越界保护10 / 11排错了上电就 HardFault 或静默跑飞⑥ 烧录运行OpenOCD 双核配置、gdb-port 333406烧不对核M4≠A7连现象都看不到⑦ 板级适配board.*/system_*/startup.S/lds08-14硬件脏活全在这层换板只改这层⑧ 上下文切换汇编los_dispatch.S任务切换汇编 01-06不理解它死机时看不懂 backtrace表里几个词先给直白说明GCC / OpenOCDGCC 是编译器把 C 翻成机器码OpenOCD 是开源调试烧录工具。HAL芯片原厂给的「硬件抽象库」本工程为讲底层真相把它删了第 02 篇。SRAM芯片上的「内存」程序运行时的变量、栈都搁这本工程 M4 只有 256KB 可用。ASSERT链接脚本里的「越界自检」排布超出 SRAM 时直接报错拦下你。backtrace把函数调用链从栈里扒出来的过程第 20/21 篇三板斧之一。八环节的本质①-② 是搭台子③-⑥ 是让板子能编译能跑⑦ 是让板子认识你的硬件⑧ 是让任务能换起来。前六步解决跑起来后两步解决跑得对、挂了能捞。图注这张通关文牒把全系列收成八道关 四条红线。八环节是按顺序做的事四铁律是绝对不能碰的红线。下面两张图分别放大看。第三站小结八环节是项目级顺序——①-② 搭台子、③-⑥ 能编译能跑、⑦ 认硬件、⑧ 换任务前六步解决跑起来后两步解决跑得对、挂了能捞漏一步都做不完。四、第四站·四铁律绝不能踩的线踩一条直接跑飞环节是顺序铁律是底线。四条红线碰一条直接跑飞逐条过外加藏在源码里的四条技术铁律换任何 Cortex-M 板都必须成立。一句话理解环节是「顺序」铁律是「底线」——漏一步做不完踩一条直接挂。图注四铁律是四条碰了就翻车的红线① 内核层禁改只动 app/targets② 启动五步不能省③ FPU 双宏要齐④ 中断接管走 VTOR。记住这四条移植不会走歪。铁律① 分层业务只#include board.h业务层app/永远通过LED_*宏和BoardInit()访问硬件业务文件里出现任何寄存器地址都算违规。换了板子只改board.*两个文件app/一行不动。踩了会怎样业务和硬件耦合换板子要把所有.c重写一遍移植失去意义。铁律② 启动SystemInit 必配 VTOR FPU且排在 .data/.bss 之后SystemInit里必须开 FPUCPACR的 CP10/CP11并把向量表搬 SRAMVTOR0x10000000而且它必须排在启动五步的第 4 步.data 拷贝、.bss 清零之后这样它内部才能用全局变量、才能调函数。踩了会怎样VTOR 不配 → 第一个中断就飞FPU 不开 → 一碰浮点就 HardFault顺序错 → SystemInit 里访问未初始化变量是未定义行为。铁律③ FPU双宏一个不能少target_config.h里__FPU_PRESENT1和__FPU_USED1两个都得有。硬件有 FPU 时异常会自动多压 S0-S15即 D0-D7 FPSCRD8-D15 不在硬件帧里漏了这俩宏内核以为没 FPU走_NoFloatInPsp异常帧按 104 字节去读、硬件实际压了 176 字节每层错位 72 字节backtrace 整条链错位函数名全乱码详见第 21 篇。踩了会怎样HardFault 后bt全瞎定位不到真凶。铁律④ 调度 基线LOS_Start 必须调读码前先 restoremain.c四步法的第 4 步LOS_Start()一个字不能少——少它调度器不接管任务创建出来也永不开跑。外加一条操作铁律读这套工程任何代码前先bash tools/demo_hang.sh restore否则你看到的是课堂破坏现场不是基线。踩了会怎样缺 LOS_Start → 红灯常亮绿灯不亮、卡在第一个 LOS_TaskDelay不 restore → 把演示态当真实写法写进教程。技术铁律速查与勘误篇 / 切换汇编篇口径一致上面四条是「操作铁律」——告诉你动手时别踩什么线。下面四条是「技术铁律」——藏在los_dispatch.S源码里的不变量换任何 Cortex-M 板都必须成立。两者是「怎么干」与「为什么能跑」的两层口径缺一不可。技术铁律内容工程落点① arch 层汇编不改只学los_dispatch.S/los_exc.S是内核官方代码只读不碰kernel_liteos_m/submodule②bx r6不经 SVC 直跳v3.0-LTS 首任务启动走HalStartToRun直接bx r6不走 SVC 软中断los_dispatch.SHalStartToRun末尾③ FPU 栈帧 68/204 对齐TaskContext结构体非 FPU68B、FPU204B编译期 vs 运行期必须对上los_context.cHalTskStackInittarget_config.h双宏④ PendSV/SysTick 最低优先级SHPR3 0xF0F00000SysTick0xF0、PendSV0xF0最低档 15los_dispatch.SHalStartToRun第 1 步这四条技术铁律的展开见勘误篇bx r6跳飞真凶和切换汇编系列五篇。操作铁律保证你「搭得起来」技术铁律保证你「跑得起来且查得明白」。第四站小结四铁律是底线——① 分层业务只#include board.h② 启动VTORFPU 排 .data/.bss 后③ FPU 双宏成套 ④ 调度必调 读码前先 restore外加藏在los_dispatch.S里的四条技术铁律不改只学 /bx r6直跳 / 栈帧 68·204 对齐 / PendSV·SysTick 最低优先级。踩一条直接跑飞。五、全文总结回到主线本文一句话总结建议收藏移植的活儿全在app/targets/那十几个文件内核kernel_liteos_m/当锁好的黑盒只读不碰照着八环节环境→源码裁剪→配置→构建→链接→烧录→板级→汇编按顺序走、别漏一步守住四铁律分层 / 启动 VTORFPU / FPU 双宏 / 调度必调别踩一条——漏一步做不完、踩一条直接跑飞。下一篇23拿这张清单逐项对账验收。用四站回顾一遍第一站·收官动机前面每篇只盯一个文件容易只见树木本篇把它们串成一张可复用的地图核心结论移植活儿全在 app/targets/ 那十几个文件、内核禁改靠 8 环节按序、4 铁律不踩线。第二站·全文件地图自改文件全收敛在 app/targets/ 两层内核 submodule 锁死只读读法就是找文件 → 看编号 → 读对应篇。第三站·八环节环境→源码裁剪→配置→构建→链接→烧录→板级→汇编顺序依赖——①-② 搭台子、③-⑥ 能编译能跑、⑦ 认硬件、⑧ 换任务漏一步做不完。第四站·四铁律分层 / 启动 VTORFPU / FPU 双宏 / 调度必调 读码前先 restore踩一条直接跑飞外加四条技术铁律换任何 Cortex-M 板都必须成立。本篇可复用经验速记照着做别只读□ 文件边界只改app/targets/那十几个文件内核kernel_liteos_m/当 submodule 锁死零改动。□ 八环节按序走环境→裁剪→配置→构建→链接→烧录→板级→汇编漏一步做不完。□ 四铁律别踩分层只#include board.h/ 启动VTORFPU 排 .data/.bss 后/ FPU 双宏成套 /LOS_Start必调且读码前先restore。□ 内核当黑盒出问题时读得懂los_dispatch.S/los_exc.S即可不修改。术语表本文出现缩写/符号含义八环节把工程从零搭起来的 8 道项目级工序顺序错一道做不完四铁律移植中 4 条绝对不能踩的底线踩一条直接跑飞submodulegit 子仓库机制内核层只读依赖app/应用层目录main.c / app_task.c业务只写这里targets/板级适配层目录自改文件收敛于此kernel_liteos_m/内核层目录git submodule禁改board.h / board.c板级 BSP 契约与实现业务唯一硬件接口system_stm32mp1xx.cSystemInit 所在文件startup_stm32mp15xx.S启动汇编五步 向量表 弱符号stm32mp157_m4_256k.lds链接脚本target_config.h平台裁剪清单一个宏决定一个功能去留securec / securec.h安全函数垫片手写 memcpy_s 等内核编译依赖los_dispatch.S内核上下文切换汇编换任务los_exc.S内核异常/死机处理汇编捞死机GCC / OpenOCDGNU 编译器 / 开源调试烧录工具HAL硬件抽象库本工程删了SRAM片内静态 RAM256KBASSERT链接脚本越界自检VTOR向量表偏移寄存器CPACR / CP10 / CP11协处理器访问控制寄存器开 FPU 的位LOS_Start启动调度器四步法第 4 步铁律④restoredemo_hang.sh 还原基线命令读码前先执行backtrace调用栈回溯系列导航上一篇第 21 篇 · 死机定位FPU 栈帧与 backtrace 本篇第 22 篇 · 移植总 Checklist八环节与四铁律 下一篇第 23 篇 · 移植总 Checklist全文件对账与目录板级适配与应用 07–2507 工程全景 08 BSP 09 SystemInit 10 lds上 11 lds下·解剖 12 lds下·照妖镜 13 启动文件 14 接管中断 15 target_config上 16 FPU栈档 17 改错速查 18 LED详解 19 LED实战 20 los_exc 21 FPU栈帧 22 八环节 23 全文件对账 24 六类判据 25 经验增删改留基础 01–0601 环境准备 02 源码下载裁剪 03 os_config 04 Makefile 05 链接脚本 06 烧录切换汇编 01–06汇编1 汇编2 汇编3 汇编4 汇编5 汇编6代码仓库stm32mp157-liteos-m Gitee · 基线 v0.1-baseline · 全部版本标签s-m Gitee](https://gitee.com/tstcoder/stm32mp157-liteos-m) · 基线 v0.1-baseline · 全部版本标签