嵌入式Linux RK3399启动模式及分区技术详解
嵌入式Linux RK3399启动模式及分区技术详解
一、RK3399启动模式分析
RK3399作为瑞芯微推出的高性能嵌入式处理器,其启动模式分为闭源与开源两种方案,核心区别在于前级Loader的实现方式。
1. 闭源启动流程
采用瑞芯微官方提供的闭源固件,流程为:
复制
BOOTROM → ddr.bin → Miniloader → TRUST → U-Boot → Kernel
-
ddr.bin:负责初始化DDR内存控制器;
-
Miniloader:完成硬件基础初始化,加载后续固件;
-
TRUST:安全启动分区,用于可信执行环境(TEE);
-
U-Boot:引导内核及设备树9。
2. 开源启动流程
基于开源SPL(Secondary Program Loader)替代闭源组件,流程为:
复制
BOOTROM → TPL → SPL → TRUST → U-Boot → Kernel
-
TPL(Tertiary Program Loader):替代ddr.bin,初始化DDR;
-
SPL:替代Miniloader,提供硬件初始化与固件加载功能;
-
TRUST分区:需根据安全需求裁剪,通常保留最小功能以减少空间占用9。
3. FIT(Flattened Image Tree)打包技术
FIT是U-Boot主推的固件打包方案,支持多镜像集成与校验。其核心步骤包括:
-
编写ITS文件:采用DTS语法描述镜像结构,定义内核、设备树、RAMDISK等组件;
-
生成ITB镜像:通过
mkimage -f image.its image.itb命令打包; -
引导优化:SPL可直接加载FIT镜像,简化启动流程并增强灵活性9。
二、分区方案设计
1. MBR与GPT分区对比
-
MBR:兼容性强,支持最大2TB分区,主分区数量限制为4个;
-
GPT:支持128个主分区,容量扩展至18EB,适合大容量存储设备6。
2. RK3399典型分区布局
| 分区名 | 功能描述 | 文件系统 | 大小建议 |
|---|---|---|---|
| boot | 内核与设备树 | FAT32 | 64-256MB |
| rootfs | 根文件系统 | ext4 | 根据应用需求 |
| trust | 安全启动固件 | Raw | 4-8MB |
| userdata | 用户数据存储 | ext4 | 剩余空间 |
| env | U-Boot环境变量 | Raw | 64KB-1MB |
3. Trust分区优化
通过裁剪非必要安全功能,Trust分区可缩减至4MB,释放存储空间。需在编译时配置trust.ini,移除冗余驱动模块9。
三、分区创建与管理
1. 工具选择与使用
-
fdisk:适用于MBR分区,交互式操作,支持主分区与扩展分区创建13;
-
gdisk:专为GPT设计,命令与fdisk类似,支持128个主分区1;
-
parted:跨MBR/GPT的脚本化工具,适合自动化部署6。
示例:使用parted创建GPT分区
bash
复制
parted /dev/nvme0n1 mklabel gpt mkpart primary ext4 1MiB 1GiB print
2. 格式化与挂载
-
格式化命令:
mkfs.ext4 /dev/nvme0n1p1; -
临时挂载:
mount /dev/nvme0n1p1 /mnt/data; -
永久挂载:编辑
/etc/fstab,添加UUID=<id> /mnt/data ext4 defaults 0 057。
3. 环境变量分区制作
-
创建环境变量文本文件(如
uboot_env.txt),定义ipaddr、serverip等参数; -
使用
mkenvimage工具生成二进制镜像:bash
复制
./mkenvimage -s 0x10000 -o uboot_env.bin uboot_env.txt
-
烧录至独立分区(如
/dev/mmcblk0p5),确保U-Boot可读取12。
四、启动参数与U-Boot配置
1. 内核启动参数调整
在U-Boot中设置bootargs,指定根文件系统路径与挂载参数:
bash
复制
setenv bootargs "root=/dev/nvme0n1p2 rootwait rw console=ttyS2,1500000"
2. FIT镜像引导配置
修改U-Boot脚本,加载FIT镜像并解析:
bash
复制
load mmc 0:1 ${loadaddr} image.itb
bootm ${loadaddr}
3. 常见问题排查
-
内核挂载失败:检查
root=参数是否正确,或确认文件系统是否损坏; -
Trust分区校验错误:重新编译Trust镜像并确保分区偏移地址匹配9。
五、实际应用案例:NVMe SSD配置
步骤1:识别设备
bash
复制
cat /proc/partitions # 确认NVMe设备节点(如nvme0n1)
步骤2:分区与格式化
bash
复制
parted /dev/nvme0n1 mklabel gpt parted /dev/nvme0n1 mkpart primary ext4 1MiB 100% mkfs.ext4 /dev/nvme0n1p1
步骤3:挂载与自动化
bash
复制
mkdir /media/nvme echo "UUID=$(blkid -s UUID -o value /dev/nvme0n1p1) /media/nvme ext4 defaults 0 0" >> /etc/fstab mount -a
步骤4:验证与测试
重启后执行df -h,确认分区自动挂载5。
六、总结
RK3399的启动模式与分区设计直接影响系统稳定性与性能。开发者需根据存储介质类型(eMMC、NVMe等)选择MBR或GPT分区方案,并结合安全需求优化Trust分区。通过FIT打包技术可显著提升固件管理效率,而环境变量分区的独立设计则增强了系统可维护性。实际部署中,需重点关注分区对齐、文件系统兼容性及启动参数的正确性,以确保嵌入式系统的高效运行。
相关文章:
嵌入式Linux RK3399启动模式及分区技术详解
嵌入式Linux RK3399启动模式及分区技术详解 一、RK3399启动模式分析 RK3399作为瑞芯微推出的高性能嵌入式处理器,其启动模式分为闭源与开源两种方案,核心区别在于前级Loader的实现方式。 1. 闭源启动流程 采用瑞芯微官方提供的闭源固件,流…...
python --face_recognition(人脸识别,检测,特征提取,绘制鼻子,眼睛,嘴巴,眉毛)/活体检测
dlib 安装方法 之前博文 https://blog.csdn.net/weixin_44634704/article/details/141332644 环境: python3.8 opencv-python4.11.0.86 face_recognition1.3.0 dlib19.24.6人脸检测 import cv2 import face_recognition# 读取人脸图片 img cv2.imread(r"C:\Users\123\…...
redis解决缓存穿透/击穿/雪崩
文章目录 1.缓存穿透1.1 概念1.2 解决方案1.2.1 缓存空对象1.2.2 布隆过滤 1.2 店铺查询使用缓存穿透解决方案1.2.1 流程 2.缓存雪崩2.1 什么是缓存雪崩?2.2 雪崩解决方案 3.缓存击穿3.1 什么是缓存击穿?3.2解决方案3.2.1 基于互斥锁解决缓存击穿问题&am…...
特征工程自动化(FeatureTools实战)
目录 特征工程自动化(FeatureTools实战)1. 引言2. 项目背景与意义2.1 特征工程的重要性2.2 自动化特征工程的优势2.3 工业级数据处理需求3. 数据集生成与介绍3.1 数据集构成3.2 数据生成方法4. 自动化特征工程理论基础4.1 特征工程的基本概念4.2 FeatureTools库简介4.3 关键公…...
哈希表简单例子
一、题意 给定一个整数数组,判断数组中是否存在重复的元素。如果存在一值在数组中出现至少两次,函数返回 True ;如果数组中每个元素都不相同,则返回 False 。 输入: [1, 2, 3, 1] 输出: True 输入: [1, 2, 3, 4] 输出: False …...
利用GitHub Pages快速部署前端框架静态网页
文章目录 前言GitHub Pages 来部署前端框架(Vue 3 Vite)项目1、配置 GitHub Pages 部署2、将项目推送到 GitHub3、部署到 GitHub Pages4、访问部署页面5、修改代码后的更新部署顺序 前言 可以先参考: 使用 GitHub Pages 快速部署静态网页: …...
《TCP/IP网络编程》学习笔记 | Chapter 22:重叠 I/O 模型
《TCP/IP网络编程》学习笔记 | Chapter 22:重叠 I/O 模型 《TCP/IP网络编程》学习笔记 | Chapter 22:重叠 I/O 模型理解重叠 I/O 模型重叠 I/O本章讨论的重叠 I/O 的重点不在于 I/O 创建重叠 I/O 套接字执行重叠 I/O 的 WSASend 函数进行重叠 I/O 的 WSA…...
Skynet 中 snlua 服务启动整体流程分析
前言: 在 Skynet 中,Lua 扮演了极其重要的角色。Skynet 大多数业务逻辑都跑在一个个 Lua 服务里,而能够将 Lua 环境嵌入到 Skynet 框架下,并与 Skynet 消息调度机制完美结合,正是 snlua 服务所承担的核心功能。 本文将…...
python每日十题(10)
在Python语言中,源文件的扩展名(后缀名)一般使用.py。 保留字,也称关键字,是指被编程语言内部定义并保留使用的标识符。Python 3.x有35个关键字,分别为:and,as,assert&am…...
基于大模型预测的初治菌阳肺结核诊疗方案研究报告
目录 一、引言 1.1 研究背景与意义 1.2 研究目的 二、初治菌阳肺结核概述 2.1 疾病定义与病理机制 2.2 流行病学特征 2.3 传统诊疗方法与局限性 三、大模型在初治菌阳肺结核预测中的应用原理 3.1 大模型技术简介 3.2 数据收集与预处理 3.3 模型构建与训练 3.4 模型…...
嵌入式系统应用-音乐播放器-按键版本
音乐播放器-按键版本 1 背景介绍1.1 导入音乐播放器1.2 导入按键扫描按键包 2 功能设计2.1 需求分析2.2 程序架构设计2.3 相关知识储备 3 代码编写3.1 led代码实现3.2 按键扫描3.3 音乐播放线程 4 低功耗设计4.1 睡眠模式4.2 停止模式4.3 待机模式 1 背景介绍 这个音乐播放器分…...
LabVIEW液压振动锤控制系统
在现代工程机械领域,液压振动锤的高效与精准控制日益显得重要。本文通过LabVIEW软件,展开液压振动锤启停共振控制技术的研究与应用,探讨如何通过改进控制系统来优化液压振动锤的工作性能,确保其在复杂工况下的稳定性与效率。 …...
简单介绍My—Batis
1.什么是My—Batis? My—Batis是一个持久层框架,提供了sql映射功能,能方便的将数据库表和java对象进行映射,通过My—Batis可以将项目中的数据存储在数据库中,以便我们进行调用。值得注意的是My—Batis和spring不是一回…...
ALTER TABLE SHRINK SPACE及MOVE的区别与适用场景
以下是 Oracle 数据库中三个收缩表空间命令的对比: 1. ALTER TABLE table_name SHRINK SPACE; 作用:直接重组表数据并移动高水位线(HWM),释放未使用的空间到表空间。 影响: 会锁表&#…...
车载通信方案为何选择CAN/CANFD?
摘要 随着汽车电子技术的飞速发展,车载通信系统在车辆的智能化、网联化进程中扮演着至关重要的角色。控制器局域网络(CAN)及其扩展版本CANFD凭借其卓越的可靠性、高效的数据传输能力和强大的抗干扰特性,成为现代汽车通信架构的核心…...
docker远程debug
1. 修改 Java 启动命令 在 Docker 容器中启动 Java 程序时,需要添加 JVM 调试参数,jdk8以上版本 java -agentlib:jdwptransportdt_socket,servery,suspendn,address*:5005 -jar your-app.jar jdk8及以下版本: java -Xdebug -Xrunjdwp:tra…...
rosbag|ROS中.bag数据包转换为matlab中.mat数据类型
代码见代码 msg_dict中设置自定义消息类型 test_config中设置需要记录的具体的值 test_config中topic_name以及message_type照搬plotjuggler打开时的参数 最后生成.mat文件在matlab中进行使用...
Java编程思想:为何有时要将子类对象赋值给父类引用
为何有时要将子类对象赋值给父类引用,用父类来进行实例化? 这就要说多态的优势: 代码的扩展性和降低耦合度,而不是完全避免修改代码。 TuXing t new Changfangxing(); Changfangxing k (Changfangxing)t;原因1: 代码可拓展性 …...
pytest-xdist 进行高效并行自动化测试
pytest-xdist 的核心功能是通过多进程分发测试任务,每个进程独立运行测试,确保测试隔离。2025 年 3 月 25 日,pytest-xdist 在 GitHub 上已有超过 1,200,000 次下载,表明其在测试社区中的广泛接受。 在自动化测试中,随…...
位置编码再思考
最近在做多模态,发现基于 transformer 的多模态,position embedding 是一个非常重要的内容,而且还没有统一方案,先暂做记录,几篇还不错的博客: Transformer学习笔记一:Positional Encoding&…...
Deepseek API+Python 测试用例一键生成与导出 V1.0.3
** 功能详解** 随着软件测试复杂度的不断提升,测试工程师需要更高效的方法来设计高覆盖率的测试用例。Deepseek API+Python 测试用例生成工具在 V1.0.3 版本中,新增了多个功能点,优化了提示词模板,并增强了对文档和接口测试用例的支持,极大提升了测试用例设计的智能化和易…...
[c语言日寄MAX]深度解析:大小端字节序
【作者主页】siy2333 【专栏介绍】⌈c语言日寄MAX⌋:这是一个专注于C语言刷题的专栏,精选题目,搭配详细题解、拓展算法。从基础语法到复杂算法,题目涉及的知识点全面覆盖,助力你系统提升。无论你是初学者,还…...
Android ADB工具使用教程(从安装到使用)
目录 ADB工具介绍 什么是ADB? 组成 主要功能 ADB工具安装与连接设备 WIFI连接,提示计算机积极拒绝10061 WIFI成功连接后,拔掉数据线显示offline 提示adb版本不一致编辑 ADB工具使用 ★日志操作命令 adb logcat:抓取日志 日志格式…...
开个坑记录一下树莓派4B部署yolo的一些问题
问题一:操作系统与内核信息 这个问题困扰了我一天半,下载的时候显示的信息是aar64的系统,但是这并无意味着一个问题,那就是你的操作系统是64位的。需要采用如下的指令查看: getconf LONG_BIT 我在树莓派得出来的操作…...
基于SSM框架的线上甜品销售系统(源码+lw+部署文档+讲解),源码可白嫖!
摘要 网络技术和计算机技术发展至今,已经拥有了深厚的理论基础,并在现实中进行了充分运用,尤其是基于计算机运行的软件更是受到各界的关注。加上现在人们已经步入信息时代,所以对于信息的宣传和管理就很关键。因此网上销售信息的…...
基于 FPGA的HLS技术与应用
1、hls简介 HLS ( high level synthesis )即高层次综合,主要是利用高级编程语言实现算法。 2、循环优化 约束语法: #pragma HLS unroll #pragma HLS PIPELINE II1 绝大多数循环都以串行的方式执行,这种执行方…...
Redis原理:Monitor 实现
在调用 Redis 的 MONITOR 命令后,可以在对应的客户端上实时查看服务器的执行情况。今天,我们将从源码的角度来深入探讨 MONITOR 机制是如何处理这些请求以及如何将数据反馈给用户的。 MONITOR 命令的实现 Redis 中所有命令的具体实现细节都可以在其源代…...
计算机工具基础(七)——Git
Git 本系列博客为《Missing in CS Class(2020)》课程笔记 Git是一种分布式版本控制系统,被其跟踪的文件可被查询精细到行的修改记录、回退版本、建立分支等 模型 一般流程:工作区 → \to →暂存区 → \to →仓库(本地 → \to →远端) 工作区࿱…...
鸿蒙开发:父组件如何调用子组件中的方法?
前言 本文基于Api13 很多的场景下,父组件需要触发子组件中的某个方法,来实现一些特定的逻辑,但是ArkUI是声明式UI,不能直接调用子组件中的方法,那么怎么去实现这个功能呢? 举一个很常见的案例,通…...
23种设计模式-创建型模式-工厂方法
文章目录 简介场景问题1. 直接依赖具体实现2. 违反开闭原则3. 条件分支泛滥4. 代码重复风险 解决根本问题完整类图完整代码说明核心优势代码优化静态配置表动态策略 总结 简介 工厂方法是一种创建型设计模式,它提供了在父类中创建对象的接口,但允许子类…...
