聊城经纬激光光纤光纤激光打标机配件质量怎么样?

当前位置: →
→ Flash文件系统介绍和平台采用squashfs+ubifs原因
Flash文件系统介绍和平台采用squashfs+ubifs原因
& 作者及来源: tony7373 - 博客园 &
&收藏到→_→:
摘要: Flash文件系统介绍和平台采用squashfs+ubifs原因
"Flash文件系统介绍和平台采用squashfs+ubifs原因"::
flash文件介绍和平台采用squashfs+ubifs原因
与通用pc机不同,一般没有硬盘这样的存储设备而是使用flash闪存芯片、小型闪存卡等专为设计的存储装置。因此在 式很少使用pc上常用的文件,取而代之是根据flash其特点定制的文件。
一、常见文件简介
romfs&& 传统型的romfs文件是最常使用的一种文件,它是一种简单的、紧凑的、只读的文件,不支持动态擦写保存;它按顺序存放所有的文件数据,所以这种文件格式支持程序以xip方式运行,在运行时,可以获得可观的ram节省空间。uclinux通常采用romfs文件。
xip(executein place,即芯片内执行,指程序可以直接在flash闪存内运行,不必再把代码读到ram中。flash内执行是指norflash 不需要初始化,可以直接在flash内执行代码。但往往只执行部分代码,比如初始化ram.)&& cramfs&&&& cramfs是linux的创始人linustorvalds开发的一种可压缩只读文件在cramfs文件中,每一页被单独压缩,可以随机页访问,其压缩比高达2:1,为节省大量的flash存储空间。cramfs文件以压缩方式存储,在运行时解压缩,所以不支持程序以xip方式运行,所有的程序要求被拷到ram里去运行,但这并不代表比ramfs需求的ram空间要大一点,因为cramfs是采用分页压缩的方式存放档案,在读取档案时,不会一下子就耗用过多的内存空间,只针对目前实际读取的部分分配内存,还没有读取的部分不分配内存空间,当我们读取的档案不在内存时,cramfs文件自动计算压缩后此文来自: 马开东博客
转载请注明出处 网址:
的资料所存的位置,再即时解压缩到ram中。另外,它的速度快,效率高,其只读的特点有利于保护文件免受破坏,提高了的;但是它的只读属性同时又是它的一大缺陷,使得用户无法对其内容对进扩充。cramfs支持最大单个文件是16m。&&&& ramfs/tmpfs&&
ramfs也是linustorvalds开发的,ramfs文件把所有的文件都放在ram里运行,通常是flash用来存储一些临时性或经常要修改的数据,相对于ramdisk来说,ramfs的大小可以随着所含文件内容大小变化,不像ramdisk的大小是固定的。tmpfs是基于内存的文件,因为tmpfs驻留在ram中,所以写/读操作发生在ram中。tmpfs文件大小可随所含文件内容大小变化,使得能够最理想地使用内存;tmpfs驻留在ram,所以读和写几乎都是瞬时的。tmpfs的一个缺点是当重新引导时会丢失所有数据。
squashfs(.sfs)是一套供linux核心使用的gpl开源只读压缩文件。squashfs能够为文件内的文件、inode及目录结构进行压缩,并支持最大1024千字节的区段,以提供更大的压缩比。
squashfs的此文来自: 马开东博客
转载请注明出处 网址:
设计是专门为一般的只读文件的使用而设计,它可于数据备份,或是资源紧张的电脑上使用。标准版的squashfs采用gzip的数据压缩。
以下是squashfs文件的特点:
1.数据(data),节点(inode)和目录(directories)都被压缩。
2.保存了全部的32位uid/gids和文件的创建时间.(注: cramfs是8位,没有创建时间)。
3.支持多达4g的文件.(cramfs是16m)。
4.节点和目录都是高度压缩,而且都是存储在字节边界(packedon byte boundaries); 所有压缩的节点长度平均在8个字节左右.(具体的长度根据文件的类型是不同的.比如,普通文件,目录,符号链接,块设备和字符设备的节点的大小就不一样)。
5.squashfs可以on-the-flight:一种将许多比块size小的文件存储在一个块中,以达到更大的压缩率。同时支持big和littleendian架构.
&&& jffs2&& jffs2是redhat公司基于jffs开发的闪存文件,最初是针对redhat公司的 式产品ecos开发的 式文件,所以jffs2也可以用在linux,uclinux中。jffs文件最早是由瑞典axiscommunications公司基于linux2.0的内核为开发的文件。jffs2是一个可读写的、压缩的、日志型文件,并提供了崩溃/掉电安全保护,克服了jffs的一些缺点:使用了基于哈希表的日志节点结构,大大加快了对节点的操作速度;支持数据压缩;提供了&写平衡&支持;支持多种节点类型;提高了对闪存的利用率,降低了内存的消耗。这些特点使jffs2文件成为目前flash设备上最流行的文件格式,它的缺点就是当文件已满或接近满时,jffs2运行会变慢,这主要是因为碎片收集的问题。 yaffs&&& yaffs/yaffs2是一种和jffsx类似的闪存文件,它是专为使用nand型闪存而设计的一种日志型文件。和jffs2相比它减少了一些功能,所以速度更快,而且对内存的占用比较小。此外,yaffs自带nand芯片的 ,并且为提供了直接访问文件的api,用户可以不使用linux中的mtd与vfs,直接对文件操作。yaffs2支持大页面的nand设备,并且对大页面的nand设备做了优化。jffs2在nand闪存上表现并不稳定,更适合于nor闪存,所以相对大容量的nand闪存,yaffs是更好的选择。在此文来自: 马开东博客
转载请注明出处 网址:
具体的设计中可根据不同目录存放的内容不同以及存放的文件属性,确定使用何种文件。
无排序区块图像文件(unsortedblock image file system,ubifs)是用于固态硬盘存储设备上,并与logfs相互竞争,作为jffs2的后继文件之一。真正开始开发于2007年,并于2008年10月第一次加入稳定版本于linux核心2.6.27版。
ubifs最早在2006年由ibm与nokia的工程师thomasgleixner,artembityutskiy所设计,专门为了解决mtd(memorytechnology device)设备所遇到的瓶颈。由于nandflash容量的暴涨,yaffs等皆无法再去控制nandflash的空间。ubifs通过子ubi处理与mtddevice之间的动作。与jffs2一样,ubifs建构于mtddevice 之上,因而与一般的blockdevice不兼容。
ubifs在设计与性能上均较yaffs2、jffs2更适合mlcnand flash。[1]例如:ubifs支持write-back,其写入的数据会被cache,直到有必要写入时才写到flash,大大地降低分散小区块数量并提高i/o效率。ubifsubifs文件目录存储在flash上,ubifsmount时不需要scan整个flash的数据来重新创建文件目录。支持on-the-flight压缩文件数据,而且可选择性压缩部份文件。另外ubifs使用日志(journal),可减少对flashindex的更新频率。
jffs2运行在mtd设备之上,而ubifs则只能工作于ubivolume之上。也可以说,ubifs涉及三个子:
1. mtd 子,提供对flash芯片的访问接口,mtd子提供了mtddevice的概念,比如/dev/mtdx,mtd可以认为是rawflash
2. ubisubsystem,为flashdevice提供了wear-leveling和volume management功能;ubi工作在mtd设备之上,提供了ubivolume;ubi是mtd设备的高层次表示,对上层屏蔽了一些直接使用mtd设备需要处理的问题,比如wearing-leveling以及坏块管理。
3.ubifs文件,工作于ubi之上
以下是ubifs的一些特点:
(1)可扩展性:ubifs对flash尺寸有着很好的扩展性;也就是说mount时间,内存消耗以及i/o速度都不依赖于flash尺寸(对于内存消耗的描述并不完全准确,但是依赖性非常的低);ubifs可以很好的运行在gb级的flashe设备; 当然ubi本身还是有扩展性的问题,无论如何ubi/ubifs都比jffs2的可扩展性好,如果ubi成为瓶颈,可以改进ubi而不需改变ubifs本身。
(2)快速mount:不像jffs2,ubifs在mount阶段不需要扫描整个文件,ubifsmount的时间只是毫秒级,时间不依赖与flash的尺寸;然而ubi的初始化时间是依赖flash的尺寸的,因此必须把这个时间考虑在内。
(3)write-back支持:回写或者叫延迟写更准确些吧,同jffs2的write-through(立即写入内存)相比可以显著的提高文件的吞吐量。
(4)异常unmount适应度:ubifs是一个日志文件可以容忍突然掉电以及unclean重启;ubifs 通过replay日志来恢复uncleanunmount,在这种情况下replay会消耗一些时间,因此mount时间会稍微增加,但是replay 并不会扫描整个flash介质,所以ubifs的异常mount时间大概在几分之一秒。
(5)快速i/o- 即使我们disablewrite-back(可以在unmount时使用-osync mount选项), ubifs的性能仍然接近jffs2;记住,jffs2的同步i/o是非常惊人的,因为jffs2不需要在flash上维护indexingdata结构, 所以就没有因此而带来的负担;而ubifs恰恰是有index数据的,ubifs之所以够快是因为ubifs提交日志的方式:不是把数据从一个地方 到另外一个位置,而只是把数据的地址加到文件的index,然后选择不同的eraseblock作为新的日志块,此外还有multi-headed日志方式等技巧。
(6)on-the_flightcompression -存储在flash介质上的数据是压缩的;同时也可以灵活的针对单个文件来打开关闭压缩。例如,可能需要针对某个特定的文件打开压缩;或者可能缺省方式下支持压缩,但是对文件则关闭压缩。
(7)可恢复性- ubifs可以从index破坏后恢复;ubifs中的每一片信息都用一个header来描述,因此可以通过扫描整个flash介质来重构文件,这点和jffs2非常类似。想像一下,如果你擦除了fat文件的fat表,对于fat文件是致命的错误,但是如果擦除ubifs的index,你仍然可以重构文件,当然这需要使用一个用户空间程序来做恢复
(8)完整性-ubifs通过把checksum写到flash介质上来保证数据的完整性,ubifs不会无视损坏的文件数据或meta-data;缺省的情况,ubifs仅仅检查meta-data的crc,但是你可以通过mount选项,强制进行datacrc的检查。
二、目前我们andorid项目上可选的文件
对于nandflash适合用的文件 有cramfssquashfs yaffs/yaffs2 ubifs。
cramfssquash是只读性质的文件,有利于保护文件不受损坏,但无法对其文件进行改变,不利于测试时文件的替换与更改以及升级时候的增量升级。
对于slc:一般用cramfs+yaffs.很多项目都有用,经的起验证的。ubifs最近才流行的文件,在slc上博通和我们都做过验证,没有发现什么问题。
对于大容量的搜索此文相关文章: 文件介绍和平台采用squashfs+ubifs原因此文来自: 马开东博客
网址: 站长QQ
Flash文件系统介绍和平台采用squashfs+ubifs原因_博客园相关文章
博客园_总排行榜
博客园_最新
博客园_月排行榜
博客园_周排行榜
博客园_日排行榜博客访问: 109896
博文数量: 31
博客积分: 197
博客等级: 入伍新兵
技术积分: 291
注册时间:
IT168企业级官微
微信号:IT168qiye
系统架构师大会
微信号:SACC2013
原文地址: 作者:
&&&&&总的来分,Linux文件系统分为两类,基于Flash和基于RAM的文件系统。两者的特点是,基于Flash的文件系统是掉电可保存的,但对于RAM的文件系统掉电是会丢失的。
&&&& 一、基于Flash的日志型的文件系统
&&&& 1、只读的CramFS文件系统简介
&&&&&CramFS是一个压缩式的文件系统,它并不需要一次性的将文件系统中的所有内容都解压缩到内存之中,而是在系统需要访问某个位置的数据时,首先计算出该数据在CramFS文件系统中的位置,将这段数据实时地解压缩到内存中,而不是所有的数据。
&&&& A、特点:
&&&& a. 采用实时解压缩方式;
&&&& b. CramFS的数据都是经过处理、打包之后的,所以其通常不支持写操作(通常tmp目录是可以写的,这个目录应该是默认挂载成了RamFS),这个特性刚好适合嵌入式应用中ROM类型的只读存储设备使用;
&&&& c. 在CramFS中的文件大小不能超过16MB;
&&&& (根据网友 的提醒,源码之中是可以修改这个大小的cramfs_fs.h
&&&&&& #define CRAMFS_MODE_WIDTH 16)
&&&& d. 当前版本的CramFS只支持PAGE_CACHE_SIZE为4096的内核,因此要特别注意内核的配置。
&&&& B、制作方法
&&&& 准备好一个根文件系统rootfs,利用工具mkcramfs生成镜像文件cram.img(本文环境为ubuntu10.04,有些镜像制作工具如果没有的话,可以自行安装)
$mkfs.cramfs /rootfs cram.img
可以挂载测试一下,采用虚拟的loopback的块设备
$mount -o loop -t cramfs /cram.img /mnt
查看一下,是否有/rootfs中的例如bin、sbin、usr等目录
可以将其下载到nand MTD的root分区,设置好uboot的启动参数,例如
$set bootargs noinitrd root=/dev/mtdblock4 console=ttyS0,115200 rootfstype=cramfs mem=64mb&
并且特别注意内核配置时要选上
File systems& ---&[*] Miscellaneous filesystems& ---& &*&&& Compressed ROM file system support (cramfs)
以支持cramfs文件系统,同时还应该将MTD相关的块设备和分区选上,那么,系统正常挂载cramfs之后会出现
VFS: Mounted root (cramfs filesystem) readonly.
&&&& 2、基于NAND Flash的yaffs文件系统简介
&&&& yaffs文件系统是专门为NAND Flash设计的文件系统,是一种日志型的文件系统。
&&&& A、特点:
&&&& a. 源码公开,具有很好的移植性,可以在Linux、uClinux和WinCE等平台运行,甚至于没有操作系统的环境也能够使用;
&&&& b. yaffs利用NAND闪存提供的每个页面16字节的备用空间类存放ECC和文件系统的组织信息,能够实现错误检测和坏块处理;
&&&& c. 对于小页面(512B+16B/页)通常采用yaffs,而对于大页面(2KB+64B/页)或者总量超过512MB的NAND Flash则采用yaffs2。
&&&& B、制作
&&&& 关于yaffs镜像的制作工具应该根据具体的NAND flash的页大小有所区分
$mkyaffsimage /rootfs yaffs.img
&&&& C、使用
&&&& 烧写yaffs镜像到NAND分区也是很有讲究的,因为该镜像的文件里面除了以512字节为单位的一个页面的数据外,还有16字节的NAND Flash备份数据,应该如以下方法烧写
DNW下载镜像 //注意下载地址
$nand erase 0xx3E000000
$nand write.yaffs 0xx2000000 $(filesize)
可以有两种方法使用,在uboot启动参数的时候就指定好根文件系统采用yaffs(从延长nand寿命角度和运行速度来讲不赞同这么使用)
$set bootargs root=/dev/mtdblock2 console=ttyS0,115200 rootfstype=yaffs mem=208mb
或者采用其他文件系统(如cramfs、ramdisk、initramfs或者tmpfs等)作为根文件系统,在系统和根文件系统起来之后,在运行
$mount -t yaffs /dev/mtdblock3 /mnt
在/mnt目录下建一个文件
$touch /mnt/test
卸载之后重新挂载该文件系统
$umount /mnt
$mount -t yaffs /dev/mtdblock3 /mnt
在看一下刚才的test文件还是存在的
或者建一个专门的system目录,以用作QT等较大型的图形界面的镜像的挂载点。&&&& 3、基于NOR Flash的jffs文件系统简介
&&&& JFFS日志闪存文件系统最早是由瑞典Axis Communications公司基于Linux 2.0的内核未嵌入式系统开发的文件系统。JFFS2是RedHat公司基于JFFS开发的闪存文件系统。JFFS基于MTD驱动层,主要用于NOR型闪存。JFFS3还处于设计阶段,主要为了解决JFFS2的不可扩展性,其设计目标是支持大容量闪存(&1TB)的文件系统。
&&&& A、特点:
&&&& a. 可读写;
&&&& b. 支持数据压缩(YAFFS不支持压缩,适合存储容量较大的文件系统);
&&&& c. 基于哈希表的日志型文件系统;
&&&& d. 提供了崩溃/掉电安全保护;
&&&& e. 提供“写平衡”支持等;
&&&&&B、制作和使用
$mkfs.jffs2 -d /rootfs -o jffs2.img
在ubuntu上直接挂载测试
$mount -t jffs2 jffs2.img /mnt -o loop
能正确显示之前准备的根文件系统,则说明制作成功。
&&&& 4、UBI/UBIFS文件系统简介
&&&& UBIFS是由Thomas Gleixner,Artem Bityutskiy等人于2006发起的,致力于开发性能卓越、扩展性高的Flash专用文件系统。UBI是一种类似于LVM的逻辑卷管理层,主要实现损益均衡,逻辑擦除块、卷管理和坏块管理等,而UBIFS则是基于UBI的Flash日志文件系统。UBI并不直接工作于MTD之上而是工作于UBI卷之上,这是它与JFFS2、YAFFS2的一个显著区别。
&&&& 使用UBIFS时,内核选项配置
Device Drivers ---&
&&&*& Memory Technology Device (MTD) support ---&
&&&&UBI - Unsorted block images ---&
&&&&&&*& Enable UBI
&&&&&&*& MTD devices emulation driver (gluebi)
File systems ---&
&&[*] Miscellaneous filesystems ---&
&&&&&*& UBIFS file system support
&&&& 在ubuntu上使用mtd-utils制作UBI镜像,例如
$mkfs.ubifs -r rootfs -m 2048 -e 129024 -c 4096 -o ubifs.img
$ubinize -o ubi.img -m 2048 -s 512 -p 128KiB ubifs.conf
&&&& 关于ubifs文件系统的相关知识,可以参考
&&&& &UBI镜像制作
&&&& &UBI的学习使用
&&&& &让uboot支持ubi&&&& 这些文章对uboot和内核中如何烧写和支持ubifs给出了详细的描述,引用之,在此谢过。
相关参考:
《ARM嵌入式Linux系统开发技术详解》杨水清等
《LINUX设备驱动开发详解》宋宝华等
阅读(2469) | 评论(0) | 转发(0) |
相关热门文章
给主人留下些什么吧!~~
请登录后评论。8464人阅读
linux开发环境搭建(3)
转自http://blog.csdn.net/wuxiwang/article/details/6431361
在linux-2.6.27以前,谈到Flash文件系统,大家很多时候多会想到cramfs、jffs2、yaffs2等文件系统。它们也都是基于文件系统+mtd+flash设备的架构。linux-2.6.27后,内核加入了一种新型的flash文件系统UBI(Unsorted Block Images)。这里简单介绍下UBI文件系统加入的原因,及使用方法。我也是刚接触到这个文件系统,可能有理解不对的地方,也请指正。
一、产生的背景
FLASH具有的“先擦除再写入”、坏块、“有限的读写次数”等特性,目前管理FLASH的方法主要有:
1、采用MTD+FTL/NFTL(flash 转换层/nand flash转换层)+ 传统文件系统,如:FAT、ext2等。FTL/NFTL的使用就是针对FLASH的特有属性,通过软件的方式来实现日志管理、坏块管理、损益均衡等技术。但实践证明,由于知识产权、效率等各方面因素导致本方案有一定的局限性。
2、采用硬件翻译层+传统文件系统的方案。这种方法被很多存储卡产品采用,如:SD卡、U盘等。这种方案对于一些产品来说,成本较高。
3、采用MTD+ FLASH专用文件系统,如JFFS1/2,YAFFS1/2等。它们大大提高了FLASH的管理能力,并被广泛应用。
JFFS2、YAFFS2等专用文件系统也存在着一些技术瓶颈,如:内存消耗大,对FLASH容量、文件系统大小、内容、访问模式等的线性依赖,损益均衡能力差或过渡损益等。在此背景下内核加入了UBI文件系统的支持。
环境:omap3530处理器、 (128MByte 16 位NAND Flash) 、linnux-2.6.28内核
1、配置内核支持UBIFS
&& Device Drivers& ---&Memory Technology Device (MTD) support& ---&UBI - Unsorted block images& ---&Enable UBI
&&&&&& 配置mtd支持UBI接口
&&&&&& File systems& ---&Miscellaneous filesystems& ---&UBIFS file system support
&&&&&& 配置内核支持UBIFS文件系统
2、将一个MTD分区4挂载为UBIFS格式
&& ● flash_eraseall /dev/mtd4 //擦除mtd4
&&&&&& ● ubiattach /dev/ubi_ctrl -m 4 //和mtd4关联
&&&&&& ● ubimkvol /dev/ubi0 -N rootfs -s 100MiB //设定volume 大小(不是固定值,可以用工具改变)及名称
&&&&&& ● mount -t ubifs ubi0_0 /mnt/ubi或mount -t ubifs ubi0:rootfs /mnt/ubi
3、制作UBIFS文件系统
在制作UBI镜像时,需要首先确定以下几个参数:
&& MTD //对应的FLASH分区大小
&&&&&& flash phys // FLASH物理擦除块大小
&&&&&& minimum flash input/ //最小的FLASH输入输出单元大小
&&&&&& for NAND flashes - sub- //对于nand flash来说,子页大小
&&&&&& logical eraseblock size.//逻辑擦除块大小
参数可以由几种方式得到
1)如果使用的是2.6.30以后的内核,这些信息可以通过工具从内核获得,如:mtdinfo –u。
2)之前的内核可以通过以下方法:
&& ● MTD partition size:从内核的分区表或cat /proc/mtd获得
&&&&&& ● flash physical eraseblock size:从flash芯片手册中可以得到FLASH物理擦除块大小,或cat /proc/mtd
&&&&&& ● minimum flash input/output unit size:
&&&&&&&&&& 1)nor flash:通常是1个字节
&&&&&&&&&& 2)nand falsh:一个页面
&&&&&& ● sub-page size:通过flash手册获得
&&&&&& ● logical eraseblock size:对于有子页的NAND FLASH来说,等于“物理擦除块大小-1页的大小”
3)也可以通过ubi和mtd连接时的产生的信息获取,如:
#modprobe ubi mtd=4 //ubi作为模块加载
#ubiattach /dev/ubi_ctrl -m 4 //通过ubiattach关联MTD
&&& UBI: attaching mtd4 to ubi0
&&& UBI: physical eraseblock size: 131072 bytes (128 KiB)
&&& UBI: logical eraseblock size: 129024 bytes
&&& UBI: smallest flash I/O unit: 2048
&&& UBI: sub-page size: 512
&&& UBI: VID header offset: 512 (aligned 512)
&&& UBI: data offset: 2048
&&& UBI: attached mtd4 to ubi0
更详细的解释参见
#mkfs.ubifs -r rootfs -m 2048 -e 129024 -c 812 -o ubifs.img
&&& #ubinize -o ubi.img -m 2048 -p 128KiB -s 512 /home/lht/omap3530/tools/ubinize.cfg
-r:制定文件内容的位置
&&& -m:页面大小
&&& -e:逻辑擦除块大小
&&& -p:物理擦除块大小
&&& -c:最大的逻辑擦除块数量
&&& 对我们这种情况,文件系统最多可以访问卷上的=100M空间
&&& -s:最小的硬件输入输出页面大小,如:k9f(上下半页访问)
其中,ubinize.cfg的内容为:
&&& mode=ubi
&&& image=ubifs.img
&&& vol_id=0
&&& vol_size=100MiB
&&& vol_type=dynamic
&&& vol_name=rootfs
&&& vol_flags=autoresize
4、利用uboot烧写、启动UBIFS镜像
1)烧写UBIFS镜像
OMAP3 DevKit8000 # mmcinit
&&& OMAP3 DevKit8000 # fatload mmc 0:1
&&& reading ubi.img
bytes read
&&& OMAP3 DevKit8000 # nand unlock
&&& device 0 whole chip
&&& nand_unlock: start: , length: !
&&& NAND flash successfully unlocked
&&& OMAP3 DevKit8000 # nand ecc sw
&&& OMAP3 DevKit8000 # nand erase 0000
&&& NAND erase: device 0 offset 0x680000, size 0x7980000
&&& Erasing at 0x7fe0000 -- 100% complete.
&&& OMAP3 DevKit8000 # nand write.i 000 $(filesize)
&&& NAND write: device 0 offset 0x680000, size 0xc40000
&&& Writing data at 0x12bf800 -- 100% complete.
bytes written: OK
烧写过程和烧写内核镜像的过程一致,所以UBI文件系统应该不像yaffs文件系统那样用到了nand的OOB区域。
2)设置UBIFS文件系统作为根文件系统启动的参数
OMAP3 DevKit8000 # setenv bootargs console=ttyS2, ubi.mtd=4 root=ubi0:rootfs
&&& rootfstype=ubifs video=omapfb:mode:4.3inch_LCD
&&& OMAP3 DevKit8000 # setenv bootcmd nand read.i 000 200000/;bootm
根文件系统的位置在MTD4上
系统启动时会打印出如下和UBI相关的信息:
Creating 5 MTD partitions on &omap2-nand&:
&&& 0xx : &X-Loader&
&&& 0xx : &U-Boot&
&&& 0xx : &U-Boot Env&
&&& 0xx : &Kernel&
&&& 0xx : &File System&
&&& UBI: attaching mtd4 to ubi0
&&& UBI: physical eraseblock size: 131072 bytes (128 KiB)
&&& UBI: logical eraseblock size: 129024 bytes
&&& UBI: smallest flash I/O unit: 2048
&&& UBI: sub-page size: 512
&&& UBI: VID header offset: 512 (aligned 512)
&&& UBI: data offset: 2048
&&& UBI: attached mtd4 to ubi0
&&& UBI: MTD device name: &File System&
&&& UBI: MTD device size: 121 MiB
&&& UBI: number of good PEBs: 970
&&& UBI: number of bad PEBs: 2
&&& UBI: max. allowed volumes: 128
&&& UBI: wear-leveling threshold: 4096
&&& UBI: number of internal volumes: 1
&&& UBI: number of user volumes: 1
&&& UBI: available PEBs: 0
&&& UBI: total number of reserved PEBs: 970
&&& UBI: number of PEBs reserved for bad PEB handling: 9
&&& UBI: max/mean erase counter: 2/0
UBIFS 文件系统的使用
一、 UBIFS 简介
&&&&& 由IBM、nokia工程师Thomas Gleixner,Artem Bityutskiy等人于2006年发起,致力于开发性能卓越、扩展性高的FLASH专用文件系统,以解决当前嵌入式环境下以FLASH作为MTD设备使用时的技术瓶颈。
UBI:一种类似于LVM的逻辑卷管理层。主要实现损益均衡,逻辑擦除块、卷管理,坏块管理等。
UBIFS:基于UBI的FLASH日志文件系统。
有关ubifs的详细介绍,请参考:
二、使用UBIFS前的准备
&&&& 1. 配置linux内核
&&&&&&&&&& 配置的时候选上
&&&&&&&&& 1)Device Drivers& ---&Memory Technology Device (MTD) support& ---&UBI - Unsorted block images& ---&Enable UBI
&&&&&&&&& 2)File systems& ---&Miscellaneous filesystems& ---&UBIFS file system support
&&&&&&&&& 这样我们的内核就支持UBIFS文件系统了
&&&& 2. UBIFS工具
&&&&&&&&& mtd-utils工具中提供了对UBIFS的支持,所以我们需要下载和编译这些工具,下载以下几个文件
&&&&&&&&& 1)下载(mtd-utils、zlib、lzo)源码
&&&&&&&&&&&&& wget
... 0080508.orig.tar.gz
&&&&&&&&&&&&& wget
&&&&&&&&&&&&& wget
&&&&&&&&&& 2)编译安装zlib
&&&&&&&&&&&&&& tar xzvf zlib-1.2.3.tar.gz
&&&&&&&&&&&&&& cd zlib-1.2.3
&&&&&&&&&&&&&& make
&&&&&&&&&&&&&& make install
&&&&&&&&&&&&&& cd ..
&&&&&&&&&&& 3)编译安装lzo
&&&&&&&&&&&&&& tar xzvf lzo-2.03.tar.gz
&&&&&&&&&&&&&& cd lzo-2.03
&&&&&&&&&&&&&& make
&&&&&&&&&&&&&& make install
&&&&&&&&&&&&&& cd ..
&&&&&&&&&&& 4)编译mtd-utils
&&&&&&&&&&&&&& tar xzvf mtd-utils_.orig.tar.gz
&&&&&&&&&&&&&& cd mtd-utils-
&&&&&&&&&&&&&& make
&&&&&&&&&&& mkfs.ubifs子目录下生成我们需要的mkfs.ubifs工具,通过这个工具我们能打包一个文件夹,生成UBIFS系统镜像
三、如何使用UBIFS
&&&&&&&&&&& 1) 制作根文件系统,比如我们的根文件目录为rootfs
&&&&&&&&&&& 2) 生成ubi烧写映像
&&&&&&&&&&&&&&& mkfs.ubifs -r rootfs -m 512 -e 15872 -c 7976 -o ubifs.img
&&&&&&&&&&& 3) 通过UBOOT制作UBI分区
&&&&&&&&&&&&&&& 目前最新的UBOOT已经支持UBI分区,进入UBOOT命令行
1.mtdparts default&&&&&& //加载默认分区表
我的分区表配置如下
1.#define MTDPARTS_DEFAULT &mtdparts=nandflash0:320k(bootloader),& /
2.&&&&&&&&&& &64k(params),& /
3.&&&&&&&&&& &3m(kernel),& /
4.&&&&&&&&&& &-(root)&
1.flash erase root&&&&& //格式化分区,root为文件系统分区
2.ubi part root&&&&&&&&& //root分区作为ubi文件系统
3.ubi create& rootfs&&& //创建UBI volume
4.ubi write& 0x rootfs& 0x2f8000
现在UBI分区已经创建完毕,我们可以通过tftp等手段把ubifs.img下载到RAM中, 0x 为下载的地址,& 0x2f8000 为 长度,文件系统烧写完成,修改uboot中的内核启动参数为
1.#define CONFIG_BOOTARGS& &ubi.mtd=2 root=ubi0:rootfs rootfstype=ubifs console=ttySAC0 mem=64M init=/linuxrc&
内核的下载没有什么变化,不在叙述,OK,工作到此结束,目前ubi文件已经移植到P1310上,工作正常。由于采用了压缩方式,UBI文件系统占用的空间比yaffs要小,而且避免了nand flash中OOB数据的操作,使得移植变得简单,值得推荐.
在SmartARM3250上使用UBIFS
& 使用UBIFS,首先需要在内核中使能MTD_UBI和UBIFS:
& 在MTD中使能UBI:
&*& Enable UBI&
& 在FS中使能UBIFS:
&*& UBIFS file system support
& 使用UBI,需要UBI的一些工具,如ubiattach ubimkvol等,这些工具都包含在教新版的mtd-utils中,我下载了mtd-utils-1.2.0.tar.bz2,其中就包含了ubi的工具,只需进行交叉编译即可。但是,交叉编译mtd-utils,需要zlib和lzo的支持,我分别下载了zlib-1.2.3.tar.gz和lzo-2.03.tar.gz,分别进行交叉编译并安装到交叉工具链中。
交叉编译zlib-1.2.3.tar.gz
& 解压后,进行配置编译即可,编译和安装命令:
CC=arm-vfp-linux-gnu-gcc ./configure --shared --prefix=/opt/nxp/gcc-4.3.2-glibc-2.7/arm-vfp-linux-gnu/
sudo make install
& 其中,因为使用普通用户,所以make install需要sudo操作。
交叉编译lzo-2.03.tar.gz
& 解压后进行配置和编译即可。
CC=arm-vfp-linux-gnu-gcc ./configure --host=arm-linux --prefix=/opt/nxp/gcc-4.3.2-glibc-2.7/arm-vfp-linux-gnu/
sudo make install
交叉编译mtd-utils-1.2.0
& 这需要修改Makefile文件。修改./Makefile,将其中的CROSS指定为:
& 8 CROSS=arm-vfp-linux-gnu-
& 9 CC := $(CROSS)gcc
& 修改./ubi-utils/Makefile文件,增加CROSS:
&11 CROSS=arm-vfp-linux-gnu-
&12 CC := $(CROSS)gcc
& 修改./ubi-utils/new-utils/Makefile文件,增加CROSS:
&12 CROSS=arm-vfp-linux-gnu-
&13 CC := $(CROSS)gcc
然后输入 make WITHOUT_XATTR=1 进行编译,编译完毕,可以得到flash_erase等工具。
再进入ubi-utils/目录,输入make,将会得到ubi的工具,将需要的工具复制添加到目标板的根文件系统中即可。我是放在rootfs/usr/bin目录下。
& 我是通过NFS启动系统的,在系统启动后操作板子的NAND FLASH分区。
[root@zlg /]# more /proc/partitions
major minor& #blocks& name
& 31&&&& 0&&&&&& 1536 mtdblock0
& 31&&&& 1&&&&&&& 256 mtdblock1
& 31&&&& 2&&&&&& 4096 mtdblock2
& 31&&&& 3&&&&& 16384 mtdblock3
& 31&&&& 4&&&& 239616 mtdblock4
& 一共有5个mtd分区,我想将mtdblock4做为ubifs分区使用。
& 先擦除FLASH 分区mtd4:
[root@zlg /]# flash_eraseall /dev/mtd4
& 然后使用ubiattach:
[root@zlg /]# ubiattach /dev/ubi_ctrl -m 4
UBI: attaching mtd4 to ubi0
UBI: physical eraseblock size:&& 131072 bytes (128 KiB)
UBI: logical eraseblock size:&&& 129024 bytes
UBI: smallest flash I/O unit:&&& 2048
UBI: sub-page size:&&&&&&&&&&&&& 512
UBI: VID header offset:&&&&&&&&& 512 (aligned 512)
UBI: data offset:&&&&&&&&&&&&&&& 2048
UBI: empty MTD device detected
UBI: create volume table (copy #1)
UBI: create volume table (copy #2)
UBI: attached mtd4 to ubi0
UBI: MTD device name:&&&&&&&&&&& &smartarm3250-rootfs&
UBI: MTD device size:&&&&&&&&&&& 234 MiB
UBI: number of good PEBs:&&&&&&& 1870
UBI: number of bad PEBs:&&&&&&&& 2
UBI: max. allowed volumes:&&&&&& 128
UBI: wear-leveling threshold:&&& 4096
UBI: number of internal volumes: 1
UBI: number of user volumes:&&&& 0
UBI: available PEBs:&&&&&&&&&&&& 1848
UBI: total number of reserved PEBs: 22
UBI: number of PEBs reserved for bad PEB handling: 18
UBI: max/mean erase counter: 0/0
UBI: background thread &ubi_bgt0d& started, PID 609
UBI device number 0, total 1870 LEBs ( bytes, 230.1 MiB), available 1848 LEBs ( bytes, 227.4 MiB), LEB size 129024 bytes (126.0 KiB)
& 提示available 1848 LEBs ( bytes, 227.4 MiB),字节可用,但是ubi工具只识别KiB MiB GiB,并且只识别整数,所以需要进行换算。
bytes = 232848KiB
& 再使用ubimkvol在ubi设备上创建ubi卷:
[root@zlg /]# ubimkvol /dev/ubi0 -N rootfs -s 232848KiB
Volume ID 0, size 1848 LEBs ( bytes, 227.4 MiB), LEB size 129024 bytes (126.0 KiB),dynamic, name &rootfs&, alignment 1
& 提示创建ubi0成功,卷名为rootfs。
& 最后挂载:
[root@zlg /]# mount -t ubifs ubi0_0 /mnt 或者
mount -t ubifs ubi0:rootfs /mnt
UBIFS: default file-system created
UBIFS: background thread &ubifs_bgt0_0& started, PID 619
UBIFS: mounted UBI device 0, volume 0, name &rootfs&
UBIFS: file system size:
bytes (231462 KiB, 226 MiB, 1837 LEBs)
UBIFS: journal size:
bytes (11592 KiB, 11 MiB, 92 LEBs)
UBIFS: default compressor: LZO
UBIFS: media format 4, latest format 4
& 挂载上之后可用df查看:
[root@zlg /]# df
Filesystem&&&&&&&&&& 1k-blocks&&&&& Used Available Use% Mounted on
rootfs&&&&&&&&&&&&&&& % /
/dev/root&&&&&&&&&&&& % /
tmpfs&&&&&&&&&&&&&&&&&&& 30636&&&&&&& 24&&&& 30612&& 0% /dev
shm&&&&&&&&&&&&&&&&&&&&& 30636&&&&&&&& 0&&&& 30636&& 0% /dev/shm
df: /mnt/rwfs: No such file or directory
ubi0:rootfs&&&&&&&&&&&& 217224&&&&&&&& 0&&& 212160&& 0% /mnt
& 使用完毕可以卸载:
[root@zlg /]# umount /mnt/
UBIFS: un-mount UBI device 0, volume 0
& 可以通过NFS启动系统,挂载ubi分区后将根文件系统解压到ubi中,然后设置参数,使用ubifs作为根文件系统,设置参数:
setenv bootargs ubi.mtd=4 root=ubi0:rootfs rootfstype=ubifs console=ttyS0,115200 mem=64M
& 启动系统即可,如下是启动信息:
U-Boot 1.3.3 (May& 5 2009 - 13:04:13)
DRAM:& 64 MB
NAND:& 256 MiB
In:&&& serial
Out:&& serial
Err:&& serial
Hit any key to stop autoboot:& 0
U-Boot$ setenv bootargs ubi.mtd=4 root=ubi0:rootfs rootfstype=ubifs console=ttyS0,115200 mem=64M
U-Boot$ ru yboot
NAND read: device 0 offset 0x200000, size 0x1b5968
Reading data from 0x3b5800 -- 100% complete.
&1792360 bytes read: OK
## Booting kernel from Legacy Image at
&& Image Name:&& Linux-2.6.27.8
&& Image Type:&& ARM Linux Kernel Image (uncompressed)
&& Data Size:&&& 1792296 Bytes =& 1.7 MB
&& Load Address:
&& Entry Point:&
&& Verifying Checksum ... OK
&& Loading Kernel Image ... OK
Starting kernel ...
Uncompressing Linux..................................................................................... done, booting the kernel.
Linux version 2.6.27.8 () (gcc version 4.3.2 (crosstool-NG-1.3.1) ) #8 PREEMPT Fri Nov 6 05:59:13 CST 2009
CPU: ARM926EJ-S [] revision 4 (ARMv5TEJ), cr=
Machine: SmartARM3250 board with the LPC3250 Microcontroller
Memory policy: ECC disabled, Data cache writeback
CPU0: D VIVT write-back cache
CPU0: I cache: 32768 bytes, associativity 4, 32 byte lines, 256 sets
CPU0: D cache: 32768 bytes, associativity 4, 32 byte lines, 256 sets
Built 1 zonelists in Zone order, mobility grouping on.& Total pages: 16256
Kernel command line: ubi.mtd=4 root=ubi0:rootfs rootfstype=ubifs console=ttyS0,115200 mem=64M
PID hash table entries: 256 (order: 8, 1024 bytes)
Console: colour dummy device 80x30
Dentry cache hash table entries: 8192 (order: 3, 32768 bytes)
Inode-cache hash table entries: 4096 (order: 2, 16384 bytes)
Memory: 64MB = 64MB total
Memory: 61096KB available (3416K code, 230K data, 112K init)
Calibrating delay loop... 103.83 BogoMIPS (lpj=519168)
Mount-cache hash table entries: 512
CPU: Testing write buffer coherency: ok
net_namespace: 288 bytes
NET: Registered protocol family 16
Invalid board descriptor!
LPC32XX DMA driver
SCSI subsystem initialized
NET: Registered protocol family 2
IP route cache hash table entries: 1024 (order: 0, 4096 bytes)
TCP established hash table entries: 2048 (order: 2, 16384 bytes)
TCP bind hash table entries: 2048 (order: 1, 8192 bytes)
TCP: Hash tables configured (established 2048 bind 2048)
TCP reno registered
NET: Registered protocol family 1
NetWinder Floating Point Emulator V0.97 (double precision)
JFFS2 version 2.2. (NAND) ?(C)
Red Hat, Inc.
yaffs Sep& 5 :41 Installing.
msgmni has been set to 119
io scheduler noop registered
io scheduler anticipatory registered
io scheduler deadline registered
io scheduler cfq registered (default)
CLCD: ZHIYUAN LCD hardware, QVGA portrait display
Console: switching to colour frame buffer device 40x30
driver4 ports, IRQ sharing disabled
serial8250.0: ttyS0 at MMIO 0x (irq = 9) is a 16550A
console [ttyS0] enabled
serial8250.0: ttyS1 at MMIO 0x (irq = 7) is a 16550A
serial8250.0: ttyS2 at MMIO 0x (irq = 8) is a 16550A
serial8250.0: ttyS3 at MMIO 0x (irq = 10) is a 16550A
lpc32xx_hsuart.0: ttyTX0 at MMIO 0x (irq = 26) is a lpc32xx_hsuart
lpc32xx_hsuart.0: ttyTX1 at MMIO 0x (irq = 25) is a lpc32xx_hsuart
lpc32xx_hsuart.0: ttyTX2 at MMIO 0x (irq = 24) is a lpc32xx_hsuart
loop: module loaded
LPC32XX_mii_bus: probed
eth0: LPC32XX mac at 0x irq 29
eth0: attached PHY driver [Generic PHY] (mii_bus:phy_addr=0:00, irq=-1)
Uniform Multi-Platform E-IDE driver
ide0 at 0xcxcxc486602e on irq 86
Driver 'sd' needs updating - please use bus_type methods
NAND device: Manufacturer ID: 0xec, Chip ID: 0xda (Samsung NAND 256MiB 3,3V 8-bit)
Scanning device for bad blocks
Bad eraseblock 0 at 0x
Bad eraseblock 1 at 0x
Bad eraseblock 2 at 0x
Bad eraseblock 152 at 0x
Bad eraseblock 571 at 0x
Bad eraseblock 1594 at 0x0c740000
Creating 5 MTD partitions on &lpc32xx_nand&:
0xx : &smartarm3250-boot&
0xx001c0000 : &smartarm3250-ubt-prms&
0xx : &smartarm3250-kernel&
0xx : &smartarm3250-safefs&
0xx : &smartarm3250-rootfs&
UBI: attaching mtd4 to ubi0
UBI: physical eraseblock size:&& 131072 bytes (128 KiB)
UBI: logical eraseblock size:&&& 129024 bytes
UBI: smallest flash I/O unit:&&& 2048
UBI: sub-page size:&&&&&&&&&&&&& 512
UBI: VID header offset:&&&&&&&&& 512 (aligned 512)
UBI: data offset:&&&&&&&&&&&&&&& 2048
UBI: attached mtd4 to ubi0
UBI: MTD device name:&&&&&&&&&&& &smartarm3250-rootfs&
UBI: MTD device size:&&&&&&&&&&& 234 MiB
UBI: number of good PEBs:&&&&&&& 1870
UBI: number of bad PEBs:&&&&&&&& 2
UBI: max. allowed volumes:&&&&&& 128
UBI: wear-leveling threshold:&&& 4096
UBI: number of internal volumes: 1
UBI: number of user volumes:&&&& 1
UBI: available PEBs:&&&&&&&&&&&& 0
UBI: total number of reserved PEBs: 1870
UBI: number of PEBs reserved for bad PEB handling: 18
UBI: max/mean erase counter: 2/1
UBI: background thread &ubi_bgt0d& started, PID 262
at25 spi0.0: 32 KByte at25256a eeprom, pagesize 64
mice: PS/2 mouse device common for all mice
input: LPC32xx Touchscreen as /class/input/input0
rtc-lpc32xx rtc-lpc32xx: rtc core: registered rtc-lpc32xx as rtc0
i2c /dev entries driver
PNX4008-WDT: PNX4008 Watchdog Timer: heartbeat 19 sec
mmci-pl18x: DMA buffer(10000 bytes), P:0x839e0000, V:0xffc1a000
mmc0: MMCI rev 0 cfg 00 at 0x8000 irq 15,13
Advanced Linux Sound Architecture Driver Version 1.0.17.
ASoC version 0.13.2
UDA1380 Audio Codec 0.6&3&i2c-adapter i2c-4: Master timed out. stat = 0000, cntrl = 0000. Resetting master...
ALSA device list:
& No soundcards found.
TCP cubic registered
NET: Registered protocol family 17
RPC: Registered udp transport module.
RPC: Registered tcp transport module.
ieee8 data/management/control stack, git-1.1.13
ieee80211: Copyright (C)
Intel Corporation &&
VFP support v0.3: implementor 41 architecture 1 part 10 variant 9 rev 1
rtc-lpc32xx rtc-lpc32xx: setting system clock to
18:46:57 UTC ()
UBIFS: mounted UBI device 0, volume 0, name &rootfs&
UBIFS: file system size:
bytes (231462 KiB, 226 MiB, 1837 LEBs)
UBIFS: journal size:
bytes (11592 KiB, 11 MiB, 92 LEBs)
UBIFS: default compressor: LZO
UBIFS: media format 4, latest format 4
VFS: Mounted root (ubifs filesystem).
Freeing init memory: 112K
UBIFS: background thread &ubifs_bgt0_0& started, PID 304
init started: BusyBox v1.11.2 ()
starting pid 306, tty '': '/etc/rc.d/rcS'
Mounting /proc and /sys
Starting the hotplug events dispatcher udevd
Synthesizing initial hotplug events
Setting the hostname to zlg
Mounting filesystems
mount: mounting usbfs on /proc/bus/usb failed: No such file or directory
Running sysctl
Setting up networking on loopback device:
Setting up networking on eth0:
Adding static route for default gateway to 192.168.7.1:
Setting nameserver to 192.168.7.1 in /etc/resolv.conf:
Starting inetd:
Starting the port mapper:
Starting the ssh server:
starting pid 605, tty '': '-/bin/sh'
[root@zlg /]#
[root@zlg /]# ls
bin&&&&& etc&&&&& linuxrc& proc&&&& sys&&&&& usr
boot&&&& home&&&& mnt&&&&& root&&&& tmp&&&&& var
dev&&&&& lib&&&&& opt&&&&& sbin&&&& ubifs
[root@zlg /]# df
Filesystem&&&&&&&&&& 1k-blocks&&&&& Used Available Use% Mounted on
rootfs&&&&&&&&&&&&&&&&& 217224&&&& 68612&&& % /
ubi0:rootfs&&&&&&&&&&&& 217224&&&& 68612&&& % /
tmpfs&&&&&&&&&&&&&&&&&&& 30636&&&&&&& 24&&&& 30612&& 0% /dev
shm&&&&&&&&&&&&&&&&&&&&& 30636&&&&&&&& 0&&&& 30636&& 0% /dev/shm
rwfs&&&&&&&&&&&&&&&&&&&&&& 512&&&&&&&& 0&&&&&& 512&& 0% /mnt/rwfs
与YAFFS2测试对比:
& 从NAND FLASH中读取和复制一个文件,同样大小,分别使用YAFFS2和UBIFS系统的对比情况:
[root@nxp mp3]# ls -la bh_48128.mp3
-rw-r--r--&&& 1 user&&&& user&&&&& 5689344 Feb 29& 2008 bh_48128.mp3
& 文件大小差不多是5M多。
& yaffs2的系统,测试时间是9秒钟:
[root@nxp mp3]# time cp bh_48128.mp3 bh_48128-2.mp3
real&&& 0m 9.28s
user&&& 0m 0.01s
sys&&&& 0m 9.26s
& ubifs系统,测试时间差不多4秒多一点。
[root@zlg mp3]# time cp bh_48128.mp3 bh_48128-2.mp3
real&&& 0m4.130s
user&&& 0m0.000s
sys&&&& 0m2.810s
从这里就可以看出UBIFS速度远比YAFFS2快。
另外,UBIFS还采用了压缩,在PC上大约110MB的rootfs,固化到UBIFS分区后大约60多MB。
UBI和UBIFS的参考链接:
ubifs轻松上路
第一、什么是ubifs?
由IBM、nokia工程师Thomas Gleixner,Artem Bityutskiy等人于2006年发起,致力于开发性能卓越、扩展性高的FLASH专用文件系统,以解决当前嵌入式环境下以FLASH作为MTD设备使用时的技术瓶颈。
UBI:一种类似于LVM的逻辑卷管理层。主要实现损益均衡,逻辑擦除块、卷管理,坏块管理等。
UBIFS:基于UBI的FLASH日志文件系统。
有关ubifs的详细介绍,请参考:
第二、为何使用ubifs?
第三、如何得到ubifs?
2.6.22以后,ubifs活跃于git管理工程中:
git://git.infradead.org/ubi-2.6.git
2.6.27以后,ubifs被整合进内核树中,用户只需下载最新内核即可获取ubifs支持。
第四、如何使用ubifs?
软件环境:
linux-2.6.28
arm-linux-gcc 3.4.5
硬件环境:
配置的时候选上
1)Device Drivers& ---&Memory Technology Device (MTD) support& ---&UBI - Unsorted block images& ---&Enable UBI
2)File systems& ---&Miscellaneous filesystems& ---&UBIFS file system support
2、mtd-utils工具(flash_eraseall、ubiattach、ubimkvol)准备
1)下载(mtd-utils、zlib、lzo)源码
2)编译安装zlib
tar xzvf zlib-1.2.3.tar.gz
cd zlib-1.2.3
CC=arm-linux-gcc ./configure --shared --prefix=/usr/local/arm/3.4.5/arm-linux
make install
3)编译安装lzo
tar xzvf lzo-2.03.tar.gz
cd lzo-2.03
CC=arm-linux-gcc ./configure --host=arm-linux --prefix=/usr/local/arm/3.4.5/arm-linux
make install
4)编译mtd-utils
tar xzvf mtd-utils_.orig.tar.gz
cd mtd-utils-
修改Makefile文件:
#CROSS=arm-linux-
修改为& CROSS=arm-linux-
BUILDDIR := $(CROSS:-=)
修改为& BUILDDIR := .
修改ubi-utils/Makefile文件:
添加&&& CROSS=arm-linux-
修改&&& ubi-utils/new-utils/Makefile文件:
添加&&& CROSS=arm-linux-
make WITHOUT_XATTR=1
ubi-utils子目录下生成我们需要的ubiattach、ubimkvol等文件(请确保是交叉编译所得)
3、mtd-utils工具(mkfs.ubifs、ubinize)准备
git-clone git://git.infradead.org/mtd-utils.git
cd mtd-utils/
mkfs.ubifs子目录下生成我们需要的mkfs.ubifs工具
ubi-utils/new-utils子目录下生成我们需要的ubinize工具
1、使用ramfs或nfs启动系统,执行以下命令挂载ubifs:
1)flash_eraseall /dev/mtd4
2)ubiattach /dev/ubi_ctrl -m 4
3)ubimkvol /dev/ubi0 -N rootfs -s 50MiB
4)mount -t ubifs ubi0_0 /mnt或mount -t ubifs ubi0:rootfs /mnt
2、如果你想使用ubifs为rootfs,把文件系统内容解压到ubifs挂载目录下,并修改内核启动参数为:
console=ttySAC0 ubi.mtd=4 root=ubi0:rootfs rootfstype=ubifs
3、如果你想直接在bootloader下烧写ubifs映像,使用以下命令制作ubi烧写映像:
mkfs.ubifs -r rootfs -m 512 -e 15872 -c 3303 -o ubifs.img
ubinize -o ubi.img -m 512 -p 16KiB -s 256 ubinize.cfg
1)以上命令的参数可从ubifs挂载信息中提取:
UBI: attaching mtd4 to ubi0&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
UBI: physical eraseblock size:&& 16384 bytes (16 KiB)&&&&&&&&&&&&&&&&&&&&&&&&&&
UBI: logical eraseblock size:&&& 15872 bytes&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
UBI: smallest flash I/O unit:&&& 512&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
UBI: sub-page size:&&&&&&&&&&&&& 256&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
UBI: VID header offset:&&&&&&&&& 256 (aligned 256)&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
UBI: data offset:&&&&&&&&&&&&&&& 512&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
UBI: attached mtd4 to ubi0&&&&&&&&&&&&&
2)配置文件ubinize.cfg的内容为:
image=ubifs.img
vol_size=50MiB
vol_type=dynamic
vol_name=rootfs
vol_flags=autoresize
&&相关文章推荐
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:138672次
积分:1578
积分:1578
排名:千里之外
原创:30篇
转载:45篇
(5)(8)(21)(4)(1)(1)(3)(1)(4)(7)(3)(17)}

我要回帖

更多关于 光纤激光打标机配件 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信