深入MTK Android BSP:如何确定编译目标与查找项目设备树

在联发科(MTK)平台的 Android BSP 开发中,我们常常遇到两个核心问题:

  • lunch 时到底该选哪个产品目标?

  • 项目使用的设备树(DTS)到底是怎么被绑定的?

本文基于真实的项目结构,拆解 MTK BSP 的配置体系,帮助你快速定位编译目标和设备树绑定关系。

1. 理解 MTK BSP 的板级配置目录

以 Android 14(或类似版本)的 BSP 为例,板级相关的配置通常位于:

bash 复制代码
device/mediatek/
├── build/          # 编译脚本,包含 vendorsetup.sh
├── common/         # 公共配置
├── kernel/         # 内核相关模板
├── mt8189/         # 某一芯片公板配置(如 mt8189)
├── vendor/         # 更多产品变体(SKU)的 Vendor 分区配置
└── ...

而我们常见到的 device/mediateksample/ 目录,则存放着备选的硬件参考设计(Reference Design),例如:

bash 复制代码
device/mediateksample/
├── aiot8391p2_64_bsp
├── aiot8391p3_64_bsp
├── vf_aiot_32_ago
├── vf_aiot_64_ab
└── vf_aiot_64_arm82

这些目录每一个都对应一个独立的 lunch 目标,即一个可以编译的完整产品。


2. 如何确定当前项目应该选择哪个编译目标?

如果你接手一个新项目,需要立刻知道应该 lunch 哪一个,请按以下顺序操作:

2.1 查看 AndroidProducts.mk(最权威的产品列表)

进入 device/mediateksample/ 目录,打开 AndroidProducts.mk 文件:

bash 复制代码
cd device/mediateksample
cat AndroidProducts.mk

你会看到类似这样的内容:

bash 复制代码
PRODUCT_MAKEFILES += $(LOCAL_DIR)/aiot8391p2_64_bsp/device.mk
PRODUCT_MAKEFILES += $(LOCAL_DIR)/aiot8391p3_64_bsp/device.mk
PRODUCT_MAKEFILES += $(LOCAL_DIR)/vf_aiot_32_ago/device.mk
PRODUCT_MAKEFILES += $(LOCAL_DIR)/vf_aiot_64_ab/device.mk
PRODUCT_MAKEFILES += $(LOCAL_DIR)/vf_aiot_64_arm82/device.mk

每行的目录名就是可用的 lunch 目标名称。通常第一个条目或者带有明显项目代号的就是当前 SDK 的默认目标。

2.2 如果已经执行过 sourcelunch

直接查看环境变量:

bash 复制代码
echo $TARGET_PRODUCT

2.3 使用 get_build_var 随时查询

在源码根目录,先加载编译环境,再查询:

bash 复制代码
source build/envsetup.sh
get_build_var TARGET_PRODUCT

注意 :如果之前没有执行 lunch$TARGET_PRODUCT 为空,菜单中也可能看不到 MTK 的产品。这是因为 MTK 通常不通过 add_lunch_combo 注册到全局菜单,你必须直接指定产品名:

bash 复制代码
lunch aiot8391p3_64_bsp

3. 设备树绑定:公版与项目专用 DTS 分离

确定了 lunch 目标后,下一个问题就是:当前项目绑定了哪一个设备树(DTS)?

MTK BSP 的一大特点是:公版 DTS 与项目 DTS 分离管理

3.1 内核主 Makefile 中看到的都是公版

如果你打开 kernel-6.1/arch/arm64/boot/dts/mediatek/Makefile,会看到诸如:

bash 复制代码
dtb-$(CONFIG_ARCH_MEDIATEK) += mt8183-evb.dtb
dtb-$(CONFIG_ARCH_MEDIATEK) += mt8192-evb.dtb
...

这些是芯片厂商提供的通用评估板(EVB)设备树 ,用于让开发者快速跑通一个基础系统,并不包含你的项目专用设备树

3.2 项目专用设备树在哪里?

你的项目设备树(例如 aiot8391p3_64_bsp.dtb)一般存在于以下位置之一:

  • vendor/mediatek/kernel_modules/ 下的某个模块目录

  • vendor/mediatek/dts/kernel-6.1/drivers/misc/mediatek/dts/

  • 甚至是 device/mediatek/mt8189/ 下的某个子目录

快速搜索方式

bash 复制代码
TARGET_BOARD_PLATFORM := mt8189
bash 复制代码
find . -name "*aiot8391*" -o -name "*mt8391*"
# 或直接查找生成的 dtb
find out/target/product/aiot8391p3_64_bsp/ -name "*.dtb"

3.3 板级配置中如何指定设备树?

进入你的产品目录(如 device/mediateksample/aiot8391p3_64_bsp),查看 BoardConfig-vext.mkBoardConfig-kernel.mk:

bash 复制代码
grep -E "TARGET_BOARD_PLATFORM|TARGET_KERNEL_DEVICE_TREE" *.mk

通常你会看到:

bash 复制代码
TARGET_BOARD_PLATFORM := mt8189

但可能没有显式定义 TARGET_KERNEL_DEVICE_TREE。这意味着设备树列表完全由内核构建系统或 Vendor 模块管理,而最终运行时的选择由 Bootloader 根据硬件 ID 完成。

如果想追溯具体的 DTS 文件,需要去查看 vendor/mediatek/ 中的 Android.mkKbuild,它们可能包含类似:

bash 复制代码
include $(CLEAR_VARS)
LOCAL_MODULE := aiot8391p3_64_bsp.dtb
LOCAL_SRC_FILES := aiot8391p3_64_bsp.dts

4. 总结:一套清晰的定位流程

  1. 确定编译目标

    → 查看 device/mediateksample/AndroidProducts.mk,找出符合项目代号的产品名。

    → 直接 lunch <产品名>无需依赖菜单

  2. 定位设备树

    → 先看产品目录下的 BoardConfig-vext.mk,确认 TARGET_BOARD_PLATFORM

    → 如果未显式指定 DTS,则去 vendor/mediatek/ 下搜索与产品名相关的 .dts.dtb

    → 内核主 Makefile 中的列表仅包含公版,不可作为项目参考。

  3. 理解分离设计

    MTK 将"芯片平台通用配置"与"客户项目特定配置"解耦,保证了上游代码的整洁,也让不同项目的硬件差异被隔离在较小的自定义模块中。

掌握了这套方法,你就能在任何 MTK BSP 项目中快速找到正确的编译目标和设备树绑定,无需再在陌生的目录结构中碰运气。

相关推荐
宝杰X718 小时前
Android Room3 多平台数据库
android·数据库
huibin14785236921 小时前
热缓解学习记录
android·学习
小田的博客1 天前
SAP MM 供应商银行主数据更新报错!message R1228!
android·java·服务器
一笑的小酒馆1 天前
Android智能猫砂盆视频加载慢卡顿问题分析
android
只会cv的小前端1 天前
七巧低代码服务端脚本使用方法
android·低代码·rxjava
1 天前
Android 自定义 View 实战:从零打造工业级全向摇杆控件(OmniJoystickView)
android·kotlin·自定义view·摇杆控件
雨白1 天前
深入理解 Kotlin 协程 (十一):以逸待劳,探秘 select 多路复用与并发安全策略
android·kotlin
hunterandroid1 天前
[Android 从零到一] Android 深度链接与 App Links:从 URI Scheme 到可验证的应用跳转
android
我命由我123451 天前
Jetpack Compose - Material Design 断点范围、WindowSizeClass、针对不同屏幕尺寸创建预览、四类导航栏
android·java·开发语言·java-ee·kotlin·android jetpack·android runtime
2501_915106321 天前
Python爬虫从零开始:七天掌握HTTP协议、数据解析与反爬策略
android·ios·小程序·https·uni-app·iphone·webview