简介:《Rockchip RK3229 软件开发指南 V1.03》是瑞芯微官方于2017年11月发布的技术文档,面向嵌入式软件开发工程师与技术支持人员,用于指导RK3229芯片在Linux 3.10内核搭配Android 6.0.1/7.1.2系统下的开发与调试。文档系统梳理了DDR、NAND、EMMC、WiFi/BT及多媒体编解码等硬件兼容性列表,并覆盖SDK获取编译烧写、system分区大小配置、ODEX预编译、禁用SELinux、Box产测工具、jack-server配置、USB默认开启ADB、开机视频与低内存优化、WIDEVINE level 1 DRM配置等关键环节,还附有工具版本索引与序列号/Mac烧写说明。资源包仅含1个PDF文件,大小约1.61MB,单文件结构便于随查随用。目前已有627人学习下载,适合需要快速上手RK3229平台、对照排查兼容性与系统配置问题的开发者参考。
1. 从一块 RK3229 盒子板说起:为什么 2017 年的 SDK 今天还得装
手上这块 RK3229 的盒子板,第一次上电就卡在开机 logo 不动,串口只吐了几行 DDR 初始化信息就没了。翻遍手里的资料才发现,问题不在板子,而在我拿错了 SDK 分支——RK3229 的 Linux3.10 内核配 Android6.0.1 和 Android7.1.2 是两套不同的编译配置,混用就会出现这种“能烧进去但起不来”的玄学现象。Rockchip RK3229 软件开发指南 V1.03 这份文档,本质上就是把这套环境的版本对应关系、编译参数、烧写工具链全部钉死的一份施工图。它面向的是要在这颗芯片上做 Box 产品、做定制固件的软件开发工程师和技术支持工程师,不是给只想跑个 Demo 的人看的。装这套环境最怕的不是命令多,而是版本错配——DDR 颗粒、eMMC 型号、WiFi/BT 芯片、Android 版本,任何一项对不上,后面全是血泪排查。这篇笔记按我实际搭环境的顺序走一遍:先对硬件支持列表,再装编译环境,然后编译烧写,最后落到怎么验证固件真的跑通了。
2. 装之前先对表:RK3229 的硬件支持列表怎么读
2.1 DDR、NAND、eMMC 三张表决定你能不能开机
RK3229 的 DDR 支持 DDR3、LPDDR2、LPDDR3 三类,但“支持”和“能用”是两回事。文档里明确给了符号含义:√ 表示 Fully Tested and Mass production,T/A 表示 Fully Tested and Applicable,N/A 表示 Not Applicable。我一般只选 √ 和 T/A 的颗粒,D/A 那种“Datasheet Applicable, Need Sample to Test”的,除非你手上有样品愿意自己跑一轮压力测试,否则别碰。具体颗粒清单在RKDocs\Platform support lists目录下的《RK DDR Support List Ver2.24》里,装环境前先把板子上的 DDR 丝印抄下来对一遍,这一步花五分钟,能省后面五小时。
NAND 和 eMMC 同理。NAND 看《RKNandFlashSupportList Ver2.71_20160801.pdf》,eMMC 看《RKeMMCSupportList Ver1.33_2017_02_15》。RK3229 支持 eMMC 4.51、SDIO3.0、HS200 模式,文档里还专门提了高性能 eMMC 的选取标准:顺序读速率 >200MB/s、顺序写速率 >40MB/s。这个数字不是随便写的,低内存机器上 eMMC 读写慢会直接拖垮 Android 启动速度,后面低内存优化配置那章会再碰到这个瓶颈。
| 存储类型 | 支持规格 | 对应支持列表文档 | 建议选用符号 |
|---|---|---|---|
| DDR | DDR3 / LPDDR2 / LPDDR3 | RK DDR Support List Ver2.24 | √、T/A |
| NAND | 见支持列表 | RKNandFlashSupportList Ver2.71 | √、T/A |
| eMMC | eMMC 4.51、SDIO3.0、HS200 | RKeMMCSupportList Ver1.33 | √、T/A |
2.2 WiFi/BT 和 SDK 适用硬件:选型错了驱动都编不过
WiFi/BT 这块,RK3229 内核是 Linux3.10,支持列表在《Rockchip_WiFi_Situation_20170214》里。文档说得很直白:列表外的芯片要调试,必须由芯片原厂提供 Linux3.10 版本的内核驱动。我踩过一次坑,拿了一颗只提供 Linux4.4 驱动的 WiFi 模组,编译时驱动源码里一堆内核 API 对不上,改到怀疑人生。所以选型阶段就按列表来,别给自己找活。
SDK 软件包本身是基于 Android6.0.1 及之后版本的 32bit 系统,适配 RK3229 Box EVB 开发板和 Box 样机板。内核配置参考RK3229-box.dts改动,硬件设计说明在RKDocs\Platform support lists\RK322X 硬件设计指南_V1.0_20161222。装环境前确认你手上是 EVB 还是样机板,DTS 文件别拿错。
2.3 多媒体和 Kodi 支持程度:决定你要不要换 RKMC
RK3229 的多媒体规格是 4K VP9、4K 10bit H265/H264 解码到 60fps,1080P 多格式解码(VC-1、MPEG-1/2/4、VP8),1080P H.264 编码,JPEG 编解码都支持。具体编解码列表看《RK3229Multimedia Codec Benchmark v1.0》。
Kodi 这块有个取舍点:官方原生 Kodi 16.1 Jarvis 和 17.0 Krypton 在 RK3229 的 OMX 框架上能跑,最高 4K 10bit 60fps 播放,17.0 还支持 AudioTrack 音频透传。但文档推荐用 RKMC——基于 Kodi 16.1 深度优化的版本,默认集成进 SDK,支持 H265/H264/VP9 10bit@60fps 硬解、ISO/MKV Framepacking MVC3D、AC3/EAC3/TrueHD/DTS/DTSHD 到 7.1 声道透传、硬件去噪和去交错。如果你做的是播放器类产品,直接用 SDK 里的 RKMC,省得自己调 OMX。支持程度细节在《Rockchip Kodi支持程度列表_V1.0_20170217》。
3. 搭编译环境:SDK 获取、编译参数和 jack-server 配置
3.1 SDK 获取与目录结构确认
SDK 拿到手后先别急着敲编译命令,把目录结构过一遍。文档索引里写得很清楚,RKDocs下分三块:Develop reference documents(开发指导文档)、Platform support lists(支持列表)、RKTools manuals(工具使用文档)。编译前确认这几个目录都在,尤其是Platform support lists,后面对 DDR、eMMC、WiFi 型号全靠它。
SDK 编译的入口在文档第 3.2 节,但文档没展开写具体命令,因为不同发布包的编译脚本名会有差异。常见做法是先看根目录下的build.sh或mkimage.sh,确认 Android 版本对应的 lunch 目标。Android6.0.1 和 Android7.1.2 的编译配置不一样,7.1 版本在 V1.02 修订时才加进来,如果你用的是 7.1 分支,注意 V1.03 新增的低内存优化和 DRM Widevine Level 1 配置都只对 7.1 生效。
3.2 编译配置里的三个关键开关
文档 3.2.6 节集中讲了几个容易漏的配置:system 分区大小配置、odex 预编译配置、禁用 selinux 方法。这三个直接影响固件能不能正常起来。
system 分区大小在 parameter 文件里改,分区表不对会导致 system.img 烧写失败或者起来后空间不足。odex 预编译配置决定 APK 是预编译成 odex 还是运行时 dex2oat,量产固件一般开预编译,减少首次开机时间。禁用 selinux 在调试阶段很常用,但量产前记得改回来,不然过不了某些认证。
# 查看当前 parameter 文件里的分区定义(文件名以实际 SDK 为准) cat parameter.txt | grep -E "system|userdata|misc" # 典型的分区行格式,0x 后是起始扇区,最后是分区名 # 0x00040000@0x0000C000(system), 大小和起始位置按实际项目改上面这段只是让你先看清分区布局,改之前一定备份原文件。system 分区大小要按你预置 APK 和 odex 的体积算,留 10% 余量比较稳。我见过改小了 20MB 导致 OTA 包写不进去的情况,排查半天才发现是分区边界问题。
3.3 jack-server 配置:Android7.1 编译绕不过去的一关
V1.02 修订记录里专门加了 jack-server 配置说明(3.2.7 节),因为 Android7.1 用 jack 编译链,默认配置在多核机器上容易出问题。常见现象是编译到一半报 jack server 连接失败或者内存溢出。
# 查看 jack 配置,通常在 ~/.jack 或 ~/.jack-settings cat ~/.jack-settings # 关键参数:SERVER_PORT_SERVICE 和 SERVER_PORT_ADMIN 不能和已占用端口冲突 # JACK_SERVER_VM_ARGUMENTS 里加堆内存,机器内存 16G 以上可以给 4G JACK_SERVER_VM_ARGUMENTS="-Dfile.encoding=UTF-8 -XX:+TieredCompilation -Xmx4g"改完配置后先jack-admin kill-server再重新编译,让新参数生效。机器核数多的话,SERVER_NB_COMPILE可以适当调大,但别超过物理核数,否则上下文切换反而拖慢编译。这一步的取舍是:内存给足比核数给足更重要,jack 编译吃内存是出了名的。
3.4 固件烧写与量产烧写工具准备
编译产出后进烧写环节。文档 3.3 节讲固件烧写,3.4 节讲量产烧写,工具在RKTools目录下。开发阶段用 Android 开发工具烧写单个分区或整包,量产阶段用量产工具。烧写前确认板子进的是 loader 模式还是 maskrom 模式,模式不对工具识别不到设备。V1.03 更新了工具版本列表(2.2 节),装工具时按文档里的版本号来,别用网上随便下的旧版,驱动不匹配会认不到板子。
4. U-Boot 与内核配置:DTS、GPIO 和频率修改的实操
4.1 U-Boot 编译与 Logo 配置的限制
U-Boot 部分文档第 4 章讲得比较克制:简介、平台配置、固件生成、编译、Logo 配置。编译流程按 SDK 里的脚本走,重点是 Logo 配置。V1.03 修订记录里加了“开机 logo 限制描述”(4.5.2 节),这个限制通常指 logo 图片的分辨率、格式和存放位置有约束,超出范围会显示异常或者干脆不显示。我一般先把 logo 换成纯色测试图验证通路,确认能显示后再换正式图,避免把显示问题和图片格式问题混在一起排查。
4.2 DTS 配置:WiFi/BT、GPIO 对应关系和频率修改
内核开发常见配置在第 5 章,DTS 介绍、WiFi&BT 配置、GPIO 对应关系、ARM/GPU 频率修改、温控配置、PWM IR 配置、USB 默认打开 adb 调试,全在这一章。
DTS 是设备树,RK3229 的内核配置参考RK3229-box.dts。WiFi/BT 配置要在 DTS 里使能对应的节点,GPIO 对应关系这块文档特意标了“注意”,因为 RK3229 的 GPIO 编号和原理图上的标号不一定一一对应,配错引脚会导致 WiFi 使能信号拉不起来。我的习惯是对着原理图把每个用到的 GPIO 在 DTS 里注释清楚用途,后面换板子改起来不容易错。
ARM、GPU 频率修改和温控配置是关联的。频率调高了性能好但发热大,温控阈值设低了会频繁降频。文档 5.5 节讲温控配置,实际调的时候先跑 StressTest(8.1 节)看满载温度,再定频率和阈值。PWM IR 配置是红外遥控相关,做 Box 产品基本都要配。
USB 默认打开 adb 调试(5.7 节)是 V1.02 加的,调试阶段很有用,改 DTS 或配置文件让 USB 口默认进 adb 模式,省得每次手动切。
# 编译内核前确认 DTS 文件路径,通常在 kernel/arch/arm/boot/dts/ ls kernel/arch/arm/boot/dts/ | grep rk3229 # 单独编译 dtb 验证 DTS 语法 make ARCH=arm rk3229-box.dtbDTS 改完先单独编 dtb,语法错误在这一步就能暴露,不用等整个内核编完。这一步的取舍是:DTS 改动频繁的阶段,单独编 dtb 比全量编译快得多,能省不少等待时间。
4.3 内核配置的验证顺序
内核配置改完不要直接烧整包,按“dtb → boot.img → 整包”的顺序验证。先确认 dtb 能编过,再确认 boot.img 能起来到内核日志输出,最后才烧整包。这样出问题时能快速定位是 DTS 问题、内核配置问题还是 Android 层问题。串口日志是这套环境里最重要的黑匣子,从 DDR 初始化到内核启动到 Android 起来,每一段都有输出,养成看串口的习惯比什么都强。
5. Android 层配置与系统调试:预置 APK、OTA 和常用工具
5.1 Android 编译配置与常用配置说明
Android 开发常见配置在第 6 章,从编译配置到常用配置说明(表 6-1),再到预置 APK、开关机动画及铃声、Parameter 说明、新增分区配置、OTA 升级、预制 Demo、系统灾难恢复。这一章是定制固件的主战场。
预置 APK 的做法是把 APK 放到 SDK 指定的预置目录,然后在编译配置里加对应条目。注意 odex 预编译配置和预置 APK 是联动的,开了预编译的 APK 在首次开机时不需要再 dex2oat,启动更快。开关机动画和铃声按文档给的目录和格式替换,格式不对会黑屏或者静音。
Parameter 说明和新增分区配置要一起看。parameter 文件定义分区表,新增分区要同时改 parameter 和 fstab,两边不一致会导致分区挂载失败。OTA 升级配置涉及升级包制作和签名,V1.03 更新了固件签名工具(8.6 节),签名不对 OTA 包会被拒绝。
5.2 系统灾难恢复与禁用 selinux
系统灾难恢复(6.9 节)是这套环境里的后悔药。固件刷坏进不去系统时,靠 recovery 或者 maskrom 模式救回来。我一般在新板子第一次烧写前先确认 maskrom 模式能进,这是最后的保底手段。
禁用 selinux(6.10 节)在调试阶段常用,改内核命令行或者配置文件都行。但要注意,禁用 selinux 后某些系统服务的行为会变,调试完记得恢复,不然量产固件过不了安全相关检查。
5.3 Android7.1 专属配置:开机视频、低内存优化和 DRM
V1.03 新增的三块 7.1 专属配置值得单独说。开机视频(6.11 节)是 7.1 才有的功能,配置涉及视频文件格式和播放时机。低内存优化配置(6.12 节)针对内存小的机器,配合前面说的 eMMC 性能选取一起用,效果更明显。DRM Widevine Level 1 配置(6.13 节)是做流媒体内容保护必须的,Level 1 要求比 Level 3 高,配置不对会导致高清内容播不了。
这三块都只对 Android7.1.2 生效,如果你用的是 6.0.1 分支,这几节可以直接跳过。版本差异在这里体现得很明显,装环境时先确认自己走的是哪条分支,别把 7.1 的配置往 6.0.1 上套。
5.4 系统调试工具:ADB、Logcat、Procrank、Dumpsys
第 7 章的系统调试工具是日常用得最多的。ADB 工具(7.1 节)配合 USB 默认 adb 调试配置,连上就能用。Logcat(7.2 节)看应用和系统日志,Procrank(7.3 节)看进程内存状态,文档里还有跟踪进程内存状态的示意图。Dumpsys(7.4 节)查系统服务状态。音视频问题调试工具和文档在 7.5 节。
# 确认设备连接 adb devices # 抓完整 logcat 到文件,排查偶现问题用 adb logcat -v time > logcat_full.txt # 看进程内存排名,定位内存大户 adb shell procrank | head -20 # 查某个系统服务状态,比如 media adb shell dumpsys media.player这几个命令是排查问题的起手式。logcat 抓全量再过滤,比一开始就加过滤条件靠谱,偶现问题往往藏在被过滤掉的日志里。procrank 看内存排名能快速定位是不是某个进程吃爆了内存,配合低内存优化配置一起调。
6. 装完怎么验证:从串口日志到整机跑通的检查清单
环境装完、固件烧完,怎么确认这套东西真的跑通了?我的验证顺序是从底层往上,每一层都有明确的通过标准,任何一层不过就停在那里排查,不往下走。
第一层看串口 DDR 初始化日志。上电后串口应该输出 DDR 容量和频率信息,如果卡在这里,回去对 DDR 支持列表,确认颗粒型号在 √ 或 T/A 范围内。第二层看 U-Boot 日志,应该能看到存储设备识别、logo 显示、内核加载。logo 不显示就查 4.5.2 节的 logo 限制。第三层看内核启动日志,重点看 eMMC 识别、WiFi/BT 驱动加载、GPIO 初始化有没有报错。第四层看 Android 起来后的 logcat,确认没有反复重启的服务、没有 selinux 拒绝(如果没禁用的话)。
| 验证层级 | 观察点 | 通过标准 | 不过时先查 |
|---|---|---|---|
| DDR | 串口初始化日志 | 容量频率正确输出 | DDR 支持列表型号 |
| U-Boot | 存储识别、logo、内核加载 | 无报错,logo 正常 | logo 限制、存储支持列表 |
| 内核 | eMMC、WiFi/BT、GPIO | 驱动加载无报错 | DTS 配置、GPIO 对应关系 |
| Android | logcat、服务状态 | 无反复重启、无异常拒绝 | selinux、分区配置、预置 APK |
整机跑通后还有一轮功能验证:用 StressTest 跑一轮压力测试看温控和降频行为,用 PCBA 测试工具和 Box 厂测工具过一遍产测项,序列号/Mac 烧写用 WNpctool(8.7 节,V1.03 更新了使用说明)确认写入正确。update.img 打包和固件签名(8.5、8.6 节)在出量产包前走一遍,签名工具版本按 2.2 节工具列表来。
有个细节容易被忽略:V1.03 更新了序列号/Mac 烧写工具的使用方式,如果你照着旧版文档操作,可能会发现工具界面和步骤对不上。装工具时以 V1.03 文档为准,旧版截图只能参考。
从那以后我每次搭 RK3229 环境,都强制先走一遍“对支持列表 → 编 dtb → 烧整包 → 看串口”这条链路,任何一步跳过,后面大概率要返工。这套 2017 年的 SDK 放到今天装,坑不在命令本身,而在版本对应关系和硬件选型,把这两件事钉死,剩下的就是按部就班。希望帮到你。
本文还有配套的精品资源,点击获取