Hi����ӭ����Ƕ��ʽ��ѵ�߶�Ʒ�� - ����Զ����������<�����ܲ�����>��רעǶ��ʽ����ʦ����15�꣡
��ǰλ��: > ����Զ���������� > Ƕ��ʽѧϰ > ��ʦ���� > UBI�ļ�ϵͳ���
UBI�ļ�ϵͳ���
ʱ�䣺2016-12-28���ߣ�����Զ��

��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 partition size; //��Ӧ��FLASH������С 
       flash physical eraseblock size; // FLASH����������С 
       minimum flash input/output unit size; //С��FLASH���������Ԫ��С 
       for NAND flashes - sub-page size; //����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����ʱ�IJ�������Ϣ��ȡ���磺

#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

����ϸ�Ľ��Ͳμ�http://www.linux-mtd.infradead.org/doc/ubi.html#L_overhead

#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������߼�����������
    ����������������ļ�ϵͳ����Է��ʾ��ϵ�129024*812=100M�ռ� 
    -s��С��Ӳ���������ҳ���С���磺k9f1208Ϊ256(���°�ҳ����)

���У�ubinize.cfg������Ϊ��

[ubifs]
    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 81000000 ubi.img
    reading ubi.img
    12845056 bytes read
    OMAP3 DevKit8000 # nand unlock
    device 0 whole chip
    nand_unlock: start: 00000000, length: 268435456!
    NAND flash successfully unlocked
    OMAP3 DevKit8000 # nand ecc sw
    OMAP3 DevKit8000 # nand erase 680000 7980000
    NAND erase: device 0 offset 0x680000, size 0x7980000
    Erasing at 0x7fe0000 -- 100% complete.
    OK
    OMAP3 DevKit8000 # nand write.i 81000000 680000 $(filesize)
    NAND write: device 0 offset 0x680000, size 0xc40000
    Writing data at 0x12bf800 -- 100% complete.
    12845056 bytes written: OK

��д���̺���д�ں˾���Ĺ���һ�£�����UBI�ļ�ϵͳӦ�ò���yaffs�ļ�ϵͳ�����õ���nand��OOB����

2������UBIFS�ļ�ϵͳ��Ϊ���ļ�ϵͳ����IJ���

OMAP3 DevKit8000 # setenv bootargs console=ttyS2,115200n8 ubi.mtd=4 root=ubi0:rootfs
    rootfstype=ubifs video=omapfb:mode:4.3inch_LCD
    OMAP3 DevKit8000 # setenv bootcmd nand read.i 80300000 280000 200000\;bootm 80300000

���ļ�ϵͳ��λ����MTD4��

ϵͳ���ʱ���ӡ�����º�UBI��ص���Ϣ��

Creating 5 MTD partitions on "omap2-nand":
    0x00000000-0x00080000 : "X-Loader"
    0x00080000-0x00260000 : "U-Boot"
    0x00260000-0x00280000 : "U-Boot Env"
    0x00280000-0x00680000 : "Kernel"
    0x00680000-0x08000000 : "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

��������
�����б���������۽������ѱ����˿���������������վͬ����۵��֤ʵ��������