nuc977 使用 ubifs

https://blog.csdn.net/qianxilin/article/details/89282773

最开始使用的是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
 


原文链接:https://blog.csdn.net/qianxilin/article/details/89282773

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值