一、 項目概述
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等。