news 2026/8/21 0:28:11

泰山派RK3566开发板Linux系统SDK编译全流程详解(从环境配置到固件打包)

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
泰山派RK3566开发板Linux系统SDK编译全流程详解(从环境配置到固件打包)

泰山派RK3566开发板Linux系统SDK编译全流程详解(从环境配置到固件打包)

最近有不少朋友拿到了立创的泰山派RK3566开发板,想自己动手编译Linux系统,但面对庞大的SDK和一堆命令,感觉有点无从下手。别担心,今天我就以一位过来人的身份,手把手带你走一遍完整的编译流程。从虚拟机环境准备,到SDK解压配置,再到内核、uboot、根文件系统的编译,最后打包成能烧录的固件。我会把过程中容易踩的坑和需要注意的细节都告诉你,让你一次成功。

1. 编译前的准备工作

工欲善其事,必先利其器。编译Linux系统虽然对电脑要求不像Android那么夸张,但一个稳定、纯净的编译环境至关重要。我强烈建议你在虚拟机里操作,这样即使搞乱了也能快速恢复。

1.1 搭建Ubuntu编译环境

官方推荐使用Ubuntu 18.04.6 LTS版本。这个版本经过验证,与瑞芯微的编译工具链兼容性最好,能避免很多稀奇古怪的依赖问题。你可以去Ubuntu官网下载这个版本的镜像,在VMware或VirtualBox里新建一个虚拟机。

注意:虚拟机的硬盘空间一定要给足!整个SDK解压后,加上编译过程中的中间文件,最终会占用接近80GB的空间。所以建议给虚拟机分配至少120GB的硬盘空间,编译目录的路径也千万不要包含中文

安装好Ubuntu系统后,第一件事就是更新软件源并安装编译所需的依赖库。打开终端,依次执行以下命令:

sudo apt-get update sudo apt-get upgrade

更新系统后,安装编译SDK必需的软件包。这一长串命令看起来多,但都是编译内核、uboot、根文件系统所必需的基础库和工具。

sudo apt-get install git ssh make gcc libssl-dev liblz4-tool expect \ g++ patchelf chrpath gawk texinfo chrpath diffstat binfmt-support \ qemu-user-static live-build bison flex fakeroot cmake gcc-multilib \ g++-multilib unzip device-tree-compiler ncurses-dev

一条命令粘贴进去,回车,等待安装完成即可。如果你的网络环境特殊,可能会遇到个别包下载失败,多试几次或者换个软件源一般就能解决。

1.2 获取并解压SDK源码

泰山派的Linux SDK存放在立创官方提供的网盘里。你需要去立创开发板官网的“下载中心”,找到百度网盘链接,在第05章.【立创·泰山派】系统SDK->【SDK】Linux目录下,找到名为tspi_linux_sdk_xxxxxxxx.tar.gz的文件(xxxxxxxx是日期,如20230916),把它下载下来。

接下来,把这个巨大的压缩包上传到你的Ubuntu虚拟机里。可以用SFTP、共享文件夹或者直接拖拽(如果虚拟机工具支持)。假设我放到了用户主目录下的tspi文件夹里。

进入该目录,执行解压命令:

cd ~/tspi tar -zxvf tspi_linux_sdk_20230916.tar.gz

这个解压过程会比较久,因为文件很大。解压完成后,你会得到一个同名的目录tspi_linux_sdk_20230916,这就是我们所有工作的根目录。

1.3 认识SDK目录结构

进入SDK根目录,用ls命令看看里面都有什么:

cd tspi_linux_sdk_20230916 ls

你会看到一堆文件夹,我来给你简单介绍一下它们都是干嘛用的,这样后面操作时心里有数:

  • device/rockchip/这是板级配置的核心目录!里面存放着不同芯片和开发板的配置文件。我们泰山派RK3566的配置文件BoardConfig-rk3566-tspi-v10.mk就在这里的rk356x/子目录下。
  • kernel/:Linux内核的源代码,基于 kernel 4.4 或 4.19。
  • u-boot/:U-Boot引导程序的源代码。
  • buildroot/:一种轻量级的根文件系统构建工具,我们默认用它来制作根文件系统。
  • debian/yocto/:另外两种根文件系统选项,供高级用户选择。
  • rockdev/:编译成功后,所有打包好的固件镜像(如update.img)都会输出到这个目录。
  • prebuilts/:存放着交叉编译工具链,编译时自动调用。
  • build.sh:最重要的编译脚本,我们后面绝大部分操作都靠它。
  • mkfirmware.sh:固件打包脚本,将编译好的各部分打包成完整镜像。

了解完目录结构,我们就可以开始配置和编译了。

2. 配置与编译Buildroot系统

泰山派SDK支持多种根文件系统,最常用、最方便的是Buildroot。我们就从它开始。

2.1 设置板级配置

在编译之前,必须告诉SDK:“我要编译的是泰山派RK3566开发板的系统”。这步叫做板级配置。SDK提供了两种方法,任选其一即可。

方法一:直接指定配置文件(推荐)在SDK根目录下,运行以下命令,直接指向泰山派的配置文件:

./build.sh device/rockchip/rk356x/BoardConfig-rk3566-tspi-v10.mk

方法二:使用菜单选择运行以下命令,会弹出一个交互式菜单:

./build.sh lunch

你会看到一系列板级配置选项,找到对应BoardConfig-rk3566-tspi-v10.mk的序号(比如可能是3),输入序号并按回车。

配置完成后,怎么验证是否生效呢?可以运行一个查看内核编译帮助的命令:

./build.sh -h kernel

如果输出的信息中包含了“tspi”相关的字样,就说明板级配置已经成功加载了。

2.2 选择根文件系统类型

接下来,我们需要设置环境变量,告诉SDK我们使用Buildroot来构建根文件系统。在终端中执行:

export RK_ROOTFS_SYSTEM=buildroot

这个命令只在当前终端会话中有效。如果你关闭了终端,下次编译前需要重新执行一次。你也可以把它写到~/.bashrc文件末尾,让它永久生效。

2.3 执行全自动编译

最激动人心的时刻来了——开始编译!SDK提供了一个非常方便的全编译命令:

./build.sh all

这个命令会按照顺序,自动编译U-Boot、Linux内核和Buildroot根文件系统。这是第一次编译的标准流程。

提示:第一次运行./build.sh all时,脚本可能会让你选择电源管理芯片的型号。请根据你的泰山派开发板硬件版本,选择正确的选项(通常教程或板子丝印上会有说明)。如果选错,可能导致板子无法正常开机。

编译过程非常漫长,取决于你的电脑性能,可能需要一两个小时甚至更久。期间终端会滚动大量的编译信息,只要没有出现红色的error提示,就耐心等待。编译成功最后会看到相关的成功提示。

2.4 固件打包

./build.sh all命令完成后,只是生成了各个独立的组件(如u-boot.img,boot.img等)。我们还需要把它们打包成一个可以在rockdev目录下找到的完整固件集。执行打包命令:

./mkfirmware.sh

打包速度很快。完成后,进入rockdev目录查看成果:

cd rockdev ls -l

你应该能看到如下这些重要的镜像文件:

文件名称说明
MiniLoaderAll.bin瑞芯微芯片的一级引导程序
uboot.imgU-Boot引导程序镜像
boot.img包含内核和设备树的启动镜像
rootfs.imgBuildroot根文件系统镜像
misc.img,oem.img,userdata.img其他分区镜像
parameter.txt分区表文件
update.img所有镜像打包而成的完整升级固件

其中,update.img就是我们可以直接使用瑞芯微工具(RKDevTool)进行“一键烧录”的完整包。

2.5 如何单独编译某个模块

在后续开发中,如果你只修改了内核某个驱动,或者只改了U-Boot,不需要每次都执行耗时的./build.sh all。SDK支持模块化单独编译。

单独编译U-Boot:

./build.sh uboot

单独编译Linux内核:

./build.sh kernel

单独编译Buildroot根文件系统:

./build.sh rootfs

单独编译Recovery(恢复模式,非必需):

./build.sh recovery

每次单独编译某个模块后,都必须重新执行./mkfirmware.sh来打包,新的改动才会整合到rockdev目录下的镜像文件中。

3. 编译Debian系统

如果你更喜欢使用Debian这种更接近桌面版Linux的发行版作为根文件系统,泰山派SDK也提供了支持。切换起来非常简单。

3.1 切换系统类型并编译

首先,将环境变量改为debian

export RK_ROOTFS_SYSTEM=debian

然后,同样执行全自动编译和打包命令:

./build.sh all ./mkfirmware.sh

流程和编译Buildroot完全一样。编译完成后,rockdev/rootfs.img就变成了Debian系统的镜像,update.img也相应更新了。

4. 制作自定义Ubuntu根文件系统

有时候,Buildroot或Debian预置的软件不能满足你的需求,你可能想从头制作一个更精简或更个性化的Ubuntu根文件系统。这里我介绍手动制作Ubuntu 18.04根文件系统的方法。

4.1 准备工作

首先,在你的Ubuntu编译机上安装模拟器工具:

sudo apt-get install qemu-user-static

然后,下载Ubuntu Base的最小根文件系统:

wget http://cdimage.ubuntu.com/ubuntu-base/releases/18.04/release/ubuntu-base-18.04.5-base-arm64.tar.gz

创建一个工作目录并解压:

mkdir ubuntu_rootfs && cd ubuntu_rootfs mkdir temp sudo tar -xpf ../ubuntu-base-18.04.5-base-arm64.tar.gz -C temp/

4.2 使用chroot进入“目标系统”

为了能在这个为ARM架构准备的根文件系统里安装软件,我们需要用chroot命令“切换”进去,并用qemu-aarch64-static来模拟ARM环境。

复制必要的文件:

sudo cp -b /etc/resolv.conf temp/etc/resolv.conf # 复制网络配置 sudo cp /usr/bin/qemu-aarch64-static temp/usr/bin/ # 复制模拟器

为了方便地挂载和卸载,我们创建一个脚本ch-mount.sh

#!/bin/bash function mnt() { echo "MOUNTING" sudo mount -t proc /proc ${2}/proc sudo mount -t sysfs /sys ${2}/sys sudo mount -o bind /dev ${2}/dev sudo chroot ${2} } function umnt() { echo "UNMOUNTING" sudo umount ${2}/proc sudo umount ${2}/sys sudo umount ${2}/dev } if [ "$1" == "-m" ] && [ -n "$2" ] ; then mnt $1 $2 elif [ "$1" == "-u" ] && [ -n "$2" ]; then umnt $1 $2 else echo "Usage: $0 -m /path/to/rootfs OR $0 -u /path/to/rootfs" fi

给脚本添加执行权限并进入chroot环境:

sudo chmod +x ch-mount.sh sudo ./ch-mount.sh -m temp

执行完最后一条命令,你的终端提示符就变成了root@hostname:/#,这意味着你已经“进入”了那个ARM的根文件系统。

4.3 定制你的Ubuntu系统

现在,你可以像在普通的Ubuntu系统里一样操作了。首先更新软件源并升级:

apt-get update apt-get upgrade

然后,安装你需要的任何软件包。例如,安装一些基础工具和桌面环境:

# 基础工具 apt-get install vim git ssh net-tools iputils-ping # 如果你需要图形界面(注意:这会显著增加镜像大小) apt-get install xubuntu-desktop

你还可以创建新用户、设置密码、配置网络等。完成所有定制后,输入exit退出chroot环境,然后卸载虚拟文件系统:

exit sudo ./ch-mount.sh -u temp

4.4 生成镜像文件

最后,将我们定制好的temp目录制作成.img镜像文件。首先查看定制后系统的大小:

sudo du -sh temp

假设大小是3.5G,我们创建一个稍大一点的空白镜像文件,格式化为ext4,再将文件复制进去:

# 创建一个6GB的空白镜像 (bs=1M count=6000) dd if=/dev/zero of=linuxroot.img bs=1M count=6000 # 格式化为ext4文件系统 mkfs.ext4 linuxroot.img # 挂载并复制文件 mkdir rootfs sudo mount linuxroot.img rootfs/ sudo cp -rfp temp/* rootfs/ sudo umount rootfs/ # 检查并压缩镜像到实际大小 e2fsck -p -f linuxroot.img resize2fs -M linuxroot.img

现在得到的linuxroot.img就是你自定义的Ubuntu根文件系统镜像了。

5. 烧录与下载

编译和制作好各种镜像后,最后一步就是烧录到开发板。

5.1 烧录分散镜像

如果你使用rockdev目录下的单个镜像文件(如uboot.img,boot.img,rootfs.img)进行烧录,需要使用瑞芯微的RKDevTool工具。

你需要从立创官网下载中心获取泰山派对应的配置文件Tspi_Linux_config.cfg。在RKDevTool中导入这个配置文件,然后将工具中每个分区镜像的路径,修改为你本地rockdev目录下对应文件的绝对路径

特别注意:如果你使用了自制的Ubuntu根文件系统(linuxroot.img),在配置RKDevTool时,需要将rootfs分区对应的路径指向你制作的linuxroot.img文件,而不是SDK编译生成的rootfs.img

5.2 烧录统一固件

如果你希望烧录过程更简单,可以使用打包好的update.img。这个文件包含了所有分区。你只需要在RKDevTool中选择“升级固件”模式,然后加载这一个update.img文件即可。

如果在rockdev目录下没有找到update.img,或者你单独编译模块后需要更新它,可以在SDK根目录运行:

./build.sh updateimg

这个命令会基于rockdev目录下最新的各个镜像,重新生成一个完整的update.img文件。

好了,以上就是从零开始编译泰山派RK3566开发板Linux系统的完整流程。看起来步骤不少,但实际操作一遍后就会发现,主线流程(准备环境 -> 配置 ->./build.sh all->./mkfirmware.sh)非常清晰。遇到问题别慌,多看看终端输出的错误信息,大部分都是依赖库缺失或者路径问题。祝你编译顺利!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/8/21 0:26:53

ESP32-S3 USB PD诱骗电流表设计与实现

1. 项目概述USB Type-C接口自2014年发布以来,已从单纯的物理连接器演变为集高速数据传输、高功率供电(最高240W)、视频输出与协议协商于一体的系统级接口。其中Power Delivery(PD)协议作为核心供电管理机制&#xff0c…

作者头像 李华
网站建设 2026/8/21 0:25:55

【C#】ToArray的进阶应用与性能优化指南

1. 你真的了解ToArray吗?从基础到进阶 很多C#开发者,尤其是刚入门的朋友,对ToArray方法的第一印象可能就是“把列表变成数组”。这没错,但如果你只停留在这个认知层面,那可能就错过了它真正的威力,甚至可能…

作者头像 李华
网站建设 2026/7/14 16:30:54

数电实验进阶:基于Multisim与Basys3的多功能秒表设计与实现

1. 从零开始:秒表进阶实验到底要做什么? 如果你已经跟着实验五,用Multisim和Basys3做出了一个基础的秒表,看着数码管上的数字随着时钟信号跳动,那种成就感肯定很棒。但那个秒表可能还有点“傻”:上电就跑&a…

作者头像 李华
网站建设 2026/7/14 16:30:54

Spire.doc实战:从文字替换到表格生成的Word自动化操作指南

1. 为什么你需要Spire.doc?一个更聪明的Word处理方式 如果你经常和Word文档打交道,尤其是需要批量生成报告、合同、通知这类重复性工作,那你一定对“复制、粘贴、改名字、保存”这套流程深恶痛绝。我以前也是,直到我遇到了Spire.d…

作者头像 李华
网站建设 2026/7/14 16:30:53

RTP协议实战:深入解析固定头部字段与音视频传输场景

1. 从“快递包裹”说起:RTP协议到底在干什么? 大家好,我是老张,在音视频传输这个行当里摸爬滚打了十几年。今天我们不聊那些高深莫测的理论,就从最接地气的“快递”说起。想象一下,你正在看一场高清直播&am…

作者头像 李华