智器文件系统分析

yaffs2 出现很多问题

 

cramfs

[zhangqing@localhost ~]$ sudo mkcramfs volume1 volume1_cramfs.img
Password:
warning: estimate of required size (upper bound) is 826MB, but maximum image size is 272MB, we might die prematurely

 

Directory data: 1356480 bytes
mkcramfs: filesystem too big

 

squashfs

sudo yum install mksqushfs*

应该是

sudo yum install squashfs*

  五、生成一个cramfs

  找到cramfs的toolchain。/mkcramfs -r $(FS1_DIR) $(FS_NAME).1

  六、生成一个mksquashfs

  找到squashfs的toolchain。/mksquashfs $(FS_DIR) $(FS_NAME) -noappend -be -lzma -no-fragments -noI

 

收藏夹

 

製做squashfs檔案系統的指令很簡單,用法大致如下

 


%mksquashfs [source] [dest]
%mksquashfs ./fs squashfs.root
文章出处:DIY部落(http://www.diybl.com/course/6_system/linux/Linuxjs/20081117/151753.html)

 

Squashfs一般存放于nor flash中,但是也可以使用Nand flash存储squashfs文件系统,但是需要绕过坏块。

 

http://blog.csdn.net/lwzlemon/archive/2009/03/27/4030463.aspx

NAND for squashfs, 主要讲怎么在内核中增加BBT。

 

有个讲squashfs的官方网站,可能在收藏夹里面。

 

http://cache.baidu.com/c?m=9d78d513d9901df918b0cf281a16a6275a13d322668391013894cd47c9221d03506790a63a73555e9496203216af3e07b6a46b6f370122bc86ca8d578eedc43f2ffe6677374fc71b46920eafbd0078d620e609b5f959bae1a62593d898d9db&p=c439c54ad2c700b307a7c7710900&user=baidu

关于在android中添加squashfs的方法。

 

可选文件系统:

1.       yaffs2

可读写

在新的nand flash上(确定没有坏块),使用最传统的

Debug kernel + flasherase_all mtd3 + tar xzvf

在启动后挂载yaffs2时仍然出现错误,怀疑是ecc的缘故。以后再试。

 

使用mkyaffs2image提示object arrays has not enough space,后换成mkfs.yaffs.x86,生成136M的镜像,但是在dnw到目标板上最后卡死。没有解决dnw下载大文件卡死的问题。已经确定不是内存不够的原因,有人说是电源不行,也已排除。

 

Squashfs

只读

最主要的是2.6.28的kernel没有squashfs的补丁。

使用mkfs.squash工具,生成squashfs的镜像,约300M,大约13比率,也是存在无法dnw的问题,此问题可以用在debug kernelflashcp –v 的方法解决,以后再试。

squashfs

sudo yum install mksqushfs*

应该是

sudo yum install squashfs*

  找到squashfstoolchain/mksquashfs $(FS_DIR) $(FS_NAME) -noappend -be -lzma -no-fragments -noI

 

 

Cramfs

只读

使用mkfs.cramfs工具,提示最大只能压缩为200M,而实际会有800M,失败。

cramfs

[zhangqing@localhost ~]$ sudo mkcramfs volume1 volume1_cramfs.img
Password:
warning: estimate of required size (upper bound) is 826MB, but maximum image size is 272MB, we might die prematurely

 

 

Ubifs

可读写

使用Debug kernel + flasherase_all mtd3 + tar xzvf 成功。

步骤如下:

4.1 armsys6410kerneldeviceàmtd-ànand选上[*]     S3C NAND Hardware ECC

4.2 制作debug kernel

armsys6410menuconfig中选择initrd.img.cpio作为ramfs,编译。烧录到sd32个扇区,配合128M ramsd bootloader

使用下面命令行

flash_eraseall /dev/mtd3

ubiattach /dev/ubi_ctrl -m 3

ubimkvol /dev/ubi0 -N rootfs -s 1500MiB

mount -t ubifs ubi0_0 /mntmount -t ubifs ubi0:rootfs /mnt

拔出原2G卡,插入4G卡,有releasetar,

Tar xzfv 0.1.2.tar.gz –C /mnt

因为根文件系统较大,解压缩需要30分钟时间。

Umount /mnt

Umount /home

4.3 烧入普通的kernel即可。

 

实际效果:

(initramfs):/# df -h
Filesystem                Size      Used Available Use% Mounted on
udev                     34.6M     12.0K     34.6M   0% /dev
ubi0_0                    1.4G    535.5M    867.1M  38% /mnt

 

使用flashcp -v和uboot下烧写ubifs.img需要注意下面一些参数:

我们的2G nand ubifs参数(在debug kernel里面获得):

Creating 4 MTD partitions on "NAND 2GiB 3,3V 8-bit":

0x00000000-0x00100000 : "bootloader"

0x00100000-0x00600000 : "recovery"

0x00600000-0x00900000 : "kernel"

0x00900000-0x80000000 : "filesystem"

UBI: attaching mtd3 to ubi0

UBI: physical eraseblock size:   262144 bytes (256 KiB)

UBI: logical eraseblock size:    258048 bytes

UBI: smallest flash I/O unit:    2048

UBI: VID header offset:          2048 (aligned 2048)

UBI: data offset:                4096

UBI: attached mtd3 to ubi0

UBI: MTD device name:            "filesystem"

UBI: MTD device size:            2039 MiB

UBI: number of good PEBs:        8156

UBI: number of bad PEBs:         0

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:             1975

UBI: total number of reserved PEBs: 6181

UBI: number of PEBs reserved for bad PEB handling: 81

UBI: max/mean erase counter: 2/1

 

Ubifs镜像烧录:

ubifs -r

-r, -d, --root=DIR       build file system from directory DIR

-m, --min-io-size=SIZE   minimum I/O unit size

-e, --leb-size=SIZE      logical erase block size

通常是physical erased block size - 一个page(对于slc成立,对于mlc不成立)

subpage必须比mini io小,必须是2n次方。

-c, --max-leb-cnt=COUNT  maximum logical erase block count

-c 是总空间比如50M除以-e得到的结果

200 * 1024 * 1024 / 258048 = 812

256 NO

512 NO

2048 NO

 

mkfs.ubifs -r root -m 2048 -e 258048 -c 812 -o ubifs.img

ubinize -o ubi.img -m 2048 -p 256KiB -s 2048 /etc/ubinize.cfg

 

/etc/ubinize.cfg

[ubifs]

mode=ubi

image=ubifs.img

vol_id=0

vol_size=200MiB

vol_type=dynamic

vol_name=rootfs

vol_flags=autoresize

这里面指定了volume size

 

 

主要实现损益均衡,逻辑擦除块、卷管理,坏块管理等。

 由于采用了压缩方式,UBI文件系统占用的空间比yaffs要小,而且避免了nand flash中OOB数据的操作,使得移植变得简单,值得推荐.

             1) 制作根文件系统,比如我们的根文件目录为rootfs
            2) 生成ubi烧写映像
                mkfs.ubifs -r rootfs -m 512 -e 15872 -c 7976 -o ubifs.img
            3) 通过UBOOT制作UBI分区
                目前最新的UBOOT已经支持UBI分区,进入UBOOT命令行

mtdparts default       //加载默认分区表

 

  1. #define MTDPARTS_DEFAULT "mtdparts=nandflash0:320k(bootloader)," /
  2.            "64k(params)," /
  3.            "3m(kernel)," /
  4.            "-(root)"

 

#define CONFIG_BOOTARGS  "ubi.mtd=2 root=ubi0:rootfs rootfstype=ubifs console=ttySAC0 mem=64M init=/linuxrc"

 

内核的下载没有什么变化,不在叙述

 

 

 

 

  1. flash erase root      //格式化分区,root为文件系统分区
  2. ubi part root          //root分区作为ubi文件系统
  3. ubi create  rootfs    //创建UBI volume
  4. ubi write  0x30008000 rootfs  0x2f8000

现在UBI分区已经创建完毕,我们可以通过tftp等手段把ubifs.img下载到RAM中, 0x30008000 为下载的地址,  0x2f8000 为 长度,文件系统烧写完成,修改uboot中的内核启动参数为

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值