ubifs根文件系统挂载失败可能原因

news/发布时间2024/5/17 17:57:19

ubifs作为根文件系统挂载时,遇到了一些不同类型的错误,整理一下问题的排查思路

UBIFS (ubi0:0): Mounting in unauthenticated mode
UBIFS (ubi0:0): background thread "ubifs_bgt0_0" started, PID 1054
ubi0 warning: ubi_io_read: error -74 (ECC error) while reading 126976 bytes from PEB 3:4096, read only 126976 bytes, retry
ubi0 warning: ubi_io_read: error -74 (ECC error) while reading 126976 bytes from PEB 3:4096, read only 126976 bytes, retry
ubi0 warning: ubi_io_read: error -74 (ECC error) while reading 126976 bytes from PEB 3:4096, read only 126976 bytes, retry
ubi0 error: ubi_io_read: error -74 (ECC error) while reading 126976 bytes from PEB 3:4096, read 126976 bytes

(1)首先检查linux内核读写nand是否正常
主要是检查linux内核的设备树、menuconfig里的nand设置是否正确。
要注意一点,能启动linux并不代表配置正确,因为uboot能正常读写nand就能启动linux内核。

有一个很好的验证方式,那就是换个文件系统(比如yaffs2、jffs)能正常读写nand,
那就说明linux内核的nand设置没有问题

(2)mkfs时,检查LEB设置是否正常,一般比PEB小两个页大小

(3)如果出现了第一次能挂载,但重启第二次挂载就失败,多半原因是mkfs时没有加-F参数,
具体原因google一搜便知,参考链接:
http://www.linux-mtd.infradead.org/faq/ubifs.html#L_free_space_fixup

(4)mkfs时,-c参数可以写大一点,不用纠结怎么计算,第一次ubi挂载后会自动计算

参考代码如下(页大小2KB,块大小128KB,总容量128MB):

> mkfs.ubifs -d rootfs -e 0x1f000 -c 2047 -m 0x800 -x none -F -o rootfs.ubifs

(5)ubinize时,若nand没有subpage,-s参数要写与页大小一样的值(或者干脆不填)
参考如下:

ubinize -o rootfs.img -m 0x800 -p 0x20000  ubinize.cfg

(6)uibinize时,其config文件不用填vol_size字段, vol_flags设为autoresize即可,
不用计算,非常方便。ubinize.cfg文件内容参考如下:

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

(7)如果还是有问题,可以先用其它文件系统把linux启动起来,然后再使用mtd-utils
对nand进行ubiformat、ubiattach,mount进逐步排查,检查的参考步骤如下:
(一定要确保以下每一步骤均无错误)

> flash_erase /dev/mtd4 0 0
> ubiformat /dev/mtd4 -f rootfs.img
> ubiattach -p /dev/mtd4
> mount -t ubifs /dev/ubi0_0 /mnt
> cp /bin /mnt/ -r
> ls /mnt
> rm /mnt/* -r

如果这些步骤都没问題,且正常挂载、正常读写多个较大的文件(一定要检查能正常读写),说明生成的ubi镜像没有问题,
那原因就只有两个:

  • 烧写工具有问题,烧写坏块处理不当
  • mkfs时没有加-F参数。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ulsteruni.cn/article/75682725.html

如若内容造成侵权/违法违规/事实不符,请联系编程大学网进行投诉反馈email:xxxxxxxx@qq.com,一经查实,立即删除!

相关文章

认知提升的方法

认知提升的方法一、什么是认知 经验是对于过往经历的总结归纳,当把这种经验传授给别人时,这种经验对别人来说就是知识。所以,知识是人脑对客观事物的信息沉淀。 技能是人们通过练习而获得的动作方式和系统,例如操作技能中的PS技术、木工技术、电工技术、水工技术等,而能力…

将社会脆弱性纳入高分辨率全球洪水风险绘图

贡献 将高分辨率流洪水模型的年平均超标概率估计值与网格化人口和贫困数据相结合,创建了 90 米分辨率的全球洪水脆弱性调整风险指数(VARI Flood)。该指数提供了国家内部或国家之间相对风险的估计值,并通过识别以高密度和高社会脆弱性为特征的 "热点地区",改变了…

acwing351

https://www.acwing.com/activity/content/problem/content/9051/ NOIP2007提高组T4。本题是加强版。 题目描述 设 \(T=(V, E, W)\) 是一个无圈且连通的无向图(也称为无根树),每条边带有正整数的权,我们称 \(T\) 为树网(treenetwork),其中 \(V, E\) 分别表示结点与边的集…

Unity热更学习笔记--AB包的依赖 0.98

AB包的依赖 接上一小结。 在这里我们新建一个红色材质球,赋值给Cube预制体。此时不对材质球进行AB包分类,再次进行打包。运行脚本,发现红色cube成功的从AB包中加载出来。尽管我们没有将cube所依赖的材质球进行打包分类,但是打包时候unity会自动将包中的物体相关依赖打入包中…

Y2 知识和题单

Link。 0x01 进制 引入 计数原理,对于 \(N\) 进制,那么就是逢 \(N\) 进一。 计算机中常用二进制,对应电路中的通电(\(1\))断电(\(0\))。 人类从远古以来使用十进制。 常用的有二进制、三进制、八进制、十进制、十六进制等。 由于不同进制之间数值写法可能相同,在没有特…

Clock Switch,芯片时钟切换的毛刺是什么,如何消除

背景 芯片运行过程中需要时钟切换时,要考虑到是否会产生glitch,小小的glitch有可能导致电路运行的错误。所以时钟切换时需要特别的处理。 直接使用MUX进行时钟切换或者采用如下电路结构进行时钟切换:assign outclock = (clk1 & select) | (~select & clk0);或 assig…