嵌入式Linux RK3399启动模式及分区技术详解

news2025/3/29 3:21:30

嵌入式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内核与设备树FAT3264-256MB
rootfs根文件系统ext4根据应用需求
trust安全启动固件Raw4-8MB
userdata用户数据存储ext4剩余空间
envU-Boot环境变量Raw64KB-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),定义ipaddrserverip等参数;

  • 使用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打包技术可显著提升固件管理效率,而环境变量分区的独立设计则增强了系统可维护性。实际部署中,需重点关注分区对齐、文件系统兼容性及启动参数的正确性,以确保嵌入式系统的高效运行。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2321822.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

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 什么是缓存雪崩&#xff1f;2.2 雪崩解决方案 3.缓存击穿3.1 什么是缓存击穿&#xff1f;3.2解决方案3.2.1 基于互斥锁解决缓存击穿问题&am…

《TCP/IP网络编程》学习笔记 | Chapter 22:重叠 I/O 模型

《TCP/IP网络编程》学习笔记 | Chapter 22&#xff1a;重叠 I/O 模型 《TCP/IP网络编程》学习笔记 | Chapter 22&#xff1a;重叠 I/O 模型理解重叠 I/O 模型重叠 I/O本章讨论的重叠 I/O 的重点不在于 I/O 创建重叠 I/O 套接字执行重叠 I/O 的 WSASend 函数进行重叠 I/O 的 WSA…

python每日十题(10)

在Python语言中&#xff0c;源文件的扩展名&#xff08;后缀名&#xff09;一般使用.py。 保留字&#xff0c;也称关键字&#xff0c;是指被编程语言内部定义并保留使用的标识符。Python 3.x有35个关键字&#xff0c;分别为&#xff1a;and&#xff0c;as&#xff0c;assert&am…

LabVIEW液压振动锤控制系统

在现代工程机械领域&#xff0c;液压振动锤的高效与精准控制日益显得重要。本文通过LabVIEW软件&#xff0c;展开液压振动锤启停共振控制技术的研究与应用&#xff0c;探讨如何通过改进控制系统来优化液压振动锤的工作性能&#xff0c;确保其在复杂工况下的稳定性与效率。 ​ …

简单介绍My—Batis

1.什么是My—Batis&#xff1f; My—Batis是一个持久层框架&#xff0c;提供了sql映射功能&#xff0c;能方便的将数据库表和java对象进行映射&#xff0c;通过My—Batis可以将项目中的数据存储在数据库中&#xff0c;以便我们进行调用。值得注意的是My—Batis和spring不是一回…

ALTER TABLE SHRINK SPACE及MOVE的区别与适用场景

以下是 ‌Oracle 数据库‌中三个收缩表空间命令的对比&#xff1a; 1. ALTER TABLE table_name SHRINK SPACE;‌ ‌作用‌&#xff1a;直接重组表数据并移动高水位线&#xff08;HWM&#xff09;&#xff0c;释放未使用的空间到表空间‌。 影响‌&#xff1a; 会锁表&#…

docker远程debug

1. 修改 Java 启动命令 在 Docker 容器中启动 Java 程序时&#xff0c;需要添加 JVM 调试参数&#xff0c;jdk8以上版本 java -agentlib:jdwptransportdt_socket,servery,suspendn,address*:5005 -jar your-app.jar jdk8及以下版本&#xff1a; java -Xdebug -Xrunjdwp:tra…

rosbag|ROS中.bag数据包转换为matlab中.mat数据类型

代码见代码 msg_dict中设置自定义消息类型 test_config中设置需要记录的具体的值 test_config中topic_name以及message_type照搬plotjuggler打开时的参数 最后生成.mat文件在matlab中进行使用

pytest-xdist 进行高效并行自动化测试

pytest-xdist 的核心功能是通过多进程分发测试任务&#xff0c;每个进程独立运行测试&#xff0c;确保测试隔离。2025 年 3 月 25 日&#xff0c;pytest-xdist 在 GitHub 上已有超过 1,200,000 次下载&#xff0c;表明其在测试社区中的广泛接受。 在自动化测试中&#xff0c;随…

位置编码再思考

最近在做多模态&#xff0c;发现基于 transformer 的多模态&#xff0c;position embedding 是一个非常重要的内容&#xff0c;而且还没有统一方案&#xff0c;先暂做记录&#xff0c;几篇还不错的博客&#xff1a; Transformer学习笔记一&#xff1a;Positional Encoding&…

Deepseek API+Python 测试用例一键生成与导出 V1.0.3

** 功能详解** 随着软件测试复杂度的不断提升,测试工程师需要更高效的方法来设计高覆盖率的测试用例。Deepseek API+Python 测试用例生成工具在 V1.0.3 版本中,新增了多个功能点,优化了提示词模板,并增强了对文档和接口测试用例的支持,极大提升了测试用例设计的智能化和易…

[c语言日寄MAX]深度解析:大小端字节序

【作者主页】siy2333 【专栏介绍】⌈c语言日寄MAX⌋&#xff1a;这是一个专注于C语言刷题的专栏&#xff0c;精选题目&#xff0c;搭配详细题解、拓展算法。从基础语法到复杂算法&#xff0c;题目涉及的知识点全面覆盖&#xff0c;助力你系统提升。无论你是初学者&#xff0c;还…

Android ADB工具使用教程(从安装到使用)

目录 ADB工具介绍 什么是ADB&#xff1f; 组成 主要功能 ADB工具安装与连接设备 WIFI连接&#xff0c;提示计算机积极拒绝10061 WIFI成功连接后&#xff0c;拔掉数据线显示offline 提示adb版本不一致​编辑 ADB工具使用 ★日志操作命令 adb logcat:抓取日志 日志格式…

基于SSM框架的线上甜品销售系统(源码+lw+部署文档+讲解),源码可白嫖!

摘要 网络技术和计算机技术发展至今&#xff0c;已经拥有了深厚的理论基础&#xff0c;并在现实中进行了充分运用&#xff0c;尤其是基于计算机运行的软件更是受到各界的关注。加上现在人们已经步入信息时代&#xff0c;所以对于信息的宣传和管理就很关键。因此网上销售信息的…

Redis原理:Monitor 实现

在调用 Redis 的 MONITOR 命令后&#xff0c;可以在对应的客户端上实时查看服务器的执行情况。今天&#xff0c;我们将从源码的角度来深入探讨 MONITOR 机制是如何处理这些请求以及如何将数据反馈给用户的。 MONITOR 命令的实现 Redis 中所有命令的具体实现细节都可以在其源代…

计算机工具基础(七)——Git

Git 本系列博客为《Missing in CS Class(2020)》课程笔记 Git是一种分布式版本控制系统&#xff0c;被其跟踪的文件可被查询精细到行的修改记录、回退版本、建立分支等 模型 一般流程&#xff1a;工作区 → \to →暂存区 → \to →仓库(本地 → \to →远端) 工作区&#xff1…

23种设计模式-创建型模式-工厂方法

文章目录 简介场景问题1. 直接依赖具体实现2. 违反开闭原则3. 条件分支泛滥4. 代码重复风险 解决根本问题完整类图完整代码说明核心优势代码优化静态配置表动态策略 总结 简介 工厂方法是一种创建型设计模式&#xff0c;它提供了在父类中创建对象的接口&#xff0c;但允许子类…

142. 环形链表 II——考察数学,难!

142. 环形链表 IIhttps://leetcode.cn/problems/linked-list-cycle-ii/ 给定一个链表的头节点 head ,返回链表开始入环的第一个节点。 如果链表无环,则返回 null。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,…

从零开始:使用Luatools工具高效烧录Air780EPM核心板项目的完整指南

本文将深入讲解如何使用Luatools工具烧录一个具体的项目到Air780EPM开发板中。如何使用官方推荐的Luatools工具&#xff08;一款跨平台、命令行驱动的烧录利器&#xff09;&#xff0c;通过“环境配置→硬件连接→参数设置→一键烧录”四大步骤&#xff0c;帮助用户实现Air780E…