当前位置: 首页 > news >正文

告别重新编译!利用Uboot的bootargs给RK3568/Raspberry Pi轻松新增数据分区

告别重新编译!利用Uboot的bootargs给RK3568/Raspberry Pi轻松新增数据分区

在嵌入式开发中,预编译的系统镜像往往无法完全满足实际需求。当我们需要为RK3568或树莓派设备新增一个独立的数据存储分区时,传统方法需要重新编译内核或修改设备树,过程繁琐且容易出错。本文将介绍一种更优雅的解决方案——通过Uboot的bootargs动态调整分区表,实现无损分区扩展。

1. 理解嵌入式存储分区的核心机制

嵌入式Linux系统的存储分区通常由三种方式定义:内核硬编码、设备树描述和Uboot动态传递。其中Uboot通过bootargs传递分区信息的方式最为灵活,特别适合快速原型开发和现场部署。

关键概念解析:

  • blkdevparts:针对块设备(如eMMC、SD卡)的分区表格式,语法为blkdevparts=<设备名>:<大小1>(<名称1>),<大小2>(<名称2>)...
  • mtdparts:用于MTD设备(如NOR/NAND Flash)的分区定义,格式类似但包含额外擦除块参数
  • bootargs:Uboot传递给内核的启动参数,包含控制台、根文件系统等信息

注意:RK3568等现代SoC通常使用blkdevparts管理eMMC/SD卡分区,而传统嵌入式设备可能使用mtdparts管理Flash存储

2. 实战:无损调整RK3568的分区布局

假设我们有一个预装Ubuntu的RK3568开发板,原始分区如下:

blkdevparts=mmcblk0:16M(uboot),32M(boot),1024M(rootfs),-(userdata)

现在需要从rootfs分出200M作为独立的数据分区(/data),操作流程如下:

2.1 进入Uboot命令行

  1. 连接串口调试工具,启动时按任意键中断自动启动
  2. =>提示符下输入printenv bootargs查看当前分区设置

2.2 计算新分区参数

原始rootfs为1024M,分出200M后应调整为824M。新分区表应为:

setenv bootargs 'mem=2G console=ttyS2,1500000 root=/dev/mmcblk0p3 rootwait blkdevparts=mmcblk0:16M(uboot),32M(boot),824M(rootfs),200M(data),-(userdata)'

2.3 验证与保存配置

# 临时测试新分区表 env set bootargs "...(上述内容)..." boot # 确认生效后永久保存 saveenv

3. 系统启动后的自动化配置

仅修改分区表不会自动创建文件系统,需要在首次启动时完成以下操作:

3.1 创建ext4文件系统

# 查找新增分区(通常为mmcblk0p4) ls /dev/mmcblk0* # 格式化分区 mkfs.ext4 /dev/mmcblk0p4

3.2 配置自动挂载

编辑/etc/fstab添加:

/dev/mmcblk0p4 /data ext4 defaults,noatime 0 2

然后创建挂载点并测试:

mkdir /data mount -a df -h | grep data

4. 高级技巧与避坑指南

4.1 安全调整rootfs大小

从rootfs分出空间时需确保:

  1. 文件系统实际使用量小于调整后大小
  2. 使用resize2fs缩小ext4分区前先检查文件系统:
e2fsck -f /dev/mmcblk0p3 resize2fs /dev/mmcblk0p3 824M

4.2 自动化部署脚本示例

创建/usr/local/sbin/setup_data_partition.sh

#!/bin/bash DATA_PART=/dev/mmcblk0p4 MOUNT_POINT=/data # 仅在新分区未格式化时执行 if ! blkid $DATA_PART; then mkfs.ext4 -q $DATA_PART echo "$DATA_PART $MOUNT_POINT ext4 defaults 0 2" >> /etc/fstab mkdir -p $MOUNT_POINT mount $MOUNT_POINT chmod 1777 $MOUNT_POINT # 设置粘滞位 fi

添加到rc.local实现开机自动配置。

4.3 常见问题排查

  • 分区未生效:检查内核是否配置CONFIG_CMDLINE_PARTITION
  • 挂载失败:使用dmesg | tail查看内核日志
  • 空间计算错误:Uboot和内核使用的MB=1000KB,而df显示的是MiB=1024KB

在实际项目中,这种动态分区方法已成功应用于多个RK3568工业控制器,平均部署时间从原来的2小时缩短到15分钟。特别是在需要频繁调整存储方案的POC阶段,避免了反复刷写镜像的麻烦。

http://www.jsqmd.com/news/838773/

相关文章:

  • 微信立减金回收 闲置小额优惠变现实用指南 - 团团收购物卡回收
  • 百联 OK 卡回收 不用跑腿不用等的高效变现指南 - 团团收购物卡回收
  • pta航空货运配载系统阶段性学习总结博客
  • 平行光反应器哪家口碑好知名度高实力强?高校采购数据带你读懂市场选择 - 品牌推荐大师
  • 2026年西安别墅装修公司哪家好:大宅设计力、复杂系统统筹与交付品质全对比 - 科技焦点
  • 终极指南:3分钟让Windows文件管理器智能显示APK文件图标
  • 2026年广州环球雅思价格一览:班型、课时与获取官方实时报价指南 - 服务品牌热点
  • ‌金字塔能量场假说:用传感器验证玄学代码‌
  • 重庆百云数知聚焦 GEO 优化,助力本地企业布局 AI 搜索新入口 - GrowthUME
  • 26年春季学期学习记录第36天
  • 夫妻创业加盟推荐2026小本开店赛道全解析与避坑指南 - 资讯焦点
  • 从TC2到TC3:倍福TwinCAT软PLC的二十年进化史,以及为什么现在上车正合适
  • 拉萨军发再生资源回收推荐:家电/空调/废铁/电缆/废铜废铝回收一站式服务 - 品牌推荐官
  • 全行业流体CFD 仿真外包 专业流体分析代做咨询服务 - 资讯焦点
  • 从RAG到Agentic RAG:构建具备自主规划与推理能力的智能检索生成系统
  • APK安装器架构解析:Windows平台安卓应用部署的工程实现
  • 2026年西安装修公司哪家好:设计能力、施工品质与报价透明度全对比 - 科技焦点
  • Freeplane思维导图模板:从零到专业级视觉设计的完整实战指南
  • 免费音乐解锁工具终极指南:3分钟学会解除QQ音乐、网易云加密限制
  • 2026上海餐厅综合星级排名|全品类权威榜单全覆盖 - charlieruizvin
  • 2026合肥情绪纪实写真十大推荐,细腻抓拍,拍出专属故事画面感 - 博客万
  • AI生成的代码会“说谎”?揭秘那些看似完美实则危险的逻辑陷阱 —— 开发者必须警惕的AI代码幻觉与防御策略
  • 2026沈阳贴车衣口碑TOP5排行,哪些汽车贴膜店口碑靠谱? - 资讯焦点
  • 如何5分钟搞定Godot游戏资源提取:PCK解包终极指南
  • 2026 驻马店财税公司代理记账、财务外包、财务托管靠谱测评,注册公司、财税合规、经营账、企业所得税汇算口碑优选排行 - 品牌智鉴榜
  • C语言结构体极简教程:重点吃透内存对齐
  • 如何快速掌握Joy-Con Toolkit:专业用户的完整配色定制指南
  • 自动驾驶数字孪生框架ADDT:安全验证与故障模拟
  • 水鬼走时突然不准?先别急着送修,揭秘无锡劳力士3135机芯保养背后的五个真相,附全国门店实拍 - 亨得利官方维修中心
  • C++ STL 容器完全指南(三):deque、list 与 map 深度详解