zoukankan      html  css  js  c++  java
  • Creating and Flashing UBIFS with MTD Utils

    • 1 UBIFS
    • 2 UBIFS User-space tools
    • 3 Obtaining UBIFS Tools
    • 4 Creating UBIFS
    • 5 Flashing and Mounting UBIFS to NAND

    UBIFS

    UBIFS is next generation of JFFS2 file-system.

    JFFS2 file systems works on MTD devices, UBIFS is works on UBI volumes which is on MTD devices.

    UBIFS is much more quicker than JFFS2 and nowadays people prefer UBI as filesystem.


    For more information on MTD, refer <http://www.linux-mtd.infradead.org/doc/general.html> ,on UBI refer <http://www.linux-mtd.infradead.org/doc/ubi.html> ,on UBIFS refer <http://www.linux-mtd.infradead.org/doc/ubifs.html>

    UBIFS User-space tools

    Most used UBIFS User-space tools are shown below.All All UBI tools support "-h" option and print sufficient usage information.You can use "-h" option to see help about commands.

        ubinfo        - provides information about UBI devices and volumes found in the system;
        ubiattach     - attaches MTD devices (which describe raw flash) to UBI and creates corresponding UBI devices;
        ubidetach     - detaches MTD devices from UBI devices (the opposite to what ubiattach does);
        ubimkvol      - creates UBI volumes on UBI devices;
        ubirmvol      - removes UBI volumes from UBI devices;
        ubiupdatevol  - updates UBI volumes; this tool uses the UBI volume update feature which leaves the volume in 
                       "corrupted" state if the update was interrupted; additionally, this tool may be used to wipe 
                       out UBI volumes;
        ubicrc32      - calculates CRC-32 checksum of a file with the same initial seed as UBI would use;
        ubinize       - generates UBI images;
        ubiformat     - formats empty flash, erases flash and preserves erase counters, flashes UBI images to MTD devices;
        mtdinfo       - reports information about MTD devices found in the system.
    

     

    Obtaining UBIFS Tools

    The MTD and UBI user-space tools are available from the the following git repository:

    git://git.infradead.org/mtd-utils.git

    However,we suggest you to download our pre-built mtd-utils at here

     

    Creating UBIFS

    From information on how to create a UBIFS image. refer create an UBIFS image

    • Boot from NFS.
    • You can use following command to learn parameter which is necessary for UBIFS creation.
    root@bosphorus-2:/# ./sbin_mtd/mtdinfo /dev/mtd7 -u
    mtd7
    Name:                           File System
    Type:                           nand
    Eraseblock size:                131072 bytes, 128.0 KiB
    Amount of eraseblocks:          4036 (529006592 bytes, 504.5 MiB)
    Minimum input/output unit size: 2048 bytes
    Sub-page size:                  512 bytes
    OOB size:                       64 bytes
    Character device major/minor:   90:14
    Bad blocks are allowed:         true
    Device is writable:             true
    Default UBI VID header offset:  512
    Default UBI data offset:        2048
    Default UBI LEB size:           129024 bytes, 126.0 KiB
    Maximum UBI volumes count:      128
    
    root@bosphorus-1:/# 
    

    There are two steps for creating UBIFS.

    First,

    • mkfs.ubifs

    General use of mkfs.ubifs,

    # mkfs.ubifs -r </path/to/your/rootfs/tree> -m <min io size>
      -e <LEB size> -c <Eraseblocks count>
      -o </path/to/output/ubifs.img>
    

    For Bosphorus-II,

    mtd-utils# mkfs.ubifs/mkfs.ubifs -r /your-rootfs/ -F -o ubifs.img -m 2048 -e 126976 -c 4036


    The output of the above command, ubifs.img is fed into the 'ubinize' program to wrap it into a UBI image.

    The images produced by mkfs.ubifs must be further fed to the ubinize tool to create a UBI image which must be put to the raw flash to be used a UBI partition.


    Second step,

    • Create ubinize.cfg file and write the contents into it
      mtd-utils# vi ubinize.cfg
      [ubifs]                <== Section header
      mode=ubi              <== Volume mode (other option is static)
      image=ubifs.img       <== Source image
      vol_id=0              <== Volume ID in UBI image
      vol_size=400MiB       <== Volume size
      vol_type=dynamic      <== Allow for dynamic resize
      vol_name=rootfs       <== Volume name
      vol_flags=autoresize  <== Autoresize volume at first mount
    
    
    • ubinize

    General use of ubinize,

    ubinize -o <output image> -m <min io size> -p <PEB size>KiB <configuration file>


    For Bosphorus-II,

    ./sbin_mtd/ubinize -o ubi.img -m 2048 -p 128KiB -s 512 -O 2048 ubinize.cfg

    For more information about parameter you can use "-h" option.

    Where:
    -o ubi.img
    Output file
    -m 2KiB (or 2048)
    Minimum flash I/O size of 2KiB page
    -p 128KiB

    Size of the physical eraseblock of the flash this UBI image is created for

    -O 2048 offset if the VID header from start of the physical eraseblock

    The output of the above command, 'ubi.img' is the required image.

     

    Flashing and Mounting UBIFS to NAND

    Yo can use following command to flash UBIFS.

    root@bosphorus-2:/# ./sbin_mtd/ubiformat /dev/mtd7 -f ubi.img -s 512 -O 2048
    ubiformat: mtd7 (nand), size 529006592 bytes (504.5 MiB), 4036 eraseblocks of 131072 bytes (128.0 KiB), min. I/O size 2048 bytes
    libscan: scanning eraseblock 4035 -- 100 % complete
    ubiformat: 4036 eraseblocks have valid erase counter, mean value is 1
    ubiformat: flashing eraseblock 53 -- 100 % complete
    ubiformat: formatting eraseblock 4035 -- 100 % complete
    

    Attaching UBIFS, you can use following command.If you want to mount UBIFS, firstly you should attach it.You can use ubidetach for detaching.

    root@bosphorus-2:/# ./sbin_mtd/ubiattach --vid-hdr-offset 2048 /dev/ubi_ctrl -m7
    [ 1211.819305] UBI: attaching mtd7 to ubi0
    [ 1211.823455] UBI: physical eraseblock size:   131072 bytes (128 KiB)
    [ 1211.830078] UBI: logical eraseblock size:    126976 bytes
    [ 1211.835723] UBI: smallest flash I/O unit:    2048
    [ 1211.840698] UBI: sub-page size:              512
    [ 1211.845520] UBI: VID header offset:          2048 (aligned 2048)
    [ 1211.851867] UBI: data offset:                4096
    [ 1216.159484] UBI: max. sequence number:       0
    [ 1216.197570] UBI: volume 0 ("rootfs") re-sized from 3304 to 3992 LEBs
    [ 1216.211334] UBI: attached mtd7 to ubi0
    [ 1216.215301] UBI: MTD device name:            "File System"
    [ 1216.221099] UBI: MTD device size:            504 MiB
    [ 1216.226318] UBI: number of good PEBs:        4036
    [ 1216.231262] UBI: number of bad PEBs:         0
    [ 1216.235931] UBI: number of corrupted PEBs:   0
    [ 1216.240600] UBI: max. allowed volumes:       128
    [ 1216.245452] UBI: wear-leveling threshold:    4096
    [ 1216.250396] UBI: number of internal volumes: 1
    [ 1216.255065] UBI: number of user volumes:     1
    [ 1216.259735] UBI: available PEBs:             0
    [ 1216.264404] UBI: total number of reserved PEBs: 4036
    [ 1216.269592] UBI: number of PEBs reserved for bad PEB handling: 40
    [ 1216.276000] UBI: max/mean erase counter: 4/2
    [ 1216.280487] UBI: image sequence number:  295372338
    [ 1216.285919] UBI: background thread "ubi_bgt0d" started, PID 1967
    UBI device number 0, total 4036 LEBs (512475136 bytes, 488.7 MiB), available 0 LEBs (0 bytes), LEB size 126976 bytes (124.0 KiB)
    root@bosphorus-2:/#
    

    To mount UBIFS,

    root@bosphorus-2:/# mount -t ubifs ubi0:rootfs /mnt/
    [ 1310.544067] UBIFS: start fixing up free space
    [ 1311.091491] UBIFS: free space fixup complete
    [ 1311.098175] UBIFS: mounted UBI device 0, volume 0, name "rootfs"
    [ 1311.104553] UBIFS: file system size:   505491456 bytes (493644 KiB, 482 MiB, 3981 LEBs)
    [ 1311.112945] UBIFS: journal size:       9023488 bytes (8812 KiB, 8 MiB, 72 LEBs)
    [ 1311.120635] UBIFS: media format:       w4/r0 (latest is w4/r0)
    [ 1311.126770] UBIFS: default compressor: lzo
    [ 1311.131072] UBIFS: reserved for root:  0 bytes (0 KiB)
    root@bosphorus-2:/#
    


    U-Boot Bootargs Command for UBIFS

    setenv bootargs console=ttyO0,115200  ubi.mtd=X,YYYY rootfstype=ubifs root=ubi0:rootfs rw

    Where X is the MTD partition number being used for file system and YYYY is the NAND page size.Make sure that an UBI file system is flashed into this partition before passing it as a boot partition for Linux

    Assuming mtd 5,

    setenv bootargs console=ttyO0,115200 root=ubi0:rootfs ubi.mtd =7,2048 rw rootfstype=ubifs ip=dhcp
    saveenv
    

    Note : Above steps can be done with Network File System or SD/MMC File System.

  • 相关阅读:
    OData – 权限管理
    Identity – Authorize Custom Authorization Policy Providers
    CSS – W3Schools 学习笔记 (1)
    OData – How It Work
    OData – Custom Serialize & Deserialize
    ASP.NET Core – System.Text.Json
    Identity – Authorize
    ASP.NET Core – Custom Input formatters For Partial Update and Handle Underposting
    as3 Matrix用法
    as3页游聊天框点击透明区域及普通文本支持寻路方案
  • 原文地址:https://www.cnblogs.com/pengdonglin137/p/3434001.html
Copyright © 2011-2022 走看看