版权声明:本文为博主原创文章,未经博主允许不得转载。 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查看会提示无可提供的逻辑擦除块)

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

  1. uboot环境下mmc操作_【记录】将Uboot 2011.06中mmc驱动移植到uboot 1.1.6的过程

    [记录]将Uboot 2011.06中mmc驱动移植到uboot 1.1.6的过程 时间:2011-8-14 作者:crifan 联系方式:green-waste (at) 163.com 附上代码: ...

  2. 【TINY4412】U-BOOT移植笔记:(9)SD卡启动U-BOOT

    [TINY4412]U-BOOT移植笔记:(9)SD卡启动U-BOOT 宿主机 : 虚拟机 Ubuntu 16.04 LTS / X64 目标板[底板]: Tiny4412SDK - 1506 目标板 ...

  3. linux设置分区读写属性,嵌入式Linux ubi文件系统制做、分区设置、只读文件系统,uboot启动参数root...

    当前平台, 基于君正的X10000平台的嵌入式Linux 系统linux 0  目的ubuntu 我要设置根文件系统为可读写, 设置data分区上的文件系统为只读学习 1 设置各文件系统的读写属性sp ...

  4. 怎么设置uboot从u盘启动linux,rt5350使用uboot从u盘启动linux成功含从u盘加载镜像与rootfs...

    <rt5350使用uboot从u盘启动linux成功含从u盘加载镜像与rootfs>由会员分享,可在线阅读,更多相关<rt5350使用uboot从u盘启动linux成功含从u盘加载镜 ...

  5. iPhone开发初试锋芒 一个简单的iPhone播放器 --紫枫凝潇烟

    早就打算开始iPhone下的应用,最近才得以闲暇正式开始,先看了一本objective-c 2.0的书,然后动手写了一个简单的播放器熟悉一下iPhone开发.上几张截图留作纪念. Xcode是主要开发 ...

  6. 全志uboot修改_全志SDK编译问题解决二:build uboot only

    SDK在lichee部分编译内核会遇到错误: ./build.sh -p a13_nuclear -m uboot编译无法通过,提示找不到工具链 解决办法是在buildroot/scripts/com ...

  7. mysql.lib 是mtd mdd_VS运行时 /MD、/MDd 和 /MT、/MTd之间的区别

    程序运行时出现问题,选择的是Release,win64位的模式,并且已经看到了宏定义NDEBUG,但是程序依然进入上面的部分 解决方案是将属性->C/C++->代码生成器->运行库里 ...

  8. [AST2600] 在uboot中透过tftp更新BMC (ast2600-evb update openbmc in uboot)

    纯笔记分享如何在uboot中透过tftp更新BMC 步骤一:先将欲烧入档案放入tftp server中 (ex. 192.168.0.1:/tftp/iris/rom.ima) 步骤二:进入uboot ...

  9. FPGA系统性学习笔记连载_Day1数字电路基础篇

    FPGA系统性学习笔记连载_Day1数字电路基础篇 连载<叁芯智能FPGA设计与研发就业班-第一天> <数字电路基础1> 原创作者:紫枫术河 转载请联系群主授权,否则追究责任 ...

最新文章

  1. SQL注入测试平台 SQLol -6.CHALLENGES挑战
  2. 郑州尚新科技--J2EE考试题
  3. SpringMVC 的执行流程
  4. android开发app初始化,Android 的 Application 初始化
  5. 千兆云路由器Dlink850L10个0Day漏洞成筛子 PoC满天飞 随便拿Root权限
  6. Verilog实现交通灯(数电课设)----------旧
  7. Codeforces Global Round 3(A-D)
  8. Nagios的安装与配置并实现飞信报警
  9. 读《微波工程(第三版)》笔记 (零:介绍)
  10. Java实现首字母转大写、小写StringUtils.capitalize
  11. linux命令查看系统日期,Linux系统查看当前时间的命令
  12. Android 9 (P) Zygote进程启动源码分析指南一
  13. 自监督学习详细介绍(学习笔记)
  14. CST STUDIO SUITE 2022 软件下载与安装教程
  15. 计算机网页设计与制作论文,网页设计与制作毕业论文
  16. rk3288 MINILOADERALL生成
  17. MAC系统操作指令汇总
  18. CTF之crpto练习三
  19. TCH值为0的block为什么也出现在X$BH中?
  20. 1024程序员节|代码改变世界,科技创造未来~ 机械工业出版社送福利,好书相赠~

热门文章

  1. 想学温州蛮话?我教你..
  2. 华为/H3C常用巡检命令
  3. java 拼音转汉字_Java通过pinyin4j实现汉字转拼音
  4. 信安学习-day15
  5. C语言实现-“洗 扑克牌”程序 算法(详解)
  6. 赛舟-体验版 α测试调试方法
  7. 苹果中国渠道裂变 揭秘郭台铭兄弟开店计划
  8. 越疆dobot机械臂_Dobot机械臂魔术师系类
  9. HTML5+CSS期末大作业:环保网站设计——环境保护(10页) 含设计报告 HTML+CSS+JavaScript 静态HTML环境保护网页制作下载 DIV+CSS环保网页设计代码
  10. RTP H264 NAL