日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > windows >内容正文

windows

UBI文件系统和镜像的制作及分区挂载说明

發布時間:2025/3/15 windows 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 UBI文件系统和镜像的制作及分区挂载说明 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

定義:無排序區塊圖像文件系統(Unsorted Block Image File System, UBIFS),主要適用于nand flash設備。

三個子系統:

  • UBIFS文件系統
    可以理解為用戶層,工作于UBI之上。
    比如我們設備中掛載可見的分區。

    /dev/ubi3_0 22616 3068 19548 14% /data
  • UBI
    是MTD設備的高層次表示,一般用戶層也可以在這里做開發定制,比如升級,通過ioctl控制MTD設備的讀寫。

  • MTD子系統
    提供nand flash底層訪問接口。

  • 下面是這三個子系統的關系圖,畫圖太費時,借用一下牛畫好滴~~

    好了,接下來就可以講UBIFS文件系統的制作和鏡像的制作,以及分區的掛載了,順序就是先制作*.ubifs,然后制作*.img,最后mount分區。

    一、UBIFS文件系統制作
    我們先手動通過命令來制作UBIFS

    # mkdir test # ./mkfs.ubifs -r test -m 4096 -e 253952 -c 400 -o my.ubifs

    這兩條命令后,就會產生my.ubifs了,mkfs.ubifs工具mtd-utils中會提供,這個大家就想辦法自己去弄吧。
    參數說明如下:

    Options: -r, -d, --root=DIR build file system from directory DIR//指定根文件系統目錄樹的路徑 -m, --min-io-size=SIZE minimum I/O unit size //Nand Flash的最小讀寫單元,一般為page size。 -e, --leb-size=SIZE logical erase block size//邏輯擦除塊的大小 -c, --max-leb-cnt=COUNT maximum logical erase block count//邏輯擦除塊的個數,與分區大小有關 -o, --output=FILE output to FILE//輸出的根文件系統鏡像文件 -j, --jrn-size=SIZE journal size -R, --reserved=SIZE how much space should be reserved for the super-user -x, --compr=TYPE compression type - "lzo", "favor_lzo", "zlib" or"none" (default: "lzo") -X, --favor-percent may only be used with favor LZO compression and defineshow many percent better zlib should compress to makemkfs.ubifs use zlib instead of LZO (default 20%) -f, --fanout=NUM fanout NUM (default: 8) -F, --space-fixup file-system free space has to be fixed up on first mount(requires kernel version 3.0 or greater) -k, --keyhash=TYPE key hash type - "r5" or "test" (default: "r5") -p, --orph-lebs=COUNT count of erase blocks for orphans (default: 1) -D, --devtable=FILE use device table FILE -U, --squash-uids squash owners making all files owned by root -l, --log-lebs=COUNT count of erase blocks for the log (used only fordebugging) -v, --verbose verbose operation -V, --version display version information -g, --debug=LEVEL display debug information (0 - none, 1 - statistics,2 - files, 3 - more details) -h, --help display this help text

    這里重點講一下這個-c 400是怎么得來的,首先我的物理分區大小是100MB
    公式:(10010241024)/ 4096 / 64 = 400
    理論上要給bad block壞塊預留點空間,大家制作的時候盡量預留一點出來,-c 指定該分區最大邏輯擦除塊數量,該值隨著根文件系統分區的大小和該分區的壞塊數調整。

    二、UBI鏡像的制作
    有了my.ubifs后,就可以使用如下命令制作img鏡像了,命令如下:

    # ./ubinize -o my_app.img -m 4096 -p 256KiB ubinize.cfg

    其中ubinize.cfg內容如下:

    [ubifs] mode=ubi image=./my.ubifs vol_id=0 vol_type=dynamic vol_name=rootfs vol_flags=autoresize

    如上,ubinize是mtd-util中提供的,
    “配置文件說明:
    mode=ubi
    image=./my.ubifs 指定mkfs.ubifs制作生成的根文件系統鏡像文件路徑;
    vol_id=0 指定根文件系統樹的卷標為0,u-boot的bootargs參數需要根據它來設置;
    vol_size=xxx指定該UBI邏輯卷的大小,該值計算公式一般為 邏輯擦除塊大小邏輯擦除塊個數,
    該值一般不用寫,默認值是image大小。
    vol_type=dynamic
    vol_name=rootfs 指定UBI卷的名稱,u-boot的bootargs參數需要根據它來設置;
    vol_flags=autoresize UBI Subsystem在系統啟動時自動調整邏輯擦除塊的個數”

    三、ubifs分區的掛載
    有了鏡像,在gtp分區表中添加新增的分區配置,我這里是添加了100MB的空間,然后燒錄到設備中,那開機的時候需要去掛載新增的分區。
    需要兩個步驟完成:
    1、ubiattach
    shell腳本如下,10是dev/mtd10的序號,2是整個ubifs中的第二個序號

    ubiattach -m 10 -d 2 /dev/ubi_ctrl

    2、mount
    將/dev/ubi2_0掛載/data目錄,這個2就是上面的第二個參數序號2

    mount -t ubifs -o "rw,nosuid,nodev,noatime" /dev/ubi2_0 /data

    最終的開機效果:

    /dev/ubi2_0 79284 24 79260 0% /data

    四、分區的讀寫
    最后我還想講一下如何在用戶層對這個/dev/ubi2_0進行讀寫操作,比如OTA
    Nand flash設備和eMMC的有些不同,需要先erase后write,不然數據是不會成功的。

    這里提供一下最終的幾個系統調用,這些是kernel提供給上層的操作接口。

    ioctl(dev_fd, MEMGETINFO, &meminfo); 查詢 ioctl(dev_fd, MEMGETBADBLOCK, &offset); 判斷是否有壞塊 ioctl(dev_fd, MEMERASE, &erase);erase擦除 寫入的話,直接write到指定的fd就可以了

    好了,以上就是整理的nand相關的ubifs的內容,希望對大家有所幫助!

    總結

    以上是生活随笔為你收集整理的UBI文件系统和镜像的制作及分区挂载说明的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。