nuc977 使用 ubifs

最開始使用的是ramfs,每次系統掉電以後保存的配文件就沒有了。而且把內核加文件系統的uimage也比較大。

嘗試下把文件系統做成ubifs。直接燒寫到FLASH裏面。


UBIFS 是用於固態硬碟儲存裝置上,並與LogFS相互競爭,作為JFFS2的後繼檔案系
統之一。 UBIFS 在設計與效能上均較YAFFS2、 JFFS2更適合 MLC NAND FLASH。例
如: UBIFS 支援 write-back, 其寫入的資料會被 cache, 直到有必要寫入時才寫到 flash,
大大地降低分散小區塊數量並提高 I/O 效率


操作記錄。

1. 安裝工具包

sudo apt install mtd-utils

2.把rootfs打包成ubifs文件 

這些參數是參考官方文檔,具體意思先留坑以後再看。

mkfs.ubifs -F -x lzo -m 2048 -e 126976 -c 732 -o rootfs_ubifs.img -d ./rootfs
ubinize -o ubi.img -p 131072 -m 2048 -s 2048 -O 2048 ubinize.cfg

ubinize.cfg參考文件

[ubifs]
mode=ubi
image=rootfs_ubifs.img
vol_id=0
vol_size=100MiB
vol_type=dynamic
vol_alignment=1
vol_name=system
vol_flags=autoresize

3.內核配置

MTD NAND flash 設置  
NAND flash 是使用的驅動是掛在 MTD 子系統之下. 可按照以下設置使能. NANDflash 接口有兩組管腳可選擇, Port C 以及 Port I, 需視硬件接線設置.

驅動中的基本設置如果需要由U-boot環境變數傳入就必須將” Command line partition table parsing” 選上, 否則會使用驅動程式裡的默認配置, 主要會將 MTD 分為三塊空間. 上電進入 shell 後, 分別是/dev/mtdblock0, /dev/mtdblock1, 以及 /dev/mtdblock2. 第一
塊是放置 U-Boot 的空間, 第二塊放置內核文件, 第三塊則是用來掛載 YAFFS2 或UBIFS 文件系統的空間. 若是配置有需要更改, 例如增加或減少分區, 改變分區大小.請直接編輯 uboot/include/nuc970_evb.h 或 drivers/mtd/nand/nuc970_nand.c.

上面是官方文檔給出的配置參數。但是我的uboot可能有些問題,導致:

選中選項後,uboot並沒有參數正確傳遞給內核,內核啓動信息中看到的也是默認的參數。所以我就把這個選項取消了,直接去修改drivers/mtd/nand/nuc970_nand.c中的配置文件。

參考的內核配置:

drivers/mtd/nand/nuc970_nand.c


UBI相關的啓動參數配置

先備份以前的參數

root=/dev/ram0 console=ttyS0,115200n8 rdinit=/sbin/init mem=64M

修改後的參數

noinitrd ubi.mtd=2 root=ubi0:system rw rootfstype=ubifs console=ttyS0,115200n8 rdinit=/sbin/init mem=64M

 

取消RAM根文件系統設定.

UBIFS文件系統設置

簡單總結:

上面的操作步驟來看,NAND 和UBI的配置都已經完成了。UBI的文件系統也準備好了。NAND分爲三個區 

1.u-boot

2.kernel

3.system

這裏的system需要注意下,這個就是存放我們前面生成的ubi.img文件,上面的步驟中很多地方使用了"system", 這個名字可以自定義爲rootfs等任何名稱,但是前後文必須一致。修改一處,所有的都要修改。uboot ,ubi文件製作,內核引導參數,nuc970_nand.c文件。

我們製作的ubi.img就是存放在system區域,內核在啓動的時候,會根據內核配置的引導參數去加載這部分的內容。加載ubi文件系統需要底層的NAND驅動支持,所以內核中需要把NAND的驅動也配置好。

uboot中的配置:

修改:nuc970bsp/uboot/include/configs/nuc970_evb.h 

這裏的配置需要和內核驅動中的nuc970_nand.c文件一致。注意system的名稱。 system當前使用剩餘的全部空間。

進入uboot以後使用如下命令

對於新的板子不知道這些步驟是不是強制需要的,留坑後面測試。

加載默認分區

U-Boot> mtdparts default

查看分區

查看分區
U-Boot> mtdparts

device nand0 <nand0>, # parts = 3
 #: name                size            offset          mask_flags
 0: u-boot              0x00200000      0x00000000      0
 1: kernel              0x00600000      0x00200000      0
 2: system              0x07800000      0x00800000      0

active partition: nand0,0 - (u-boot) 0x00200000 @ 0x00000000

defaults:
mtdids  : nand0=nand0
mtdparts: mtdparts=nand0:0x200000@0x0(u-boot),0x600000@0x200000(kernel),-(system)

擦除分區system

U-Boot> nand erase.part system
NAND erase.part: device 0 offset 0x800000, size 0x7800000
Erasing at 0x7fe0000 -- 100% complete.
OK

對system分區進行ubi格式化 

U-Boot> ubi part system
Creating 1 MTD partitions on "nand0":
0x000000800000-0x000008000000 : "mtd=2"
UBI: attaching mtd1 to ubi0
UBI: physical eraseblock size:   131072 bytes (128 KiB)
UBI: logical eraseblock size:    126976 bytes
UBI: smallest flash I/O unit:    2048
UBI: VID header offset:          2048 (aligned 2048)
UBI: data offset:                4096
UBI: empty MTD device detected
UBI: create volume table (copy #1)
UBI: create volume table (copy #2)
UBI: attached mtd1 to ubi0
UBI: MTD device name:            "mtd=2"
UBI: MTD device size:            120 MiB
UBI: number of good PEBs:        960
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:     0
UBI: available PEBs:             947
UBI: total number of reserved PEBs: 13
UBI: number of PEBs reserved for bad PEB handling: 9
UBI: max/mean erase counter: 1/0

創建system分區:

ubi create rootfs

//這裏會有一些提示信息,注意看看有沒有錯誤提示.有的話,就重新把system擦除下.

燒寫自己的ubi.img文件系統

更改boot,重新上電,燒寫文件。


燒寫完成以後,更改boot重新上電。進入uboot。

可以在uboot中驗證下我們創建的ubi.img文件對不對。

1. mtdparts default
2. mtdparts
3. ubi part system
4. ubifsmount ubi0:system  //掛載
如果都沒有錯誤信息的話,就查看下文件系統中有哪些文件。如果有的話,就檢查下哪裏出問題了。
這些不通過的話,下面的步驟也做不了。
U-Boot> ubifsls
<DIR>        3440  Sat Apr 13 06:23:09 2019  bin
<DIR>         352  Sat Apr 13 06:23:09 2019  dev
<DIR>        1312  Sat Apr 13 06:23:09 2019  etc
<DIR>        3936  Sat Apr 13 06:23:09 2019  lib
<DIR>         288  Sat Apr 13 06:22:50 2019  mnt
<DIR>         224  Sat Apr 13 06:22:50 2019  opt
<DIR>         160  Sat Apr 13 06:22:50 2019  tmp
<DIR>         160  Sat Apr 13 06:22:50 2019  sys
<DIR>         224  Sat Apr 13 06:22:50 2019  var
<DIR>         872  Sat Apr 13 06:23:09 2019  usr
<DIR>         160  Sat Apr 13 06:22:50 2019  proc
<DIR>        1416  Sat Apr 13 06:23:09 2019  sbin
<LNK>          11  Sat Apr 13 06:23:09 2019  linuxrc
               56  Thu Jan 01 00:00:47 1970  .ash_history
<DIR>         432  Thu Jan 01 00:00:40 1970  myApp

如果能看到自己打包的文件,就表明我們的文件系統製作的沒有問題。
剩下的就看內核能否正常啓動並加載了。。

內核啓動信息中看到的分區信息:

Creating 3 MTD partitions on "nand0":
0x000000000000-0x000000200000 : "u-boot"
0x000000200000-0x000000800000 : "Kernel"
0x000000800000-0x000008000000 : "system"
fmi-sm: registered successfully! mtdid=nand0
 

到此在roomfs裏面的文件可以正常的保存了,掉電也不會消失了。

結束。。。

 

順便的記錄下自己的uboot環境:

U-Boot> print
baudrate=115200
bootcmd=nboot 0x7fc0 0 0x200000; bootm 0x7fc0
bootdelay=3
ethact=emac
ethaddr=00:00:00:11:66:88
stderr=serial
stdin=serial
stdout=serial
watchdog=off

Environment size: 185/65532 bytes

 

參考:

http://www.360doc.com/content/11/0429/17/496343_113206690.shtml

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章