打印
[应用方案]

nuc977 使用 ubifs

[复制链接]
1984|4
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
观海|  楼主 | 2021-8-1 17:50 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式
最开始使用的是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


使用特权

评论回复
沙发
观海|  楼主 | 2021-8-1 17:52 | 只看该作者
3.内核配置

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

/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文件系統設置


使用特权

评论回复
板凳
观海|  楼主 | 2021-8-1 17:53 | 只看该作者
简单总结:

上面的操作步骤来看,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的驱动也配置好。


使用特权

评论回复
地板
观海|  楼主 | 2021-8-1 17:54 | 只看该作者
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擦除下.


使用特权

评论回复
5
观海|  楼主 | 2021-8-1 17:55 | 只看该作者
烧写自己的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



使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

99

主题

4103

帖子

1

粉丝