
泰山派RK3566开发板Android 11系统SDK全编译与镜像生成实战指南最近有不少朋友拿到了立创的泰山派TSPiRK3566开发板想自己定制Android系统但面对庞大的SDK和复杂的编译流程感觉无从下手。别担心今天我就以一位过来人的身份手把手带你走一遍从环境搭建到最终生成可烧录镜像的全过程。这个过程我走过几遍也踩过一些坑会把关键点和注意事项都告诉你让你能顺利编译出自己的第一个Android系统镜像。1. 准备工作你的电脑够“硬”吗编译Android系统是个“体力活”对电脑硬件要求非常高尤其是内存。内存小了编译过程直接就会报错退出。CPU性能主要影响编译速度但内存是决定能否编译成功的硬指标。下面是我自己成功编译的电脑配置你可以参考一下操作系统Ubuntu 18.04.6 LTS (Bionic Beaver)内存32GB这是关键16GB可能会非常吃力甚至失败CPU8核16线程硬盘空间至少需要预留250GB以上的可用空间。因为整个SDK解压后加上编译过程中的中间文件和最终输出会占用大约160GB的空间。注意如果你的CPU核心数比我少请务必保证内存比我大。编译线程数后面会提到的-j参数可以根据你的CPU核心数调整但内存是底线。2. 获取与解压SDK源码2.1 下载SDK泰山派的Android SDK资料是通过网盘提供的。你需要前往立创开发板的官方下载中心。找到“百度网盘”链接。进入第05章.【立创·泰山派】系统SDK目录。下载名为tspi_android_sdk_xxxxxxxx.tar.gz的压缩包xxxxxxxx是日期如20230909。提示SDK会不定期更新记得下载最新的版本。Android系统非常庞大官方提供的SDK也可能存在已知或未知的BUG如果编译或使用中发现问题可以及时反馈给官方。2.2 解压SDK将下载好的压缩包上传到你的Ubuntu虚拟机或物理机中。存放的目录路径不能包含中文并且确保该分区有足够的空间250GB。在压缩包所在的目录执行解压命令tar -zxvf tspi_android_sdk_20230909.tar.gztar归档管理命令。-z使用gzip算法解压。-x解压文件。-v显示解压过程的详细信息。-f指定要操作的文件。解压完成后你会得到一个名为tspi_android_sdk_20230909的目录这就是我们的SDK根目录。2.3 认识SDK目录结构进入SDK根目录用ls命令可以看到非常多的文件夹。对于初学者我们先了解几个最核心、以后最常修改的目录目录名主要作用u-bootU-Boot引导加载程序的源码。相当于电脑的BIOS负责最基础的硬件初始化和加载系统。kernelLinux内核源码。系统的核心管理硬件、内存、进程等。device/设备树和硬件相关的配置文件。定义了这块板子有什么硬件、怎么用。vendor/厂商定制代码。包含瑞芯微Rockchip和泰山派的一些私有驱动、库。frameworks/Android系统框架层代码。比如Activity、Service这些系统服务的实现。packages/系统预装的应用如设置、桌面、浏览器等。system/Android系统的一些核心服务和工具。rockdev/重要编译完成后生成的所有可烧录镜像文件都会放在这个目录下。其他目录在初次全编译时一般不需要改动先有个印象即可。3. 配置编译环境编译Android需要安装一大堆依赖库和工具。在Ubuntu终端中执行下面这条长长的命令这是一条命令如果复制到终端显示换行请确保它们连接在一起sudo apt-get update sudo apt-get install -y git python make openjdk-8-jdk git-core gnupg flex bison gperf build-essential zip curl zlib1g-dev libgl1-mesa-dev gcc-multilib g-multilib libc6-dev-i386 lib32ncurses5-dev x11proto-core-dev libx11-dev lib32z1-dev libxml2-utils xsltproc unzip python bc imagemagick ccache schedtool libssl-dev libncursesw5-dbg libncursesw5-dev libncurses5 libncursesw5 libncursesada5-dev libncurses5-dbg libncurses5-dev libncursesada-doc libncursesada5 libncurses-dev libncurses-gst libncurses5-dev clang这条命令主要做了两件事apt-get update更新软件源列表。apt-get install -y ...安装编译所需的全部工具链和库包括Java 8 JDK、Git、Python、Make、交叉编译工具、各种开发库等。这个过程会下载几百兆的软件包请耐心等待。如果网络不好导致某个包下载失败可以多试几次或者分段安装。注意这里必须使用OpenJDK 8。更高版本的Java可能会导致编译错误。4. 开始全编译一条命令搞定环境准备好后最激动人心的时刻来了——开始编译。泰山派的SDK提供了一条整合命令可以一次性完成U-Boot、Kernel和Android的编译。进入SDK根目录执行以下命令cd u-boot ./make.sh rk3566 cd ../kernel make clean make distclean make ARCHarm64 tspi_defconfig rk356x_evb.config android-11.config make ARCHarm64 tspi-rk3566-user-v10.img -j16 cd .. source build/envsetup.sh lunch rk3566_tspi-userdebug make installclean -j16 make -j16 ./mkimage.sh这条命令看起来很长我们来拆解一下它到底干了啥编译U-Bootcd u-boot ./make.sh rk3566进入u-boot目录执行编译脚本指定平台为rk3566。编译Linux内核cd ../kernel进入kernel目录。make clean make distclean清理之前编译的中间文件确保编译环境干净。make ARCHarm64 tspi_defconfig rk356x_evb.config android-11.config加载内核配置。这里依次加载了泰山派基础配置、RK3566评估板配置和Android 11专用配置。make ARCHarm64 tspi-rk3566-user-v10.img -j16开始编译内核并指定输出镜像名称。-j16表示用16个线程并行编译这个数字可以根据你CPU的核心数调整通常设为核心数的1-2倍。编译Android系统cd ..回到SDK根目录。source build/envsetup.sh设置Android编译环境变量。lunch rk3566_tspi-userdebug选择编译目标。userdebug版本带有root调试权限适合开发。make installclean -j16清理旧的Android编译输出。make -j16开始全量编译Android系统。这是最耗时的一步。打包镜像./mkimage.sh将所有编译好的部件U-Boot、Kernel、Android系统打包成可供烧录工具识别的分散镜像文件。第一次编译非常耗时在我的电脑上8核16线程32GB内存用了将近4个多小时。编译过程中如果看到内存不足的报错可以尝试减少-j后面的线程数比如改成-j8。编译成功后最终的输出信息会显示生成镜像的路径。5. 认识生成的镜像文件编译成功后所有的镜像文件都生成在rockdev/Image-rk3566_tspi/目录下。我们进去看看都有什么cd rockdev/Image-rk3566_tspi ls你会看到一堆.img文件和一个MiniLoaderAll.bin。这些都是烧录到开发板不同分区的“零件”。镜像文件作用简述烧录分区MiniLoaderAll.bin最底层的加载程序初始化DDR内存用于引导U-Boot。Loaderuboot.img引导加载程序包含U-Boot和安全固件。ubootboot.img核心包含内核(Image)、设备树(dtb)、内核模块和一个小型根文件系统(ramdisk)。系统启动时加载。bootdtbo.img设备树叠加层用于动态修改设备树实现硬件兼容性。dtborecovery.img恢复模式镜像用于系统升级、恢复出厂设置等。recoverysuper.img超级分区包含了system、vendor、product等所有Android系统分区。这是Android 11的动态分区特性。supervbmeta.imgAndroid验证启动(AVB)的元数据用于系统完整性校验。vbmetamisc.img包含启动控制块(BCB)信息用于在正常系统和恢复模式间通信。miscbaseparameter.imgRockchip平台特有的显示参数配置。baseparameterparameter.txt分区表文件定义了上面所有分区在存储设备eMMC上的位置和大小。烧录工具根据它来布局。(不烧录仅参考)6. 如何烧录镜像到开发板生成了镜像下一步就是把它“刷”进板子里。6.1 使用分散镜像文件烧录推荐调试用我们刚才执行的./mkimage.sh命令生成的就是分散镜像。你需要使用瑞芯微官方提供的“RKDevTool”工具进行烧录。下载配置文件从官方下载中心的第06章.【立创·泰山派】系统镜像/【镜像】Android/目录下下载Android_All_Config.cfg文件。导入配置打开RKDevTool右键空白处选择“导入配置”选中刚才下载的.cfg文件。修改镜像路径导入后工具界面会列出所有需要烧录的镜像但路径是我电脑上的。你需要逐一点击每个镜像项右边的路径框将其指向你本地SDK中rockdev/Image-rk3566_tspi/目录下对应的.img文件。连接开发板用USB-TypeC线连接泰山派的“OTG”口到电脑。按住泰山派上的“升级键”通常标有REC或UPDATE不放。然后按一下“复位键”RST。等待1-2秒后松开“升级键”。此时RKDevTool的左下角会显示“发现一个LOADER设备”。执行烧录点击RKDevTool上的“执行”按钮工具就会开始擦除、下载、校验所有镜像。等待进度条走完提示“下载完成”即可。提示如果你只修改了内核可以只勾选Boot一项进行烧录这样速度极快适合快速调试。6.2 生成并烧录统一升级包update.img如果你想制作一个像官方那样单一的、方便分发的刷机包可以生成update.img。在SDK根目录下执行./build.sh -u运行后同样在rockdev/Image-rk3566_tspi/目录下会多出一个update.img文件。在RKDevTool中切换到“升级固件”标签页直接加载这个update.img文件然后让开发板进入Loader模式点击“升级”即可。这种方式更简洁适合最终发布。7. 单独编译模块提高效率全编译一次几个小时如果只改了某个部分重新全编太浪费时间。下面介绍单独编译的方法。7.1 单独编译U-Boot如果你只修改了u-boot目录下的代码cd u-boot ./make.sh rk3566编译产物会生成在u-boot目录下你需要将其复制到rockdev目录对应位置或者用RKDevTool单独烧录uboot.img。7.2 单独编译Kernel如果你只修改了kernel目录下的代码cd kernel # 先清理并加载配置可选如果配置没改可跳过 # make ARCHarm64 tspi_defconfig rk356x_evb.config android-11.config # 编译内核并生成boot.img make ARCHarm64 BOOT_IMG../rockdev/Image-rk3566_tspi/boot.img tspi-rk3566-user-v10.img -j16编译完成后会在kernel目录下生成新的boot.img。你可以用RKDevTool单独烧录这个boot.img。7.3 单独编译Android模块如果你只修改了Android层的代码如frameworkspackages下的应用配置环境新开终端需要做source build/envsetup.sh lunch rk3566_tspi-userdebug进行编译编译当前目录模块在模块源码目录包含Android.mk或Android.bp文件下执行mm。编译指定目录模块在任意目录下执行mmm 模块路径例如mmm packages/apps/Settings。增量编译整个系统在SDK根目录执行make -j16。这比全编快但只编译有改动的部分。清理后增量编译如果发现修改没生效可以执行make installclean -j16 make -j16。这比make clean温和不会清理所有中间文件重编速度较快。单独编译的Android模块可以通过adb push命令推送到正在运行的设备上替换原有文件实现快速调试无需重新烧录整个系统。好了整个从环境准备到编译、烧录的完整流程就讲完了。第一次编译肯定会遇到各种问题可能是依赖没装全可能是内存不足也可能是网络问题。多看看终端输出的错误日志大部分都能在网上找到解决方案。耐心点当看到你自己编译的系统在板子上成功跑起来的那一刻成就感绝对是满满的。祝你编译顺利