1. 从内核日志看rootfs挂载失败的全过程
当Linux系统启动时,内核会尝试挂载根文件系统(rootfs),这是系统启动的关键一步。从提供的日志可以看出,系统在4.070602秒时创建了ubiblock0_4设备(对应ubi0:4上的rootfsB分区),并将其设置为根文件系统。但在4.099482秒时,VFS(虚拟文件系统层)报告无法打开根设备,错误代码为-5。
这个错误序列表明:
- 系统识别到了ubi0:4分区
- 成功创建了对应的块设备ubiblock0_4
- 但在实际挂载时失败,返回错误-5(即EIO,输入/输出错误)
注意:错误-5在Linux内核中定义为EIO(Input/output error),通常表示设备层面的读写问题。
需要模型API调用? 免费领10W Token,多模型网关一键接入 Claude、DeepSeek 等主流模型。
2. 深度解析error -5的三种常见成因
2.1 驱动未正确加载或编译
这是最常见的情况之一。当内核缺少必要的驱动支持时,虽然能看到设备节点,但无法进行实际读写操作。检查要点:
-
确认内核配置中已启用:
bash复制
CONFIG_MTD=y CONFIG_MTD_UBI=y CONFIG_UBIFS_FS=y CONFIG_BLK_DEV_UBLOCK=y -
检查dmesg输出中是否有驱动加载失败的提示
-
使用
lsmod确认相关模块已加载
2.2 存储介质存在坏块或刷写未完成
NAND闪存常见的物理问题会导致这种错误:
-
使用
ubiattach检查UBI卷状态:bash复制
ubiattach -m 0 -d 0 ubinfo -a -
查看是否有坏块报告:
bash复制dmesg | grep -i "bad block" -
重新完整刷写固件,确保没有中断
2.3 文件系统签名不匹配(作者遇到的特殊情况)
这是较少见但很隐蔽的问题。当使用不匹配的mksquashfs工具打包rootfs时,虽然文件系统看起来正常,但内核无法正确识别其格式。具体表现为:
- 文件系统魔数(magic number)校验失败
- 内核日志没有明显的驱动错误
- 其他设备使用相同rootfs镜像正常
