導航:首頁 > 文件目錄 > 製作ubi文件系統

製作ubi文件系統

發布時間:2023-04-11 05:40:41

1. ubi 和yaffs文件系統的區別

近日,閱讀著名通訊半導體公司——博通公司(broadcom)的資料時,發現他們提供的linux系統中使用了一種名為ubi的文件系統。懷著好奇心,在網上搜索下ubi文件系統的資料。
網上關於ubi文件系統的介紹,大多數是華清遠見劉洪濤老師所寫的文章。該文章主要介紹了ubi文件系統產生的背景和用法。不過,本文將從一個認識的角度來了解ubi文件系統。

一、 UBI/UBIFS產生背景
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文件系統的支持。
二、UBI/UBIFS簡單介紹
由於超大容量Nand Flash的普及,YAFFS等皆無法再去控制Nand Flash的空間,於是在2006年由IBM與Nokia的工程師Thomas Gleixner,Artem Bityutskiy設計開發了UBI及其UBIFS文件系統,專門為了解決MTD(Memory Technology Device)設備所遇到的瓶頸。UBIFS通過子系統UBI處理與MTD device之間的動作。與JFFS2一樣,UBIFS 建構於MTD device 之上,因而與一般的block device不兼容。
其中,UBI是一種類似於LVM的邏輯卷管理層。主要實現損益均衡,邏輯擦除塊、卷管理,壞塊管理等。而UBIFS是一種基於UBI的FLASH日誌文件系統。
一句話解讀就是,UBIFS及其使用的UBI子系統,是一種用在大容量flash上的文件系統。
三、UBI/UBIFS的特點

2. ubifs文件系統掛載失敗,該怎麼處理

UBIFS是nokia工程師在the university of Szeged大學幫助下開發的新的flash file system。UBIFS可以認為是JFFS2文件系統的下一代。

ubifs文件系統掛載失敗的原因有很多,大多是以下原因導致的:

1、在uboot里,setenvnand_rootubi0:rootfsrwubi.mtd=2,2048

2、製作imgae時,mkfs.ubifs-c這個參數要仔細計算,些參數影響較大,再就是改一下ubinize.cfg這個文件的相關參數

3、開發用了gpio結果一個復用io被改了,結果造成nandreadonly,這個是驅動造成的,改一下內核驅動就可以

4、在uboot下少寫rootfs的時候,沒有跳過壞塊導致

3. 如何製作UBI文件系統以及製作UBI文件系統相關的資料

文件系統製作錯了隱橘吧,與你nand類隱攜數型不匹配,還有可能是灶首ECC不匹配,也就是你燒寫工具(uboot)的ECC和你內核使用的ECC類型不一樣

4. 掛載為ubi文件系統後,怎麼再掛載成jffs2

df-T只可以來查看已經掛載的分區源和文件系統類型。fdisk-l可以顯示出所有掛載和未掛載的分區,但不顯示文件系統類型。parted-l可以查看未掛載的文件系統類型,以及哪些分區尚未格式化。lsblk-f也可以查看未掛載的文件系統類型。

5. 為啥ubstore中botscript.dl載入失敗

因為ubi文件系統製作過大的原因。
方法是打開對我的電腦,找到優盤。右鍵格式化。文件系統默認為FAT32,將純神其做喚虧更改為NTFS,然後點擊格式化。格式化完成後右鍵優盤,屬性,發現文件系統改為NTFS,然後鏈猜在進行復制便可以了。
UBI文件系統:無排序區塊鏡像文件系統是用於固態存儲設備上,並與LogFS相互競爭,作為JFFS2的後繼文件系統之一。

6. ubifs文件系統掛載失敗,該怎麼處理

1、在kernel中添加ubifs文件系統相關的選項 2、製作ubifs.img文件並燒寫經nand flash,但是就是並梁物掛載不上,請大蝦幫忙分析,謝謝 ------解決方案絕液-------------------- 1. 製作ubi image的命令行,reference: https://github.com/voiceshen/scripts4linux/tree/master/ubifs 2. 啟動系統的命令行參數。 ------解決方案-------------------- 1.在uboot里,setenv nand_root ubi0:rootfs rw ubi.mtd=2,2048 2.製作imgae時,mkfs.ubifs -c 這個參數要仔細計算,些參數影響較大,再就是改一下ubinize.cfg這個文件的相關參數 3.再說一個我遇到的,開發用了gpio結果一個復用io被改了,結果造成nand read only,這個是驅動造成的,改一下內核驅動就可渣早以了。

7. 如何製作UBI文件系統以及製作UBI文件系統相關的資料

ramdisk 出錯。既然自己編譯 linux 內核,不推薦使用randisk,只使用內核就行,在編譯內核時一定要將自己使用的文件系統編譯進首雹內核,引導時,內核後跟主分區的橘芹巧設備名就行,ramdisk的作用就是載入內核驅動的圓鍵,把文件系統驅動直接編譯進內核,就不需要 ramdisk 了。

8. 如何掛載ubi文件系統

如何掛載ubi文件系統

Linux 系統中有關mtd和ubi的介面:
(1) cat /proc/mtd:可以看到當前系統的各個mtd情況,
(2) cat /proc/partitions: 分區信息,有上面的類似
(3) cat /sys/class/ubi/ubi0/*:當前系系統的ubi情況
(4) ls /dev/*, 查看設備節點

假設我們想在mtdblock1上載入ubifs文件系統,步驟如下:
(1)./ubiformat /dev/mtd1 -----格式化mtdblock1
(2)./ubiattach /dev/ubi_ctrl -m 1 -----將mtdblock1與ubi建立連接,命令輸出如下:
[ 977.342492] UBI: attaching mtd1 to ubi2
[ 977.346417] UBI: physical eraseblock size: 131072 bytes (128 KiB)
[ 977.352631] UBI: logical eraseblock size: 126976 bytes
[ 977.357948] UBI: smallest flash I/O unit: 2048
UBI device number 2, total 2000 LEBs (253952000 bytes, 242.2 MiB), available 1976 LEBs (250904576 bytes, 239.3 MiB), LEB size 126976 bytes (124.0 KiB)

系統自動將mtd1關連到ubi2上,假設系統中已經存在ubi0, ubi1了。

(3) ls /sys/class/ubi/ -----可以看到該目錄下增加了一個ubi2的子目錄
(4) cat /sys/class/ubi/ubi2/dev -----可以得到該ubi2設備的主次設備號,如249:0
(5) cat /sys/class/ubi/ubi2/volumes_count -----結果為0,表示該ubi上沒有任何volume
(6) ls /dev/ubi* -----如果/dev中沒有ubi2, 則手工創建「mknod /dev/ubi2 c 249 0」
(7) ./ubimkvol /dev/ubi2 -s 100MiB -N my_ubi_vol -----在ubi2上創建一個volume
(8) ls /sys/class/ubi/ -----可以看到該目錄下增加一個ubi2_0的目錄,代表ubi2上的第一個volume,如果哦「cat /sys/class/ubi/ubi2_0/name」, 你可以得到「my_ubi_vol」,這就是(7)中的名字。
(9) cat /sys/class/ubi/ubi2_0/dev -----得到該volume的主次設備號,如249:1
(10) mknod /dev/ubi2_0 c 249 1 -----如果/dev中沒有ubi2_0, 則需要手工創建
(11) mount -t ubifs ubi2_0 /mnt -----將ubi2_0掛載到本地目錄 /mnt上,
(12) mount -----可以看到ubi2_0成功掛載在/mnt上。

至此ubifs 裝載成功。

9. 開發板怎麼燒android系統

首先是友善之臂的Mini6410,它提供了兩種Boot,一種是移植的三星提供U-Boot1.1.6,這個版本不支持UBI文件系統的燒寫,他們自己做了個superboot,支持UBI,但是不開源,沒用過。

然後就是飛凌的OK6410,他們使用的也是三星提供的U-Boot,不支持UBI。所以想出另外的方式來燒寫。他們的燒寫使用了自己的 SD卡燒寫工具:SD_Writer,首先燒寫了一個mmc.bin和一個zImage-sd的文件到SD卡中,前者mmc.bin其實就是用於SD卡啟動的,後者zImage-sd是一個內核文件。我們首先來看看mmc.bin做了哪些事情,從SD卡啟動,進入U-Boot的下載模式,使用printenv列印環境變數,可得:

SMDK6410 # printenv
bootargs=rootdelay=0 console=ttySAC0,115200
bootcmd=nand erase;
fatload mmc 0:1 0x50008000 u-boot.bin;nand write.uboot 0x50008000 0 0x100000;
fatload mmc 0:1 0x50008000 zImage;nand write.e 0x50008000 0x100000 0x500000;
movi read kernel 0x50008000;bootm 0x50008000
從上面得bootcmd可以知道做的事情分四步:
1、擦除整個NAND Flash;

2、從SD卡中將u-boot.bin文件下載到內存中,然後燒寫到NAND Flash上;

3、從SD卡中將zImage下載到內存中,然後燒寫到NAND Flash上;

4、從SD卡讀取內核(不是上一步燒寫的zImage,而是之前使用SD卡燒寫工具燒寫的zImage-sd)到內存,然後啟動這個內核。而啟動參數就是上面的bootargs所顯示。

進入這個內核之後,就會進入下面這個命令行,

可能有人會覺得之前燒寫了U-Boot和zImage-sd到SD卡上,並沒有燒寫文件系統,那這個內核怎麼啟動呢?這里我們看一下命令提示符前面「initramfs」這幾個字元就明白了。

所有的2.6版本linux內核都有一個特殊的文件系統rootfs,是內核啟動的初始始根文件系統,initramfs的文件會復制到rootfs。如 果把initramfs比作種子,那麼rootfs就是它生長的土壤。大部分linux系統正常運行後都會安裝另外的文件系統,然後忽略rootfs。

這下大家就知道了吧,但是由於飛凌沒提供的源文件,所以不知道yjsx這個程序具體是啥,只能通過看燒寫的過程知道了,這里我就不貼了。主要做的工作就是把拷貝到SD卡中的文件系統燒寫到NAND Flash上,注意,這里他們燒寫的是yaffs格式,而不是ubi,我猜想他們僅僅是為了方便用戶使用SD卡燒寫(畢竟友善之臂的燒寫方式確實非常好),而不是使用ubi文件系統。

這里再來說一些Real6410和TQ6410,他們做法類似,Real6410是在NAND分區的時候分了兩個文件系統區,一個是cramfs,一個是真正用到的文件系統區。先啟動內核進入cramfs文件系統,將NAND格式化為UBI格式的,再進行燒寫。同樣,TQ6410也是先掛載NFS文件系統,將NAND格式化UBI,然後進行燒寫。

不過貌似TQ6410V2已經支持了UBI燒寫,這個還沒看。

10. iMX6ull SD卡系統和Nandflash系統

系統源碼和編譯方法,[參見連接] ( https://community.nxp.com/docs/DOC-334274 )其中dtb文件針對LCD或HDMI修改的內容對iSpeaker無影響,不用去修改。我們會使用另外的dtb文件。
燒寫SD方式也不採用這個文檔中的方法,直接在linux命令行下如下操作:

Nandflash使用zImage,dtb文件和SD卡中使用的完全一致。Uboot文件SD中使用的不能用於Nandflash,源碼另見。
燒寫Nandflash需要用SD卡系統盤啟動,SD卡系統中需要寬芹已安裝mtd-utils工具。系統啟動後能咐橋正慎簡畢常看到mtd0~mtd4分區。按照下面步驟操作:

$ flash_erase /dev/mtd0 0 0
$ flash_erase /dev/mtd1 0 0
$ flash_erase /dev/mtd2 0 0
$ kobs-ng init -x u-boot.imx --search_exponent=1 -v
$ flash_erase /dev/mtd3 0 0
$ nandwrite -p /dev/mtd3 zImage
$ nandwrite -p /dev/mtd3 -s 0x7e0000 imx.dtb
$ ubiformat /dev/mtd4 -f ubi.img

其中使用ubi.img文件,在linux主機下製作方法如下:
使用的根文件系統和SD卡中的根文件系統一樣,假設SD卡已插入linux主機usb介面,並將第二個分區掛載與/mnt下,首先在linux主機工作目錄下建立文本文件ubifs.cfg,內容如下:
[ubifs]
mode=ubi
image=ubifs.img
vol_id=0
vol_type=dynamic
vol_name=rootfs
vol_flags=autoresize
然後執行如下命令:
$ mkfs.ubifs -x zlib -m 2048 -e 124KiB -c 3965 -r /mnt ubifs.img
$ ubinize -o ubi.img -m 2048 -p 128KiB -s 2048 -O 2048 ubifs.cfg

閱讀全文

與製作ubi文件系統相關的資料

熱點內容
4399游戲盒20版本 瀏覽:349
有什麼找工作比較靠譜的app嗎 瀏覽:921
如何給網站掛黑鏈 瀏覽:282
360斷網急救箱網路異常修復不了 瀏覽:889
身份證驗證的js文件 瀏覽:994
什麼人經常換微信名字 瀏覽:707
網站源碼挖掘 瀏覽:944
荔枝fm和app哪個播放量好 瀏覽:535
樂秀音頻在哪個文件里 瀏覽:486
以數據說話什麼意思 瀏覽:319
java中對象 瀏覽:794
酷狗網路機頂盒如何設置 瀏覽:408
threejs添加文字 瀏覽:436
微信春節理財通 瀏覽:948
qq主題模塊應用教程 瀏覽:993
javaweb項目打包 瀏覽:59
qq主題是哪個文件夾里 瀏覽:642
超越狂暴升級txt書包 瀏覽:263
cad復制不能粘貼到新建文件 瀏覽:565
linux網路socket編程 瀏覽:926

友情鏈接