深入解析瑞芯微RK3568 Android11 BSP架构从源码目录到系统定制作为一名长期从事嵌入式系统开发的工程师第一次打开瑞芯微原厂提供的Android11 SDK时面对密密麻麻的目录结构和数千个文件那种既兴奋又困惑的感觉至今记忆犹新。RK3568作为瑞芯微旗下性能优异的中高端芯片其BSP(Board Support Package)的复杂程度远超普通开发板但同时也蕴含着巨大的定制潜力。1. RK3568 Android11 BSP全景概览瑞芯微的Android BSP不同于标准的AOSP它在保持Android系统核心架构的同时针对RK3568芯片特性进行了深度优化和定制。整个SDK可以看作是一个经过精心调校的生态系统包含了从底层硬件抽象到上层应用框架的全套解决方案。典型的RK3568 Android11 SDK目录结构包含以下几个关键部分rk_android11_sdk/ ├── abi ├── art ├── bionic ├── bootable ├── build ├── compatibility ├── cts ├── developers ├── device/rockchip ├── external ├── frameworks ├── hardware ├── kernel ├── libcore ├── out ├── packages ├── pdk ├── prebuilts ├── rknin ├── RKDocs ├── rkst ├── RKTools ├── sdk ├── system ├── tools └── u-bootvendor与device目录的区别vendor/rockchip包含芯片厂商提供的闭源驱动、固件和硬件抽象层实现device/rockchip/rk3568包含针对RK3568开发板的设备特定配置提示瑞芯微在标准AOSP基础上添加了rknin、RKDocs等专属目录这些是理解其BSP定制的关键入口。2. 关键目录深度解析2.1 原厂定制目录揭秘瑞芯微在标准AOSP之外添加了几个重要目录这些是掌握RK3568开发的关键RKDocs目录开发指南文档PDF/CHM格式硬件设计参考原理图检查清单调试工具使用手册常见问题解决方案rknin目录瑞芯微专有的系统服务硬件加速组件电源管理增强模块显示处理优化代码RKTools目录RKTools/ ├── Linux/ │ ├── boot_merger # 启动镜像合并工具 │ ├── firmwareMerger # 固件打包工具 │ └── kerneltool # 内核镜像处理工具 ├── Windows/ │ ├── AndroidTool # 烧录工具 │ └── DriverAssitant # 驱动安装包 └── common/ ├── mkimage # 镜像生成工具 └── rkflashtool # 闪存操作工具2.2 内核与uboot的位置关系RK3568的引导流程涉及多个关键组件它们在源码树中的位置如下组件源码位置输出产物编译控制文件U-Bootu-boot/u-boot.bin, uboot.imgmake.sh, config.mkKernelkernel/boot.img, kernel.imgMakefile, KconfigAndroid整个SDK目录system.img, vendor.imgAndroid.bp三阶段启动流程BL1芯片内置ROM代码→U-Bootu-boot目录编译生成→Linux Kernelkernel目录编译生成→Android系统剩余部分编译生成3. 构建系统Android.bp与Makefile的共存之道在RK3568的Android11 BSP中构建系统呈现出典型的新旧共存特点Android.bp文件基于Soong构建系统声明式语法类似JSON主要用于Android上层组件构建示例frameworks/base/Android.bp片段cc_library_shared { name: libsurfaceflinger, srcs: [ SurfaceFlinger.cpp, Layer.cpp, ], shared_libs: [ libui, liblog, ], cflags: [ -Wall, -Werror, ], }Makefile文件传统GNU Make语法主要用于内核和uboot构建示例kernel/Makefile片段obj-y : fork.o exec_domain.o panic.o \ cpu.o exit.o softirq.o resource.o \ sysctl.o capability.o ptrace.o user.o混合构建实践通过build.sh脚本统一入口内部自动判断使用哪种构建系统产物最终在out目录统一输出注意修改Android.bp后需要重新生成ninja文件m -j而修改Makefile后通常需要完整重新编译受影响模块。4. 硬件抽象层vendor目录的奥秘vendor/rockchip目录是瑞芯微专有代码的核心存放地包含以下关键组件硬件抽象层(HAL)实现显示处理hwcomposer音频处理audio.primary传感器管理sensors相机处理camera闭源驱动GPU驱动maliVPU视频编解码驱动NPU神经网络加速驱动固件文件WiFi/BT固件bin格式DSP处理固件安全启动相关固件典型vendor目录结构vendor/rockchip/ ├── common/ │ ├── apps # 预装应用 │ ├── bin # 可执行文件 │ └── etc # 配置文件 ├── hardware/ │ ├── audio # 音频HAL │ ├── camera # 相机HAL │ └── sensors # 传感器HAL └── rk3568/ ├── blobs # 二进制blob └── proprietary # 专有库文件5. 实战定制自己的RK3568系统基于对BSP结构的理解我们可以进行有针对性的定制开发添加新硬件支持在hardware/interface中添加HIDL接口定义在vendor/rockchip/hardware中实现HAL在device/rockchip/rk3568中添加设备配置修改内核配置cd kernel make ARCHarm64 rockchip_defconfig make ARCHarm64 menuconfig cp .config arch/arm64/configs/rockchip_defconfig更新设备树修改kernel/arch/arm64/boot/dts/rockchip/rk3568-xxx.dts编译生成新的dtbmake ARCHarm64 rk3568-xxx.dtb构建与烧写流程全量编译./build.sh -UKAup增量编译m -j生成烧写镜像./mkimage.sh使用RKTools工具烧录在RK3568项目开发中最耗时的往往不是编码本身而是理清这套复杂的BSP结构。记得有一次为了调试显示异常我花了三天时间追踪从frameworks到vendor再到kernel的整个调用链最终发现是某个不起眼的dts配置错误。这种经历让我深刻认识到掌握BSP目录结构不是可有可无的理论知识而是解决实际问题的必备技能。
拆解瑞芯微RK3568 Android11 BSP:从uboot到vendor,带你逛一遍原厂SDK的“五脏六腑”
发布时间:2026/5/31 9:16:24
深入解析瑞芯微RK3568 Android11 BSP架构从源码目录到系统定制作为一名长期从事嵌入式系统开发的工程师第一次打开瑞芯微原厂提供的Android11 SDK时面对密密麻麻的目录结构和数千个文件那种既兴奋又困惑的感觉至今记忆犹新。RK3568作为瑞芯微旗下性能优异的中高端芯片其BSP(Board Support Package)的复杂程度远超普通开发板但同时也蕴含着巨大的定制潜力。1. RK3568 Android11 BSP全景概览瑞芯微的Android BSP不同于标准的AOSP它在保持Android系统核心架构的同时针对RK3568芯片特性进行了深度优化和定制。整个SDK可以看作是一个经过精心调校的生态系统包含了从底层硬件抽象到上层应用框架的全套解决方案。典型的RK3568 Android11 SDK目录结构包含以下几个关键部分rk_android11_sdk/ ├── abi ├── art ├── bionic ├── bootable ├── build ├── compatibility ├── cts ├── developers ├── device/rockchip ├── external ├── frameworks ├── hardware ├── kernel ├── libcore ├── out ├── packages ├── pdk ├── prebuilts ├── rknin ├── RKDocs ├── rkst ├── RKTools ├── sdk ├── system ├── tools └── u-bootvendor与device目录的区别vendor/rockchip包含芯片厂商提供的闭源驱动、固件和硬件抽象层实现device/rockchip/rk3568包含针对RK3568开发板的设备特定配置提示瑞芯微在标准AOSP基础上添加了rknin、RKDocs等专属目录这些是理解其BSP定制的关键入口。2. 关键目录深度解析2.1 原厂定制目录揭秘瑞芯微在标准AOSP之外添加了几个重要目录这些是掌握RK3568开发的关键RKDocs目录开发指南文档PDF/CHM格式硬件设计参考原理图检查清单调试工具使用手册常见问题解决方案rknin目录瑞芯微专有的系统服务硬件加速组件电源管理增强模块显示处理优化代码RKTools目录RKTools/ ├── Linux/ │ ├── boot_merger # 启动镜像合并工具 │ ├── firmwareMerger # 固件打包工具 │ └── kerneltool # 内核镜像处理工具 ├── Windows/ │ ├── AndroidTool # 烧录工具 │ └── DriverAssitant # 驱动安装包 └── common/ ├── mkimage # 镜像生成工具 └── rkflashtool # 闪存操作工具2.2 内核与uboot的位置关系RK3568的引导流程涉及多个关键组件它们在源码树中的位置如下组件源码位置输出产物编译控制文件U-Bootu-boot/u-boot.bin, uboot.imgmake.sh, config.mkKernelkernel/boot.img, kernel.imgMakefile, KconfigAndroid整个SDK目录system.img, vendor.imgAndroid.bp三阶段启动流程BL1芯片内置ROM代码→U-Bootu-boot目录编译生成→Linux Kernelkernel目录编译生成→Android系统剩余部分编译生成3. 构建系统Android.bp与Makefile的共存之道在RK3568的Android11 BSP中构建系统呈现出典型的新旧共存特点Android.bp文件基于Soong构建系统声明式语法类似JSON主要用于Android上层组件构建示例frameworks/base/Android.bp片段cc_library_shared { name: libsurfaceflinger, srcs: [ SurfaceFlinger.cpp, Layer.cpp, ], shared_libs: [ libui, liblog, ], cflags: [ -Wall, -Werror, ], }Makefile文件传统GNU Make语法主要用于内核和uboot构建示例kernel/Makefile片段obj-y : fork.o exec_domain.o panic.o \ cpu.o exit.o softirq.o resource.o \ sysctl.o capability.o ptrace.o user.o混合构建实践通过build.sh脚本统一入口内部自动判断使用哪种构建系统产物最终在out目录统一输出注意修改Android.bp后需要重新生成ninja文件m -j而修改Makefile后通常需要完整重新编译受影响模块。4. 硬件抽象层vendor目录的奥秘vendor/rockchip目录是瑞芯微专有代码的核心存放地包含以下关键组件硬件抽象层(HAL)实现显示处理hwcomposer音频处理audio.primary传感器管理sensors相机处理camera闭源驱动GPU驱动maliVPU视频编解码驱动NPU神经网络加速驱动固件文件WiFi/BT固件bin格式DSP处理固件安全启动相关固件典型vendor目录结构vendor/rockchip/ ├── common/ │ ├── apps # 预装应用 │ ├── bin # 可执行文件 │ └── etc # 配置文件 ├── hardware/ │ ├── audio # 音频HAL │ ├── camera # 相机HAL │ └── sensors # 传感器HAL └── rk3568/ ├── blobs # 二进制blob └── proprietary # 专有库文件5. 实战定制自己的RK3568系统基于对BSP结构的理解我们可以进行有针对性的定制开发添加新硬件支持在hardware/interface中添加HIDL接口定义在vendor/rockchip/hardware中实现HAL在device/rockchip/rk3568中添加设备配置修改内核配置cd kernel make ARCHarm64 rockchip_defconfig make ARCHarm64 menuconfig cp .config arch/arm64/configs/rockchip_defconfig更新设备树修改kernel/arch/arm64/boot/dts/rockchip/rk3568-xxx.dts编译生成新的dtbmake ARCHarm64 rk3568-xxx.dtb构建与烧写流程全量编译./build.sh -UKAup增量编译m -j生成烧写镜像./mkimage.sh使用RKTools工具烧录在RK3568项目开发中最耗时的往往不是编码本身而是理清这套复杂的BSP结构。记得有一次为了调试显示异常我花了三天时间追踪从frameworks到vendor再到kernel的整个调用链最终发现是某个不起眼的dts配置错误。这种经历让我深刻认识到掌握BSP目录结构不是可有可无的理论知识而是解决实际问题的必备技能。