【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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈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 已成为企业技术栈中的核心组件。然而,不同云厂商的计费规则差异显著,短文本 / 长文本计费分离、预付费 / 后付费价格梯度悬殊、音色授权费暗藏成本陷阱等问题,常导致…