紫枫术河 imx6 uboot的mtd分区总结(rootfs为ubi文件系统) imx6 uboot的mtd分区总结(rootfs为ubi文件系统)

2023-10-31

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_29729577/article/details/51130209

此文章基于U-Boot 2014.04版本,烧写工具为mfgtool,开发环境为yocto

 

前言:

JFFS2、YAFFS2等专用文件系统存在着一些技术瓶颈,如:内存消耗大,对FLASH容量、文件系统大小、内容、访问模式等的线性依赖,损益均衡能力差或过渡损益   等。在此背景下内核加入了UBI文件系统的支持

与JFFS2一样,UBIFS 建构于MTD设备之上,仅适用于裸flash设备,并不适用于eMMC,SD等设备

UBI是一种类似于LVM的逻辑卷管理层。主要实现损益均衡,逻辑擦除块、卷管理,坏块管理等。而UBIFS是一种基于UBI的FLASH日志文件系统

1.内核配置

在make menuconfig中选中:

Device Drivers  ---> Memory Technology Device (MTD) support  ---> Command line partition table parsing

Device Drivers → Memory Technology Device (MTD) support →Enable UBI - Unsorted block images

File systems → Miscellaneous filesystems→UBIFS file system support

我是通过uboot的内核命令行给MTD层传递MTD分区信息,在内核中无需进行mtd分区配置,只需修改uboot源码及环境变量参数即可,但要确保源码中分区信息和环境变量的分区信息一致

 

2.uboot源码修改

在uboot源码目录中,include/conifgs/mx6<custom>.h文件(mx6<custom>.h为自定义板级文件的头文件)中找到:

#define CONFIG_MFG_NAND_PARTITION 

修改为"mtdparts=gpmi-nand:8m(boot),2m(env),8m(kernel),1m(dtb),-(rootfs)"

其中gpmi-nand为mtd-id,要与平台flash的mtd-id一致才行,后面为我的分区,仅供参考

 

我的mx6<custom>.h文件还包含了include/configs/mx6sabre_common.h文件,在其中找到:

#define CONFIG_EXTRA_ENV_SETTINGS

将其修改为如下内容:

#define CONFIG_EXTRA_ENV_SETTINGS \
    CONFIG_MFG_ENV_SETTINGS \
    "fdt_addr=0x18000000\0" \
    "fdt_high=0xffffffff\0"      \
    "bootargs=console=" CONFIG_CONSOLE_DEV ",115200 ubi.mtd=4 "  \
        "root=ubi0:rootfs rootfstype=ubifs "             \
        "mtdparts=gpmi-nand:8m(boot),2m(env),8m(kernel),1m(dtb),-(rootfs) "\
        CONFIG_SYS_VIDEO "\0" \
    "bootcmd=nand read ${loadaddr} 0xA00000 0x800000;"\
        "nand read ${fdt_addr} 0x1200000 0x100000;"\
        "bootz ${loadaddr} - ${fdt_addr}\0"

 

主要是对bootargs进行配置:

由于mtd0~4依次为boot,env,kernel,dtb和rootfs,因此ubi.mtd=4(这是rootfs的mtd分区号);

root=ubi0:rootfs中,rootfs为ubi0分区的分区名,后面ubi分区时会进行命名,两者保持一致即可;

rootfstype文件系统类型为ubifs;

mtdparts这个应该和CONFIG_MFG_NAND_PARTITION一致

 

3.mfgtool烧写工具修改

mfgtool主要修改cfg.ini配置文件和uxl2.xml文件,具体语法可以参考官方文档

 

cfg.ini文件如下:

[profiles]
chip = Linux

[platform]
board = SabreSD

[LIST]
name = Custom-NAND

[variable]
board = Custom
part_uboot = 0
part_kernel = 1
part_dtb = 2
part_rootfs = 3

其中Custom为自己定义的目标板名称,part_*为各个mtd分区号

 

uxl2.xml文件应该给出了Nand烧写的demo,只需在它的基础上进行修改即可:

将LIST name 改成Custom-NAND

BootStrap部分不赘述了;

uboot和kernel烧写部分沿用demo,只需修改烧写文件名及mtd分区名即可,也省略了。。

重点分析一下rootfs的ubi分区及烧写:

   <CMD state="Updater" type="push" body="$ flash_erase /dev/mtd%part_rootfs% 0 0">Erasing rootfs partition</CMD>
    <CMD state="Updater" type="push" body="$ ubiformat /dev/mtd%part_rootfs%"/>
    <CMD state="Updater" type="push" body="$ ubiattach /dev/ubi_ctrl -m %part_rootfs%">Attaching UBI partition</CMD>
    <CMD state="Updater" type="push" body="$ ubimkvol /dev/ubi0 -Nrootfs -m"/>
    <CMD state="Updater" type="push" body="$ mkdir -p /mnt/mtd%part_rootfs%"/>
    <CMD state="Updater" type="push" body="$ mount -t ubifs ubi0:rootfs /mnt/mtd%part_rootfs%"/>
    <CMD state="Updater" type="push" body="pipe tar -jxv -C /mnt/mtd%part_rootfs%" file="files/Custom-imx6q.rootfs.tar.bz2">Sending and writting rootfs</CMD>
    <CMD state="Updater" type="push" body="frf">Finishing rootfs write</CMD>
    <CMD state="Updater" type="push" body="$ umount /mnt/mtd%part_rootfs%">Unmounting rootfs partition</CMD>

    <CMD state="Updater" type="push" body="$ echo Update Complete!">Done</CMD>

以上为rootfs的分区及烧写,下面说明一下ubi工具的使用:

ubiformat /dev/mtdN是对mtd分区格式化

ubiattach是对指定mtd分区进行attach,-m 后加上分区号即可,这会生成/dev/ubi0的设备文件,若再进行attach,则按顺序生成/dev/ubi1, /dev/ubi2等等。。。

ubimkvol是在指定的/dev/ubiN上进行ubi分区,即make volume,-N后为分区名,此处指定为rootfs,与上文中bootargs中指定的ubi0:rootfs要保持一致,-m 为指定大小为max(ubiN全部分区大小),也可以使用 -s  500MiB来指定你所需要的大小(单位是MiB或KiB),如果空间足够,可以再ubiN上进行多个volume的分区,访问时只需按照分区名挂载即可

mount -t ubifs ubi0:rootfs /mnt/... 就是按照ubi的分区名进行挂载ubi分区

 

ubi分区总结:

ubiN分区中,N对应某一个mtd分区,需要attach来动态的再/dev下生成,在这个mtd分区基础上,还能使用ubimkvol按照分区名再次进行多个ubi的volume分区,访问时按照ubiN:name的格式进行挂载即可

 

注意:

在mtd分区上进行ubi分区后,用ubinfo /dev/ubiN命令会发现实际的ubi分区大小会比mtd分区小一些,这是因为ubi的存储管理是将其逻辑擦除块(LEB)映射到物理擦除块(PEB),在这个过程中需要使用一部分存储空间来进行管理,所以实际我们使用的存储空间会比mtd的大小要小一些。

此外,若mtd分区太小,将可能没有足够空间来进行ubi分区,本人经过尝试,40M的mtd空间可以提供约17M的ubi分区,然而20M的mtd空间则无法进行ubi分区(ubinfo查看会提示无可提供的逻辑擦除块)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

紫枫术河 imx6 uboot的mtd分区总结(rootfs为ubi文件系统) imx6 uboot的mtd分区总结(rootfs为ubi文件系统) 的相关文章

  • uboot配置和编译过程详解-2.4.uboot和系统移植第4部分-朱有鹏-专题视频课程

    uboot配置和编译过程详解 2 4 uboot和系统移植第4部分 4163人已学习 课程介绍 本课程为uboot学习的第四部分 xff0c 主要目标是详细分析和介绍uboot的主makefile和配置脚本mkconfig 本部分学习的目的
  • uboot源码分析之start.S解析

    1 start S引入 1 1 u boot lds中找到start S入口 1 在uboot中因为有汇编阶段参与 xff0c 因此不能直接找main c 整个程序的入口取决于链接脚本中ENTRY声明的地方 ENTRY start 因此 s
  • uboot移植Linux-SD驱动代码解析

    一 uboot与linux驱动 1 1 uboot本身是裸机程序 1 狭义的驱动概念是指 xff1a 操作系统中用来具体操控硬件的代码叫驱动 广义的驱动概念是指 xff1a 凡是操控硬件的代码都叫驱动 2 裸机程序中是直接使用寄存器的物理地
  • 最新uboot的Kbuild系统 3 .config的生成

    前面的工作产生了一个conf 关键点是由conf产生 config的过程 最后是通过执行 scripts kconfig conf defconfig 61 arch configs rpi defconfig Kconfig 生成的 Kc
  • uboot编译报错解决

    uboot编译报错 root ubuntu home gjt uboot u boot 2015 01 make scripts kconfig conf silentoldconfig Kconfig scripts kconfig co
  • uboot 中内存测试,内存检测方法

    DDR内存子系统常见硬件错误及Uboot中检测流程 在 U Boot中 Denx U Boot的开发商 针对常见的DDR内存故障进行了严格的检测处理 下图描述了该检测处理过程的三个步骤 检测数据线 地址线和DDR物理存储部件 主要涉及这三个
  • 嵌入式开发(S5PV210)——u-boot的不同来源和目录结构

    1 u boot的不同来源和联系 uboot的来源大致有三个途径 uboot官网下载 Soc厂商提供 开发板厂商提供 假设某个厂商推出新的Soc Soc厂商的工程师会去uboot的官网下载uboot 然后把此款Soc的开发板的uboot移植
  • u-boot常用命令

    u boot常用命令 查看u boot所支持的命令 查询命令 u boot版本 环境变量 板子相关信息 环境变量操作 内存操作 网络操作 EMMC和 SD卡操作 FAT 格式文件系统操作 EXT格式文件系统操作 ubi格式文件系统操作 bo
  • uboot分析:uboot的启动过程分析

    uboot分析 uboot的启动过程分析 目录 1 U Boot启动过程概述 2 U Boot启动代码具体分析 2 1 第一阶段 ubootcpu s5pc11x start S 2 2 第二阶段 uboot lib arm board c
  • pinctrl和gpio子系统

    一 pinctrl子系统简介 Linux驱动讲究驱动分离与分层 pinctrl和gpio子系统就是驱动分离与分层思想下的产物 pinctrl子系统主要工作内容如下 获取设备树中的pin信息 根据获取到的pin信息来设置pin的复用功能 根据
  • 交叉编译工具链中GUN常用命令简介

    一 交叉编译工具链前缀 arm none linux gnueabi 二 常用命令 注 此处以汇编点亮led灯代码为例 重点掌握 1 gcc 编译命令 arm none linux gnueabi gcc c S或 c o o eg arm
  • BootLoader介绍

    文章目录 一 BootLoader的引入 二 BootLoader的启动方式 三 BootLoader的结构和启动过程 四 自己写一个BootLoader 1 BootLoader第一阶段 2 BootLoader第二阶段 一 BootLo
  • 高合汽车旗下可进化超跑SUV高合HiPhi X亮相海口国际新能源车展

    2021年1月8日 高端新能源智能出行品牌高合汽车旗下高合HiPhi X亮相第三届海口国际新能源汽车展览会 华人运通高合汽车创始人丁磊在现场透露 上市至今高合HiPhi X限量3000辆创始版车型即将预订售罄 累计收获了32000多位留资用
  • uboot联网以及uboot重启问题

    一 配置uboot联网 虚拟机联网 配置uboot联网 1 配置uboot环境变量 setenv ipaddr 192 168 10 50 开发板ip地址 setenv ethaddr 00 04 9f 04 d2 35 mcu期间地址 多
  • U-Boot顶层Makefile详解

    文章目录 一 U Boot工程目录分析 1 打包编译好的uboot 2 目录介绍 1 arch 2 board 3 configs 4 Makefile 5 config 6 README 二 VSCode工程创建 1 新建工程 2 屏蔽不
  • Linux下uboot编译出错(/bin/bash: arm-none-linux-gnueabi-gcc: command not found )

    unboot压缩包解压 tar xz 在终端进入解压目录 xz d tar xz tar xvf tar 向Makefile添加编译路径 在makefile的开头添加本机的编译路径 ARCH arm CROSS COMPILE opt fs
  • 如何在U-Boot和Linux内核中添加自定义的ATAG变量?

    我要添加定制atagU Boot 和 Linux 内核中的变量 我怎样才能做到这一点 有没有什么程序可以添加ATAG变量在U Boot and Linux 最新的 Linux 内核正试图废弃ATAGS with 设备树 但是 那setup
  • 如何从 U-Boot 启动裸板二进制文件?

    我们如何从 U Boot 启动独立的裸板二进制文件 不是使用 U Boot 环境运行的独立二进制文件 而不是 Linux 内核 我的要求是使用我的二进制文件重新初始化主板和驱动程序 我可以用我的二进制文件替换启动介质 此处为 NOR 闪存
  • 在u-boot中,kernel_entry指向哪个函数?

    这是 u boot 的函数 static void boot jump linux bootm headers t images int flag ifdef CONFIG ARM64 void kernel entry void fdt
  • 如何在uboot中制作“if”和比较语句?

    我是 uboot 和 tftp 编程的新手 基于this url http www denx de wiki view DULG CommandLineParsing 有如何制作if像这样的声明if imi addr then echo I

随机推荐

  • https 状态码

    HTTP状态码 类别 原因短语 1 Information 信息性状态码 接受的请求正在处理 2 Success 成功状态码 请求正常处理完毕 3 Redirection 重定向状态码 需要进行附加操作已完成请求 4 Client Erro
  • 基于CentOS7.9安装部署docker(简洁版)

    安装部署 1基于官方脚本安装 不推荐 不能自行选择版本 官方文档 https docs docker com engine install centos 2 使用yum安装 阿里云文档 docker ce镜像 docker ce下载地址 d
  • The 19th Zhejiang Provincial Collegiate Programming Contest(部分题解)

    在完成三道签到之后 分别对图论 前缀 二分 大模拟上面取得突破点 但其他题集没能得到突破 仍需多加练习 A JB热爱数学 题意 给定两个数 a b 求出让a变成b的最少次数 能修改a的值为加上一个奇数 和 减去一个偶数 类型 思维题 分析各
  • vscode ssh远程输入密码之后无反应,一直提示输入密码

    用vscode进行远程服务器连接时 一直要输入密码 不断重复 始终无法链接 参考 https blog csdn net qq 33854260 article details 111255004 方法 点击view下的 command p
  • js网页模拟野火燃烧蔓延效果

    野火通过燃床蔓延是自然界的一个复杂现象 本文综述了为认识这一现象所作的研究工作 包括分析各种理化机制及通过基本物理规律构造数学模型 现有的数学模型可分为统计模型 经验模型和物理模型三类 本文着重以统一的观点评述了近五十年来所建立的各种物理模
  • 上传文件时候的accept限制文件类型.jpg、.gif、jpeg、.png、.doc、.docx、.txt、.xls、.xlsx等

    常用的 jpg image jpeg gif image gif jpeg image jpeg png image png doc application msword docx application vnd openxmlformat
  • node nginx mysql在linux的安装

    系统环境使用的阿里云ECS的CentOS 8 5 64位 nginx的安装 打开Terminal 输入以下命令安装Nginx yum install nginx 输入以下命令启动Nginx nginx 安装完成后 输入以下命令将Nginx加
  • 微信的OAuth2.0的接口配置信息修改部署Nginx

    1 新建springboot项目 package com cn wx import java io PrintWriter import java util Enumeration import javax servlet http Htt
  • 算法第三期——二分法(Python)

    目录 1 二分法 1 1 引导 猜数游戏 1 1 1 猜数游戏代码 1 2 二分法的使用条件 1 3 二分法的复杂度 2 整数二分 2 1 在单调递增序列中查找x或者x的后继 求中间值的方法 代码演示 记忆 2 2 在单调递增序列中查找x或
  • Ubuntu18.04必要安装的软件

    1 更新源 找到Software Updates 将源更新为阿里云的源 在Other Software里将Canonical Partners勾上 然后自己手动更新一下 sudo apt update sudo apt upgrade 2
  • STLINK,ST-LINK Utility无法连接单片机

    STLINK ST LINK Utility无法连接单片机 keil ST LINK Utility尝试连接最小系统板 但是无法连接 网上搜了很多教程 偶然看到一位道友说他连接空板子可以 有程序的不行 不知道为什么 因为我的板子之前也下载过
  • 中断INT 0x80的作用[转自csdn blog]

    当进程执行系统调用时 先调用系统调用库中定义某个函数 该函数通常被展开成前面提到的 syscallN的形式通过INT 0x80来陷入核心 其参数也将被通过寄存器传往核心 在这一部分 我们将介绍INT 0x80的处理函数system call
  • Python 计算机视觉

    Python 计算机视觉 from PIL import Image Image是PIL中比较重要的一个 模块 im Image open F Desktop 今日须看 代码 Python master back image bmp ims
  • python画散点图、折线图

    Python 画图 散点图scatter 保存savefig 及颜色大全 python中的散点图还可以这么画 这个针对改变描点形状 一 散点图 import numpy as np import matplotlib pyplot as p
  • MySQL之锁的使用

    MySQL表级锁的锁模式 MySQL的表级锁有两种模式 表共享读锁 Table Read Lock 和表独占写锁 Table Write Lock 锁模式的兼容性 对MyISAM表的读操作 不会阻塞其他用户对同一表的读请求 但会阻塞对同一表
  • Qt 类中Q_OBJECT的作用及其程序代码体现

    Qt中类里为什么要加上Q OBJECT这个东西呢 原来这是一个Qt定义的宏 它的作用是什么呢 原来这个宏中包含了Qt中最重要的一个机制 也就是信号和槽的机制 所有的Qt程序一定会使用这个机制 下面我们可以先看一个简单的小程序 一个类似于图片
  • c++自定义sort()函数的排序方法

    1 引言 在C 中 sort 函数常常用来对容器内的元素进行排序 先来了解一下sort 函数 sort 函数有三个参数 第一个是要排序的容器的起始迭代器 第二个是要排序的容器的结束迭代器 第三个参数是排序的方法 是可选的参数 默认的排序方法
  • Spring/Spring boot中静态变量赋值

    情形1 静态变量为自动注入的对象 解决方案 设置两个变量 非静态变量使用 resource注入Bean 然后使用 PostConstruct在Spring初始化Bean成功后为静态变量赋值 Component public class XX
  • sql语句直接执行很快,java程序执行慢

    一次线上Case 一条联合查询语句 直接在sql server查询分析器执行 1秒以内 通过java程序执行很慢要7秒返回结果 贴出sql 语句 select temp id temp userId temp operationUserId
  • 紫枫术河 imx6 uboot的mtd分区总结(rootfs为ubi文件系统) imx6 uboot的mtd分区总结(rootfs为ubi文件系统)

    版权声明 本文为博主原创文章 未经博主允许不得转载 https blog csdn net qq 29729577 article details 51130209 此文章基于U Boot 2014 04版本 烧写工具为mfgtool 开发