MTK安全启动分析9:MTK LK 编译Makefile完整解析
MTK LK 编译Makefile完整解析整体概述MTK平台LittleKernelBL33二级引导器是由编译Makfile脚本build_lk.mk来编译核心特性多LK编译模式LK_MODE一套LK源码编译出不同功能固件普通/解锁/高级菜单/GPT升级/FES工厂模式分离「编译中间产物目录」「系统安装输出目录」支持拼接DTB设备树到LK镜像自动输出logo分区镜像配套清理规则、droidcore打包依赖可配置交叉编译、屏幕分辨率、平台安全开关等编译宏。一、核心变量逐段拆解1. 输出路径分层定义# 系统最终安装路径刷机包/Android系统打包使用 INSTALLED_LK$(LK$(MODE)_TARGET : $(PRODUCT_OUT)/lk$(call to-lower,$(LK_MODE)).img INSTALLED_LOGO$(LK_MODE)_TARGET : $(PRODUCT_OUT)/logo$(call to-lower,$(LK_MODE)).img # 编译中间缓存目录obj中间文件、elf、原始lk.img TARGET_LK$(LK_MODE)_OUT : $(TARGET_OUT_INTERMEDIATES)/LK$(LK_MODE)_OBJ # LK源码根目录区分相对/绝对路径 TARGET_LK$(LK_MODE)_ROOT_OUT : $(if $(filter /% ~%,$(TARGET_LK$(LK_MODE)_OUT)),,$(LK_ROOT_DIR)/)$(TARGET_LK$(LK_MODE)_OUT) # LK源码编译产出原生lk.img未拼接DTB BUILT_LK$(LK_MODE)_TARGET : $(TARGET_LK$(LK_MODE)_OUT)/build-$(LK_PROJECT)/lk.img # 收集所有LK模式全局汇总 ALL_BUILT_LK_TARGET : $(ALL_BUILT_LK_TARGET) $(BUILT_LK$(LK_MODE)_TARGET)分层逻辑BUILT_LKxxx_TARGETLK源码原生编译输出纯净无DTBINSTALLED_LKxxx_TARGET成品镜像 lk原生镜像 DTB拼接存product/out供整机打包logo镜像直接从编译目录复制输出ALL_BUILT_LK_TARGET 全局收集所有模式的编译产物给全局固件脚本遍历。2. 全局编译参数LK_MAKE_OPTION传递给LK顶层Make的编译参数分为通用参数 模式专属开关# 通用基础参数 LK_MAKE_OPTION : $(if $(SHOW_COMMANDS),NOECHO) LK_MAKE_OPTION $(if $(LK_CROSS_COMPILE),TOOLCHAIN_PREFIX$(LK_CROSS_COMPILE)) LK_MAKE_OPTION BOOTLOADER_OUT$(TARGET_LK$(LK_MODE)_ROOT_OUT) LK_MAKE_OPTION ROOTDIR$(LK_ROOT_DIR) LK_MAKE_OPTION LCM_WIDTH$(LCM_WIDTH) LCM_HEIGHT$(LCM_HEIGHT) LK_MAKE_OPTION COMPILER$(LK_ROOT_DIR)/$(SOONG_CLANG)通用参数说明NOECHOSHOW_COMMANDS开启时打印完整编译命令TOOLCHAIN_PREFIX交叉编译器前缀ARM64 clang/gccBOOTLOADER_OUT指定LK编译中间文件输出目录ROOTDIRLK源码根路径LCM_WIDTH/LCM_HEIGHT屏幕分辨率用于开机logo、UI界面COMPILER指定clang编译器路径MT现代平台统一使用LLVM。3. 分LK_MODE 专属编译宏核心业务区分LK_MODE是区分固件功能的核心开关每种模式开启/关闭不同安全、升级、调试功能1_DEF_UNLOCKifeq ($(LK_MODE),_DEF_UNLOCK) LK_MAKE_OPTION MTK_BUILD_DEFAULT_UNLOCKyes endif作用编译默认解锁版LK开机fastboot默认允许unlock解锁关闭部分安全校验多用于工程机、定制开发机量产user版本不会使用此模式。2_ENHANCE_MENUifeq ($(LK_MODE),_ENHANCE_MENU) LK_MAKE_OPTION MTK_BUILD_ENHANCE_MENUyes endif作用增强recovery/ fastboot菜单增加高级调试项、分区擦除、内存读写、产线校准入口工厂调试机型专用。3_DEEP_GPT_UPDATEifeq ($(LK_MODE),_DEEP_GPT_UPDATE) LK_MAKE_OPTION MTK_GPT_UPDATE_SUPPORTyes LK_MAKE_OPTION MTK_BUILD_DEFAULT_UNLOCKyes LK_MAKE_OPTION MTK_SECURITY_SW_SUPPORTno endifGPT分区深度升级专用固件开启完整GPT分区表重写支持默认解锁关闭安全启动SBC无镜像验签仅用于整机OTA大分区重构、产线重分区场景。4_FES工厂烧录模式关键ifeq ($(LK_MODE),_FES) LK_MAKE_OPTION MTK_SECURITY_SW_SUPPORTno LK_MAKE_OPTION CFG_DTB_EARLY_LOADER_SUPPORTno LK_MAKE_OPTION PLATFORM_FASTBOOT_EMPTY_STORAGEyes LK_MAKE_OPTION APPSBOOTHDR_FILES endif工厂产线专用极简LK关闭全部安全启动校验SBC关闭不验镜像关闭DTB早期加载fastboot空存储模式支持空闪存烧写固件移除安卓APP相关驱动镜像体积极小仅产线刷机台使用成品系统不加载该镜像。二、编译规则依赖链从上到下规则1编译原生LK镜像BUILT_LK$(LK_MODE)_TARGET.KATI_RESTAT: $(BUILT_LK$(LK_MODE)_TARGET) $(BUILT_LK$(LK_MODE)_TARGET): PRIVATE_MAKE_OPTION : $(LK_MAKE_OPTION) $(BUILT_LK$(LK_MODE)_TARGET): $(LK_MAKE_DEPENDENCIES) $(hide) mkdir -p $(dir $) $(PREBUILT_MAKE_PREFIX)$(MAKE) -C $(LK_DIR) $(PRIVATE_MAKE_OPTION) $(LK_PROJECT).KATI_RESTATAndroid构建工具标记依赖文件变更时强制重编译依赖LK_MAKE_DEPENDENCIESLK所有源码、头文件、板级配置执行逻辑创建输出目录 → 进入LK源码目录传入所有模式编译参数编译目标工程LK_PROJECT输出无DTB的纯净lk.img。规则2成品LK镜像拼接DTBINSTALLED_LK$(LK_MODE)_TARGET$(INSTALLED_LK$(LK_MODE)_TARGET): $(BUILT_LK$(LK_MODE)_TARGET) $(MTK_LK_DTB_TARGET) $(hide) mkdir -p $(dir $) $(hide) cat $ $(MTK_LK_DTB_TARGET) $关键逻辑依赖LK原生镜像 LK阶段设备树dtbcat二进制拼接lk主体镜像 追加dtb二进制输出到product/out是整机打包、OTA、刷机工具使用的最终lk分区镜像对应你Preloader、TEE链路ATF跳转后运行的BL33就是该镜像。规则3logo镜像输出$(INSTALLED_LOGO$(LK_MODE)_TARGET): $(BUILT_LK$(LK_MODE)_TARGET) $(hide) mkdir -p $(dir $) $(hide) cp -f $(dir $)logo.img $LK编译过程同步生成开机logo图片镜像直接复制到输出目录用于logo分区烧写。规则4清理伪目标 clean-lk.PHONY: lk clean-lk clean-lk$(LK_MODE) clean-lk: clean-lk$(LK_MODE) clean-lk$(LK_MODE): PRIVATE_MODE : $(LK_MODE) clean-lk$(LK_MODE): $(hide) rm -rf $(INSTALLED_LK$(PRIVATE_MODE)_TARGET) $(INSTALLED_LOGO$(PRIVATE_MODE)_TARGET) $(TARGET_LK$(PRIVATE_MODE)_OUT)伪目标执行make clean-lk会删除out目录成品lk/logo镜像全部编译中间obj目录完全清理该模式编译产物。规则5droidcore打包依赖ifneq ($(LK_MODE),_FES) droidcore lk: $(INSTALLED_LK$(LK_MODE)_TARGET) $(INSTALLED_LOGO$(LK_MODE)) endifdroidcore是Android整机打包总目标排除_FES工厂模式量产整机不会打包工厂极简LK正常模式下编译整机时自动同步编译lklogo镜像。三、和之前MT8766整套启动链路联动1.Preloader BL2 加载lk_a/lk_bA/B槽镜像来源就是这份Make输出的INSTALLED_LKxxx_TARGET2.LK_MODE区分量产user默认普通模式开启MTK_SECURITY_SW_SUPPORTLK镜像必须经过OEM签名Preloader/ATF双层验签工程eng_DEF_UNLOCK解锁LK支持fastboot任意擦写产线烧录单独编译_FES极简无安全LKOPT大分区升级_DEEP_GPT_UPDATE3.ATF BL31完成TEE初始化后ERET跳转的入口就是该拼接好LKDTB镜像4.LK内置logo驱动开机画面来自编译同步输出的logo.img。四、总结多模式隔离编译一套源码产出解锁/产线/升级/量产多种LK无需改源码仅切换LK_MODEDTB拼接自动化LK阶段设备树直接二进制拼接无需额外工具处理目录分离中间obj与最终刷机镜像分开清理/打包互不干扰安全开关可配置通过MTK_SECURITY_SW_SUPPORT一键开关LK镜像验签适配量产/工程整机构建联动并入droidcore全量编译自动生成lk分区文件配套完整清理规则开发编译环境易维护。五、易混点BUILT_LK 源码原生镜像无DTB仅编译中间文件INSTALLED_LK 对外成品镜像LKDTB拼接刷机包使用_FES仅工厂使用不会打包进零售整机固件MTK_SECURITY_SW_SUPPORTno 代表关闭安全启动镜像跳过RSA验签仅调试/产线场景使用。

相关新闻

沁园春·智能潮

沁园春·智能潮

沁园春智能潮浦江七月,展台十万,机杼争朝。 望徐汇滩头,机器成阵; 张江云上,算力奔涛。 月之暗面,一朝破壁,开源权重撼寰霄。 消息出,惊华尔街夜,股海生潮。莫道东方难超…

2026/10/26 7:10:50 阅读更多 →
【Linux系统编程】--线程基础和线程控制

【Linux系统编程】--线程基础和线程控制

一、线程基本概念1、认识线程提到线程,那么我们不得不先回忆进程,我们知道进程是在内存中执行的程序,然后进程进程内核数据结构数据和代码。然后我们创建一个进程要给其创建对应的task_struct,虚拟地址空间,页表等。线…

2026/10/26 7:10:50 阅读更多 →
设计EDA 研发经理 HR + 技术高管双线面试打分、综合评估录用完整标准化流程

设计EDA 研发经理 HR + 技术高管双线面试打分、综合评估录用完整标准化流程

一、岗位基础定位 1. 岗位定义 EDA 研发经理(部门 / 产品线经理),管理规模 20–50 人研发团队,统筹多条 EDA 产品线、年度研发预算、项目全生命周期交付;兼具顶层技术决策、团队经营、预算管控、产业链商务协同、人才梯队搭建、IP & 合规风控六大核心权责,汇报对象…

2026/10/26 7:10:50 阅读更多 →

最新新闻

Electron桌面应用开发实战:从环境搭建到打包发布全流程

Electron桌面应用开发实战:从环境搭建到打包发布全流程

做前端这些年,我大部分时间都在跟浏览器标签页打交道,直到第一次把桌面应用跑起来,才发现原来自己一直被限制在地址栏和刷新按钮围起来的框框里。Electron这个词,最开始是在某段时间频繁出现在同事的讨论里,一个用HTML…

2026/10/26 12:00:21 阅读更多 →
滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

滑盖智能锁T109深度解析:结构原理、安装调试与故障排查

简介:亚太天能T109滑盖智能锁产品说明书是一份PDF格式的官方技术文档,主要面向智能锁安装人员、终端用户及售后维护者,帮助快速掌握产品安装、配置与常见故障处理。全包仅1个PDF文件,大小4.37MB,内容结构清晰&#xff…

2026/10/25 22:36:10 阅读更多 →
PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

PMSM弱磁控制原理与Simulink建模:高速AGV驱动系统设计指南

上个月我在调试一台高速AGV的驱动系统,整车要求空载跑到8m/s,电机转速已经拉到额定点,驱动器的输出电压也顶到了母线电压极限附近。再往上踩速度指令,转速纹丝不动,三相电流反而开始震荡。那会儿我的第一反应就是&…

2026/10/26 4:52:12 阅读更多 →
C++核心知识点:从内存管理到STL的实战指南

C++核心知识点:从内存管理到STL的实战指南

C 这门语言我前前后后折腾了十几年,用它写过嵌入式驱动、做过游戏服务端,也搭过基础组件库。每次看到新人一头扎进"C 核心知识点"这个搜索词,我其实挺感慨的——这门语言的难点从来不是语法多,而是知识点之间的耦合太深…

2026/10/26 12:00:21 阅读更多 →
T109滑盖智能锁怎么装?安装调试与故障排查全攻略

T109滑盖智能锁怎么装?安装调试与故障排查全攻略

简介:亚太天能T109滑盖智能锁产品说明书以PDF格式发布,适合智能锁用户、安装人员与售后维修人员阅读。内容围绕T109系列指纹密码刷卡锁展开,先介绍前面板、后面板、锁体、机械钥匙、电池盒盖等部件名称与功能,再给出完整安装步骤&…

2026/10/26 5:00:37 阅读更多 →
LLM知识降熵:从信息垄断到理解权下放

LLM知识降熵:从信息垄断到理解权下放

你有没有过这种经历:翻开源码注释、论文摘要或者一份专业报告,每个字都认识,连在一起却像天书。想找人聊聊,身边要么没人懂,要么懂的懒得跟你解释。后来我试着把同一段内容丢给一个大语言模型,几秒钟之后&a…

2026/10/26 3:16:46 阅读更多 →

日新闻

周新闻

月新闻

我发现了一个新思路:用 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/26 12:00:19 阅读更多 →
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/25 13:21:54 阅读更多 →
黑夜航拍船只数据集训练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/26 8:34:37 阅读更多 →