RK3568 Android 13 驱动适配实战:从零开始让SDK在自己的板子上跑起来
2026/8/19 23:57:52 网站建设 项目流程

拿到芯片厂商的BSP包只是第一步,如何让它在你自己的硬件上“活”起来,才是真正考验功底的时候。本文将从零开始,手把手带你完成RK3568 Android 13 SDK的板级移植,避开那些官方文档里不会写的“坑”。


目录

前言

一、RK3568 启动流程概览

二、SDK 编译前的关键修改

1. 内存初始化固件 ddr.bin 的修改

1.1 找到 ddr.bin 的位置

1.2 如何修改(重点)

2. U-Boot 层的适配

2.1 编译配置文件

2.2 个性化修改

2.3 修改调试串口波特率

3. Kernel 层的适配

3.1 选择合适的设备树文件

3.2 编译配置文件

3.3 Kernel阶段串口波特率

3.4 编译SDK(一键或分部)

三、让SDK在你的板子上跑起来

1. IO 电压域(Voltage Domain)的核对

2. 烧录与运行测试

总结


前言

当我们拿到Rockchip(瑞芯微)提供的Linux或Android SDK时,第一项任务永远是“本地化”——即让这套通用的软件系统适配到公司自研的硬件底板上。这不仅是后续驱动开发(如LCD、TP、Camera、Wi-Fi等)的基石,更是整个项目软硬件联调的“破冰”之旅。

然而,官方SDK默认是针对其参考设计板(EVB)的,直接烧录到你的板子上大概率是无法正常启动的。不同厂商的DDR型号、PMIC(电源管理芯片)、IO电压、调试串口波特率等都存在差异。

本文基于RK3568平台和Android 13SDK,详细记录了我将官方SDK移植到定制板上的全流程、修改细节以及踩坑记录。如果你是嵌入式驱动开发的初学者,这篇文章将为你节省数周的摸索时间。


一、RK3568 启动流程概览

在进行任何移植工作前,理解芯片的启动流程至关重要。RK3568基于ARMv8架构,其启动流程与标准ARM启动略有不同,因为它集成了Rockchip自研的Miniloader阶段。具体的启动流程介绍可参考以下链接中的官方文档:

https://opensource.rock-chips.com/wiki_Boot_option

简化启动链路如下:

  1. BootROM(固化在芯片内):芯片上电后首先执行,初始化基本时钟,从eMMC/SD卡/NAND等存储介质加载idbloader.img(由ddr.binusbplug.bin组成)。

  2. Miniloader(ddr.bin):此阶段负责初始化DDR内存,这是后续所有代码运行的基础。这也是我们第一个需要修改的地方

  3. U-Boot:加载并运行U-Boot,进行更复杂的硬件初始化(如时钟、串口、存储),并加载内核。

  4. Kernel(内核):Linux内核启动,加载驱动,挂载根文件系统。

  5. Android/System:启动Android系统服务,进入桌面。

💡核心思想:移植的本质,就是让上述每一个阶段的硬件配置参数,都与你的实际原理图严格对应。

二、SDK 编译前的关键修改

官方SDK的编译通常很简单,但直接编译出来的镜像无法在你的板子上运行。我们需要按顺序修改三个关键部分。

1. 内存初始化固件ddr.bin的修改

这个文件负责在启动的最早期初始化DDR,如果参数不对,你的板子会直接“变砖”(无任何串口输出)。

1.1 找到ddr.bin的位置

配置文件路径:rkbin/RKBOOT/RK3568MINIALL.ini,从下图文件截图中可以找到实际使用的DDR固件路径,为rkbin/bin/rk35/rk3568_ddr_1560MHz_v1.18.bin 。

1.2 如何修改(重点)

Rockchip官方提供了一个隐藏工具——ddrbin_tool,它可以将二进制文件导出为文本配置,修改后再重新打包。

操作步骤:

Step 1:导出配置参数

# 进入工具目录 cd rkbin/tools # 导出参数到 gen_param.txt 文件 ./ddrbin_tool rk3568 -g gen_param.txt ../bin/rk35/rk3568_ddr_1560MHz_v1.18.bin

Step 2:修改关键参数
打开生成的gen_param.txt,你不需要修改大部分参数,但以下两项必须确认:

参数名说明常见修改值
uart baudrate调试串口波特率很多定制板为了兼容老式工具,需要从默认的1500000改为115200
first_init_dram_typeDDR内存类型务必与硬件匹配!例如,你板子上是LPDDR4X,则设为8。官方EVB多用DDR4。

Step 3:重新生成ddr.bin

./ddrbin_tool rk3568 gen_param.txt ../bin/rk35/rk3568_ddr_1560MHz_v1.18.bin

2. U-Boot 层的适配

U-Boot是承上启下的关键环节,需要修改串口波特率、启动延时和设备树。

2.1 编译配置文件

U-Boot的配置头文件位于:u-boot/configs/rk3568_defconfig
常用修改项:

  • CONFIG_BOOTDELAY=3:将自动启动等待时间改为3秒,便于开发时按Ctrl+C中断进入命令行。

2.2 个性化修改

你还可以修改U-Boot启动时串口打印的Model名称,方便区分固件。

设备树路径:u-boot/arch/arm/dts/rk3568-evb.dtsi(或你的板级dts)

model = "MyCompany-RK3568 Custom Board"; // 改这里 compatible = "rockchip,rk3568-evb", "rockchip,rk3568";

2.3 修改调试串口波特率

修改uboot阶段的串口打印波特率(默认1500000),需要在make menuconfig中修改,如以下界面,注意需要用CTRL+BACK键组合使用才能删除原来的1500000,然后输入新的,保存退出。

更新配置的小技巧
在U-Boot目录下,如果你修改了Kconfig,推荐使用以下标准流程来更新defconfig

1. make rk3568_defconfig //加载基础配置 2. make menuconfig //图形化修改 3. make savedefconfig //生成精简配置 4. cp defconfig configs/rk3568_defconfig //更新配置文件

3. Kernel 层的适配

Kernel层是我们最常打交道的部分,设备树(DTS)的选型和串口配置是这里的重点。

3.1 选择合适的设备树文件

默认的配置指向DDR4的板型即rk3568-evb1-ddr4-v10.dts,我这里板子用的是LPDDR4X,必须切换设备树文件。

修改路径device/rockchip/rk356x/rk3568_t/BoardConfig.mk

# 将默认的 ddr4 设备树改为 lp4x 的 PRODUCT_KERNEL_DTS := rk3568-evb2-lp4x-v10 # 注意:此处不需要加 .dts 后缀

修改后的设备树文件路径如下:

kernel-5.10/arch/arm64/boot/dts/rockchip/rk3568-evb2-lp4x-v10.dts

设备树文件也可以用include包含,常用的设备树文件如下,我们最常修改的是评估板和底板的设备树文件。

rk3568.dtsi //芯片级设备树文件 rk3568-evb.dtsi //官方评估板参考设计 rk3568-pinctrl.dtsi //描述各个外设的引脚配置 rk3568-evb2-lp4x-v10.dtsi //底板级设备树文件

3.2 编译配置文件

kernel的配置头文件路径如下:

kernel-5.10/arch/arm64/configs/rockchip_defconfig kernel-5.10/kernel/configs/android-13.config

3.3 Kernel阶段串口波特率

Kernel会继承U-Boot的波特率,但显式修改kernel-5.10/arch/arm64/boot/dts/rockchip/rk3568-android.dtsi是更规范的做法。

kernel-5.10/arch/arm64/boot/dts/rockchip/rk3568-android.dtsi fiq-debugger { compatible = "rockchip,fiq-debugger"; rockchip,serial-id = <2>; //对应UART2 rockchip,wake-irq = <0>; /* If enable uart uses irq instead of fiq */ rockchip,irq-mode-enable = <1>; rockchip,baudrate = <115200>; /* Only 115200 and 1500000 */ 此处修改调试串口波特率 interrupts = <GIC_SPI 252 IRQ_TYPE_LEVEL_LOW>; pinctrl-names = "default"; pinctrl-0 = <&uart2m0_xfer>; status = "okay"; };

3.4 编译SDK(一键或分部)

SDK编译的文件路径如下,

device/rockchip/rk356x/rk3568_t/ rk3568_t.mk

一键全编译

瑞芯微官方已经在SDK的根目录下编写好了编译脚本,build.sh文件,全部打包命令如下:

source build/envsetup.sh //加载编译环境 lunch //选择目标系列芯片 ./build.sh -UCKApu //完整编译u-boot、kernel、Android最后打包成update.img一个完整的镜像包

这里运行lunch有很多选项,我们一般选编译rk3568_t-userdebug这个版本,

android-builder@436b1153169c:~/sdk/rk3568-sdk$ lunch You're building on Linux Lunch menu .. Here are the common combinations: 1. PX30_t-user 2. PX30_t-userdebug 3. aosp_arm-eng 4. aosp_arm64-eng 5. aosp_bluejay_car-userdebug 6. aosp_bramble_car-userdebug 7. aosp_cf_arm64_auto-userdebug 8. aosp_cf_arm64_phone-userdebug 9. aosp_cf_x86_64_foldable-userdebug 10. aosp_cf_x86_64_only_phone_hsum-userdebug 11. aosp_cf_x86_64_pc-userdebug 12. aosp_cf_x86_64_phone-userdebug 13. aosp_cf_x86_64_tv-userdebug 14. aosp_cf_x86_auto-userdebug 15. aosp_cf_x86_phone-userdebug 16. aosp_cf_x86_tv-userdebug 17. aosp_coral_car-userdebug 18. aosp_flame_car-userdebug 19. aosp_oriole-userdebug 20. aosp_oriole_car-userdebug 21. aosp_raven-userdebug 22. aosp_raven_car-userdebug 23. aosp_redfin_car-userdebug 24. aosp_slider-userdebug 25. aosp_sunfish_car-userdebug 26. aosp_whitefin-userdebug 27. aosp_x86-eng 28. aosp_x86_64-eng 29. arm_krait-eng 30. arm_v7_v8-eng 31. armv8-eng 32. armv8_cortex_a55-eng 33. armv8_kryo385-eng 34. beagle_x15-userdebug 35. beagle_x15_auto-userdebug 36. hikey-userdebug 37. hikey64_only-userdebug 38. hikey960-userdebug 39. hikey960_tv-userdebug 40. hikey_tv-userdebug 41. qemu_trusty_arm64-userdebug 42. rk3326_t-user 43. rk3326_t-userdebug 44. rk3326_tgo-user 45. rk3326_tgo-userdebug 46. rk3399_t-user 47. rk3399_t-userdebug 48. rk3528_box-user 49. rk3528_box-userdebug 50. rk3562_32bit-user 51. rk3562_32bit-userdebug 52. rk3562_t-user 53. rk3562_t-userdebug 54. rk3562_tgo-user 55. rk3562_tgo-userdebug 56. rk3566_t-user 57. rk3566_t-userdebug 58. rk3566_tgo-user 59. rk3566_tgo-userdebug 60. rk3568_t-user 61. rk3568_t-userdebug 62. rk3588_box-user 63. rk3588_box-userdebug 64. rk3588_s-user 65. rk3588_s-userdebug 66. rk3588_t-user 67. rk3588_t-userdebug 68. rk3588_xr-user 69. rk3588_xr-userdebug 70. rk3588m_car-user 71. rk3588m_car-userdebug 72. rk3588m_s-user 73. rk3588m_s-userdebug 74. rk3588s_s-user 75. rk3588s_s-userdebug 76. rk3588s_t-user 77. rk3588s_t-userdebug 78. sdk_car_arm-userdebug 79. sdk_car_arm64-userdebug 80. sdk_car_portrait_x86_64-userdebug 81. sdk_car_x86-userdebug 82. sdk_car_x86_64-userdebug 83. sdk_pc_x86_64-userdebug 84. silvermont-eng 85. uml-userdebug 86. yukawa-userdebug 87. yukawa_sei510-userdebug Which would you like? [aosp_arm-eng] Pick from common choices above (e.g. 13) or specify your own (e.g. aosp_barbet-eng): 61

编译之后的镜像文件在以下路径,

rockdev/Image-rk3568_t/update.img

分步编译(开发调试更高效)

在根路径下执行./build.sh -h能看到帮助命令,

android-builder@9268c6032251:~/sdk/rk3568-sdk$ ./build.sh -h ./build.sh: illegal option -- h USAGE: [-U] [-CK] [-A] [-p] [-o] [-u] [-v VERSION_NAME] No ARGS means use default build option WHERE: -U = build uboot -C = build kernel with Clang -K = build kernel -A = build android -p = will build packaging in IMAGE -o = build OTA package -u = build update.img -v = build android with 'user' or 'userdebug' -d = huild kernel dts name -V = build version -J = build jobs

1.如果想仅编译uboot,在根目录下执行./build.sh -U,或去uboot目录下执行./make.sh rk3568

2.如果想近编译kernel,需要将kernel打包到boot.img镜像里,可以去kernel路径下编写make.sh脚本,我这里如下,注意需要结合自己的实际情况改写。

export PATH=../prebuilts/clang/host/linux-x86/clang-r450784d/bin:$PATH make CROSS_COMPILE=aarch64-linux-gnu- LLVM=1 LLVM_IAS=1 ARCH=arm64 rockchip_defconfig android-13.config pcie_wifi.config && \ make CROSS_COMPILE=aarch64-linux-gnu- LLVM=1 LLVM_IAS=1 ARCH=arm64 BOOT_IMG=../rockdev/Image-rk3568_t/boot.img rk3568-evb2-lp4x-v10.img ~

三、让SDK在你的板子上跑起来

1. IO 电压域(Voltage Domain)的核对

这是新手最容易忽略,但一旦出错就会导致外设(如SD卡、以太网、HDMI)无法工作甚至烧毁IO口的地方。

核心原则:软件配置的IO电压必须与硬件原理图上的实际供电电压完全一致。

设备树中的配置示例

找到评估参考板设备树文件,结合原理图修改pmu_io_domains节点如下,注意VCCIO2由硬件处理,不需要软件配置。

kernel-5.10/arch/arm64/boot/dts/rockchip/rk3568-evb.dtsi &pmu_io_domains { status = "okay"; pmuio2-supply = <&vcc3v3_pmu>; // 硬件上PMUIO2接的是3.3V vccio1-supply = <&vcc3v3_sys>; // VCCIO1接3.3V vccio3-supply = <&vcc1v8_sys>; // VCCIO3接1.8V vccio4-supply = <&vcc1v8_sys>; // VCCIO4接1.8V vccio5-supply = <&vcc3v3_sys>; // VCCIO5接3.3V vccio6-supply = <&vcc1v8_sys>; // VCCIO6接1.8V vccio7-supply = <&vcc3v3_sys>; // VCCIO7接3.3V };

⚠️警告:如果这里配置为1.8V,而硬件实际给的是3.3V,轻则导致该组IO引脚通信失败(电平不匹配),重则因电流倒灌烧毁芯片!

2. 烧录与运行测试

完成上述所有修改并编译成功后,你会得到rockdev/Image-rk3568_t/update.img这个完整的固件包。借助瑞芯微的下载工具将完整镜像包下载进板子里,

接上打印串口,重新上电可以看到打印日志,静待时刻,就会进入安卓系统。这时已完成一个新的SDK在自己板子上的移植,后续可以进行各板载外设的适配了。


总结

至此,已成功在RK3568平台上完成了Android 13 SDK的板级移植。这不仅仅是一次编译,更是对芯片启动流程、硬件原理图匹配和嵌入式系统底层交互的一次深刻理解。

这份工作为后续的LCD屏调试、TP触摸校准、Camera摄像头点亮、Wi-Fi/BT蓝牙无线适配等打下了坚实的基础。

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询