一、 项目概述
RDK构建系统是一个用于构建和定制嵌入式系统的自动化工具,通过简单的命令行操作,您可以完成从下载依赖包、定制根文件系统、构建内核到打包镜像的完整流程。该系统采用模块化设计,提供了丰富的配置选项,适用于不同的硬件平台和软件需求,目标支持RDK所有SOC。
二、项目结构
RDK构建系统的项目结构如下:
├── Makefile # 主构建脚本
├── build/ # 构建脚本目录
│ ├── common.funcs # 通用函数库
│ ├── download_deb_pkgs.sh # 下载deb包脚本
│ ├── download_samplefs.sh # 下载samplefs脚本
│ ├── hobot_customize_rootfs.sh # 定制rootfs脚本
│ ├── mk_debs.sh # 构建deb包脚本
│ ├── mk_kernel.sh # 构建内核脚本
│ ├── pack_image.sh # 打包镜像脚本
│ └── source_sync.sh # 同步源码脚本
├── configs/ # 配置文件目录
├── out/ # 输出目录
│ ├── kernel/ # 内核输出
│ ├── rootfs/ # 根文件系统输出
│ └── tmp/ # 临时文件
└── source/ # 源码目录├── kernel/ # 内核源码└── 其他组件源码...
为了保持RDK用户的使用习惯,保留RDK原有命名。
三、设计规则
1. 模块化设计
构建系统采用模块化设计,每个功能由专门的脚本负责处理:
- 构建脚本: 位于build目录,负责不同的构建阶段
- 配置文件: 位于configs目录,定义构建参数
- 输出目录: out目录存放所有构建产物
- 源码目录: source目录包含内核和其他组件源码
- 增量编译: kernel已支持,rootfs/debs等待支持
- 进度提示: 下载或解压耗时将显示进度条,避免用户一直等待
- 优化处理: 基于rdk-gen优化脚本处理以及格式化代码
2. 配置驱动
构建过程由配置文件驱动,通过选择不同的配置文件,可以定制不同的构建流程和产物。配置文件中定义了:
RDK_IMAGE_VERSION=$(cat "${HR_LOCAL_DIR}/VERSION")
RDK_SOC_NAME="x3"
RDK_IMAGE_NAME="rdk-${RDK_SOC_NAME}-ubuntu22-preinstalled-desktop-${RDK_IMAGE_VERSION}-arm64"
RDK_SAMPLEFS_URL="http://archive.d-robotics.cc/samplefs"
RDK_UBUNTU_VERSION="jammy"
RDK_IMAGE_TYPE="desktop"
RDK_SAMPLEFS_VERSION="latest"# 更多配置...
3. 统一接口
系统提供了统一的日志输出和进度显示接口:
ECHOI
: 输出信息消息ECHOW
: 输出警告消息(黄色)ECHOE
: 输出错误消息(红色)ECHOD
: 输出调试消息(蓝色)
4. 自动化流程
构建系统实现了高度自动化,通过Makefile将各个构建阶段串联起来,用户只需执行简单的命令即可完成复杂的构建过程。
四、使用方法
基本命令
# 显示帮助信息
make help# 选择配置文件
make config [配置文件名]# 下载deb包
make download_deb_pkgs# 下载samplefs
make download_samplefs# 定制rootfs
make customize_rootfs# 构建deb包
make mk_debs# 构建内核
make mk_kernel# 打包镜像
make pack_image# 清理临时文件
make clean
配置文件选择
配置文件位于configs
目录下,您可以通过以下方式选择配置文件:
# 直接指定配置文件名
make config ubuntu-22.04_desktop_rdk-x3_release# 或者通过交互式选择
make config
查看脚本帮助信息
每个脚本都提供了详细的帮助信息:
# 显示下载deb包脚本帮助
make download_deb_pkgs-help# 显示下载samplefs脚本帮助
make download_samplefs-help# 显示构建内核脚本帮助
make mk_kernel-help# 显示打包镜像脚本帮助
make pack_image-help# 显示同步源码脚本帮助
make source_sync-help
小技巧:在终端输入make + space + tab 会显示支持的命令。
五、构建流程示例
以下是构建RDK镜像的完整流程示例:
# 1. 初始化源码仓库
repo init -u git@gitcode.com:RuningSoc/manifest.git -b RDK_X3_DEV -m rdk_x3_v3.0.1.xml# 2. 同步源码
repo sync# 3. 选择配置文件
make config ubuntu-22.04_desktop_rdk-x3_release# 4. 下载依赖包
make download_deb_pkgs# 5. 下载samplefs
make download_samplefs# 6. 构建内核
make mk_kernel# 7. 打包镜像
make pack_image# 8. 构建deb包
make mk_debs
构建完成后,镜像文件将位于out
目录下,文件名类似于rdk-x3-ubuntu22-preinstalled-desktop-3.0.1-arm64_20250815172625.img
。
注意:先执行export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo/' 在初始化源码仓或者安装下面方法配置一次即可
# 打开用户配置文件
vim ~/.bashrc# 放到文件最后
export REPO_URL='https://mirrors.tuna.tsinghua.edu.cn/git/git-repo/'# 使其生效 或者新打开一个终端
vim ~/.bashrc
六、高级特性
自定义配置
您可以创建自己的配置文件,位于configs
目录下,以.conf
为后缀。配置文件中可以定义各种参数,如镜像版本、SOC名称、Ubuntu版本等。
扩展功能
如果需要添加新的功能,可以创建新的脚本文件,并在Makefile中添加相应的目标。同时,可以使用common.funcs中提供的工具函数来简化开发。
七、总结
RDK构建系统是一个功能强大、灵活可扩展的嵌入式系统构建工具,通过模块化设计和配置驱动,使得复杂的构建过程变得简单易用。无论是初学者还是经验丰富的开发者,都可以快速上手并定制自己的嵌入式系统。
PS:本专题以多媒体软件开发为主,构建系统更新会缓慢但会持续更新,由于rdk-gen 重构会花大量时间,因此不会做较大更新(以rdk-gen为主线持续更新为主)。等后面单独开个专题来从头创建构建系统不仅仅支持rdk希望支持更多SOC等。