【build】RDK構建系統v0.1 (持續更新。。。。)

一、 項目概述

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等。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/95717.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/95717.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/95717.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

關于RSA和AES加密

RSA非對稱加密 非對稱加密不能傳輸大數據量,但比對稱加密要安全,所以傳輸密碼一般就是用的非對稱加密 接口拿到RSA公鑰然后再加密之后傳給后端就好了 let crypt new JSEncrypt(); crypt.setPublicKey(res.message); // console.log(加密前:, data); let…

云蝠智能VoiceAgent:AI賦能售后服務場景的創新實踐

引言:售后服務數字化轉型的必然趨勢在數字經濟時代,售后服務已成為企業核心競爭力的重要組成部分。據統計,優質的售后服務能夠提升客戶留存率高達67%,同時降低客戶獲取成本約30%。然而,傳統售后服務模式面臨著人力成本…

C#控制臺輸入(Read()、ReadKey()和ReadLine())

下面我們來詳細講解 C# 中三種控制臺輸入方法:Console.Read()、Console.ReadKey() 和 Console.ReadLine() 的區別、原理、使用場景,并配上清晰的代碼例子和運行結果說明。? 一、三者的根本區別(一句話總結)方法返回值讀取方式是否…

Windows的Roaming文件夾的作用和Local/LocalLow的區別

📁 Roaming 文件夾的核心意義? 什么是“漫游”(Roaming)?跨設備同步:當用戶登錄到同一域內的不同 Windows 設備(如公司或學校的辦公電腦)時,Roaming 文件夾中的數據會自動通過網絡同…

【Java Web 快速入門】十一、Spring Boot 原理

目錄Spring Boot 原理配置優先級Bean 管理獲取 BeanBean 的作用域第三方 BeanSpring Boot 底層原理起步依賴自動配置核心原理實例說明例 1:自定義一個 “日志 starter”例 2:SpringBoot 自帶的 spring-boot-starter-web關鍵總結Spring Boot 原理 配置優…

基于Redisson的分布式鎖原理深度解析與優化實踐

基于Redisson的分布式鎖原理深度解析與優化實踐 分布式環境下,鎖的實現至關重要。本文將從技術背景與應用場景出發,結合核心原理、關鍵源碼、實際示例,深入剖析Redisson分布式鎖的實現機制,并給出性能優化建議,幫助后端…

室外 3DVG 基準

室外 3DVG基準(按重要性與被引用頻率) Talk2Car / Talk2Car-3D (2019 / 衍生) — 對象 referral(駕駛場景) 說明:最早的自然語言 → 駕駛場景對象引用數據集之一(原 Talk2Car 是以 nuScenes 為底并提供自然…

Jenkins安裝部署(Win11)和常見配置鏡像加速

一、安裝前準備 本文使用的Jenkins Windows一鍵安裝包,JDK事先配置好環境變量,Jenkins版本: Jenkins下載地址:jenkins一鍵安裝包v2-479-1.msi資源-CSDN下載 二、Jenkins安裝部署 1、下載Jenkins ,點擊下一步下一步…

Windows MCP.Net:革命性的 .NET Windows 桌面自動化 MCP 服務器

📋 目錄 項目概述 核心技術架構 功能特性詳解 技術實現亮點 安裝與配置 實戰應用場景 代碼示例與API詳解 性能優化與最佳實踐 未來發展規劃 總結 項目概述 在人工智能快速發展的今天,AI 助手與操作系統的深度集成成為了一個重要趨勢。Window…

Java ArrayList的介紹及用法

十分想念順店雜可。。。ArrayList 是 Java 集合框架中最常用的類之一,實現了 List 接口,底層基于動態數組實現,支持動態擴容,相比普通數組更靈活。以下是其詳細介紹及用法:一、核心特性動態大小:無需預先指…

Docker 命令大全及使用場景總結

一、容器生命周期管理1. 創建并運行容器docker run [選項] 鏡像名 [命令]常用選項:-d:后臺運行(detached)-it:交互式終端(如 -it ubuntu bash)--name:指定容器名稱-p 主機端口:容器端…

簡單的 HTTPS 學習

簡單的 HTTPS 學習 1. 需求 現在使用的服務是HTTP調用形式,服務可能會有調用外圍https形式的服務,簡單了解了一下,然后寫了一個簡單的例子進行記錄。 HTTP(超文本傳輸協議) 是一種用于傳輸超文本的應用層協議&#…

[系統架構設計師]系統質量屬性與架構評估(八)

[系統架構設計師]系統質量屬性與架構評估(八) 一.軟件系統質量屬性 1.基本概念 軟件系統質量屬性:可測量或可測試的屬性 開發期質量屬性,運行期質量屬性面向架構評估的質量屬性:1.可用性: 提升策略 錯誤檢測…

【R語言】R 語言中 gsub 與正則表達式詳解(含 POSIX 與 Perl 風格實例)

R 語言中 gsub 與正則表達式詳解(含 POSIX 與 Perl 風格實例) 在 R 語言中,字符串處理是非常常見的需求,R 語言中的 gsub() 函數則具有字符串替換的功能。本文將通過兩個實例,幫助你深入理解 R 的 gsub()、POSIX 字符…

EN55035多媒體設備電磁兼容性抗干擾要求標準

EN55035 是一項由歐洲標準化委員會制定的電磁兼容性(EMC)標準,全稱為《多媒體設備的電磁兼容性要求》。該標準主要針對多媒體設備的電磁輻射和抗干擾能力進行規范,確保這類設備在電磁環境中能夠正常工作,同時不對其他設…

計算分組內時間列的最大差值

計算分組內時間列的最大差值 在 Pandas 中,要計算每個分組內 time 列的最大值與當前行值的差值,需結合 groupby() 和 transform() 方法。核心步驟如下:分組計算最大值 使用 transform(max) 獲取每個分組中 time 列的最大值,結果會…

CUDA 編程筆記:CUDA延遲隱藏

一、核心概念:延遲隱藏(Latency Hiding)是 GPU 通過多線程機制掩蓋指令延遲的關鍵技術。當某些線程束(warp)因指令延遲(如內存訪問或算術計算)而等待時,其他就緒線程束會立即被調度執…

MySQL工具包中的其他程序

雖然有很多不同的程序,但有些選項是公共的,比兔用戶名和密碼,使用方法和MySQL相同,在這里統一列出,后面我們介紹不同的工具時,只討論個性的選項以及作用以下是常用的MySQL程序:程序名作用mysqld…

C#WPF實戰出真汁09--【消費開單】--選擇菜品

1、功能介紹當選擇一個空桌時,必須先開臺才能開單,可以先開臺,再開單,也可以開臺的同時開單當選擇一個用餐中的餐桌時,必須顯示該桌前面已經點好的菜品,同時可以繼續點餐或結賬所以無論哪個功能都涉及選擇菜…

大廠語音合成成本深度對比:微軟 / 阿里 / 騰訊 / 火山 API 計費拆解與技術選型指南

在 AI 配音、智能客服、教育音頻等場景爆發的當下,語音合成 API 已成為企業技術棧中的核心組件。然而,不同云廠商的計費規則差異顯著,短文本 / 長文本計費分離、預付費 / 后付費價格梯度懸殊、音色授權費暗藏成本陷阱等問題,常導致…