简介:

本文主要介绍一种nfs挂载失败的情况,即在根文件系统中dev文件下没有设置console和null节点。如果你的文件系统中没有这种情况,这篇文章可能对你帮助不大。不过我也会将我在查找这个问题时碰到的一些其他情况进行说明。

Linux内核:linux-3.4.2

所用开发板:JZ2440 V3(S3C2440A)

BusyBox  : v1.20.0

声明:

本文是看完韦东山老师的视频后所写的课程总结,同时文中也会加入一些我自己对这方面知识的理解。希望可以帮到你们。

制作好根文件系统:

首先提醒大家的还是制作好根文件系统,我是直接使用韦东山老师提供的内核映像文件和根文件系统,而该内核映像uImage为Linux-3.4.2的内核,而根文件系统是使用busybox自己搭建的。这里我要先说明我的情况,我使用韦东山老师提供的内核和yaffs的根文件系统下载到我的开发板上可以启动内核并可以成功的启动根文件系统。但是当我使用nfs网络文件系统时却出现了错误。错误代码为:

VFS: Unable to mount root fs via NFS, trying floppy.
VFS: Cannot open root device "nfs" or unknown-block(2,0): error -6
Please append a correct "root=" boot option; here are the available partitions:
1f00             256 mtdblock0  (driver?)
1f01             128 mtdblock1  (driver?)
1f02            2048 mtdblock2  (driver?)
1f03          259712 mtdblock3  (driver?)
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(2,0)
Backtrace:
[<c000c434>] (dump_backtrace+0x0/0x10c) from [<c02f2c70>] (dump_stack+0x18/0x1c)r7:00008000 r6:c3a21000 r5:fffffffa r4:c381df18
[<c02f2c58>] (dump_stack+0x0/0x1c) from [<c02f2cf0>] (panic+0x7c/0x1d0)
[<c02f2c74>] (panic+0x0/0x1d0) from [<c03c6d98>] (mount_block_root+0x180/0x23c)r3:00000000 r2:c3844628 r1:c381df18 r0:c0366fd4
[<c03c6c18>] (mount_block_root+0x0/0x23c) from [<c03c6edc>] (mount_root+0x88/0x108)
[<c03c6e54>] (mount_root+0x0/0x108) from [<c03c7058>] (prepare_namespace+0xfc/0x194)r7:c040fa40 r6:c040faa0 r5:c03df138 r4:c03df144
[<c03c6f5c>] (prepare_namespace+0x0/0x194) from [<c03c63f4>] (kernel_init+0x170/0x1c4)r6:00000008 r5:c03de90c r4:c03e3558
[<c03c6284>] (kernel_init+0x0/0x1c4) from [<c001a034>] (do_exit+0x0/0x76c)

看到上面的错误信息后,我就去网上搜这类型的错误,结果发现各种原因引起的错误都有,我试了各种方法还是没有找到错误的原因,因此我的系统还是没有启动。这时我想老师提供的内核和根文件系统应该不会有错啊,所以我就认真的过了一遍自己的操作步骤,结果还真发现了问题。当我使用老师提供的根文件系统解压的时候出现了下面的错误信息:

上面提示的信息显示:文件系统中dev目录下的console节点和null节点不能创建,所以我去dev目录下检查了一下,发现居然没有这两个节点,因此我自己手动加入这两个节点:

当我加上这两个节点后就可以成功的挂载nfs网络文件系统了。所以这里提醒各位要注意你操作中的每个步骤,一个很小的错误将在后面影响到整个系统。

同时建议大家先在试试是否可以手动挂载,如果可以手动挂载,那么对于排查自动挂载将容易很多。

挂载nfs根文件系统时应该注意的部分:

这里我列举一些在挂载nfs中可能出现的错误,希望可以对大家有所帮助。

1. 首先还是要确认内核的信息与busybox的版本信息,同时确定内核与根文件系统使用的是统一gcc编译。或者更详细一些,编译内核所使用的gcc要与编译busybox的gcc相同。同时根文件系统中lib库中包含的就是交叉编译的中的lib文件。我想可能有些人会使用其他人的内核去加载自己编写的根文件系统,这时可能就会有这样的问题。

2. 确定u-boot,Linux服务器和window三者可以ping通,我想这个是一定要检查的部分,如果网络不可以用,那么nfs网络文件系统自然就不可以用了。

3. 确认在Linux服务器端已经启动了nfs服务,因为nfs为c/s模式(客户/服务器)的。所以如果服务器没有设置好,你将不可以从服务器端获得根文件系统。你可以在Linux服务器中使用nfsstat命令来查看nfs的状态。

4. 确认在服务器端的etc/exports中添加了根文件启动的路径。并设置相应的权限,并重启nfs服务:

5. 确保根文件的完整,如果你要确保有韦东山老师最小根文件系统中所有的各个文件以及节点设置。而构建最小根文件系统的步骤可以参考:Linux根文件之系统制作流程

6. 正确的设置bootargs:bootargs参数是十分灵活的,同时也可以对各种形式的根文件系统进行加载设置,所以设置好bootargs参数是成功挂载nfs的关键。而很多同学出现错误就是出在没有设置好bootargs参数,或者设置bootargs参数是因为粗心出错。这里我例举了其中设置nfsroot的模式:

nfsroot=[<server-ip>:]<root-dir>[,<nfs-options>] ip=<client-ip>:<server-ip>:<gw-ip>:<netmask>:<hostname>:<device>:<autoconf>

而我以自己的bootargs参数为例:

set bootargs console=ttySAC0,115200 root=/dev/nfs nfsroot=192.168.1.112:/work/nfs_root/fs_mini_mdev_new_digitpic ip=192.168.1.110:192.168.1.112:192.168.1.1:255.255.255.0::eth0:off

其中对于串口的设置时要添加波特率:115200 。不然输出的内容容易乱码。

最后还是建议大家要细心一些,其实好多时候我们的错误不是因为不会而是因为粗心。

参考文献:

NFS挂载那些事

U-boot的环境变量: bootcmd 和bootargs

Linux根文件之系统制作流程

Linux通过nfs挂载根文件系统失败:VFS: Unable to mount root fs via NFS, trying floppy.相关推荐

  1. 【问题解决】Linux通过nfs挂载根文件系统报错:VFS: Unable to mount root fs via NFS, trying floppy

    问题: NFS配置没问题:NFS服务开启与使用.目录挂载与卸载 使用 NFS 挂载文件系统的时候报错: [ 101.800373] VFS: Unable to mount root fs via N ...

  2. mini2440NFS启动,VFS: Unable to mount root fs via NFS, trying floppy.

    NFS服务器基于opensuse13.2 nfs-kernel-server 1.3.0-4.4.1版本,启动时提是如下错误: U-Boot 1.3.2-moko12 (Apr 4 2009 - 14 ...

  3. linux通过nfs挂载根文件系统报错:VFS: Unable to mount root fs via NFS, trying floppy

    问题 在开发板NFS平时挂载都正常的情况下某一天升级了PC端ubount版本或者在系统内安装某个安装包时附带更新了某些文件的情况下突然造成NFS挂载失败,开发板反复重启的情况如图 原因 以前使用的16 ...

  4. linux centos系统启动失败:VFS:Unable to mount root fs on unknown-block

    最近遇到了一次虚机系统启动失败,提示错误如图: 根据字面意思,根目录的文件系统出问题了,无法挂载,导致系统无法启动. 尝试了以下方法: 1.将这个盘挂载到别的机器上通过fsck/xfs_repair修 ...

  5. ubuntu20通过nfs挂载根文件系统失败:VFS: Unable to mount root fs via NFS, trying floppy.

    在网上搜索各种资料均未解决. 最终发现原因是我的Ubuntu版本太新了,不兼容导致. 查看支持的NFS协议版本: cat /proc/fs/nfsd/versions 终于在大神的博客里找到解决方法: ...

  6. linux开发笔记:Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(2,0)

    我利用NFS加载虚拟机里的linux中的文件系统,结果板子端出现了以下错误,记得我的另一块板子也是出现了类似的错误 dm9000 dm9000.0: WARNING: no IRQ resource ...

  7. linux开发 | nfs挂载根文件系统失败、处理过程

    NFS挂载根文件系统失败 [ 5.552903] s5p-tvout s5p-tvout: hpd status is cable removed [ 5.563919] DBUG_PORT must ...

  8. NFS挂载失败(Kernel Panic - not syncing: VFS: Unable to mount root fs on unknown-block(0,0))

    写在前面: 我的博客已迁移至自建服务器:博客传送门,CSDN博客暂时停止,如有机器学习方面的兴趣,欢迎来看一看. 此外目前我在gitHub上准备一些李航的<统计学习方法>的实现算法,目标将 ...

  9. Kernel panic - not syncing VFS Unable to mount root fs on

    Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(31,2) 内核版本 2.6.14 处理器平台 S3 ...

最新文章

  1. 基于Charlieplexing算法(查理复用算法)的LED矩阵控制设计
  2. 《JavaScript入门经典(第6版)》——2.7 问答
  3. 将ActiveMQ持久消息传递性能提高25倍
  4. java 签名 ecdsa_Java实现ECDSA签名算法
  5. 在Windows系统中下载并安装Docker-desktop
  6. RTOS原理与实现09:事件标志组实现
  7. 3.1Guessing Game
  8. 相机模型与标定(三)--张正友标定
  9. C++ std::thread::hardware_concurrency() 获取CPU核心数
  10. 气不足则胖,血不足则瘦
  11. CodeForces 1023G. Pisces
  12. 初中英语知识水平测试软件,美国初中生英文水平测试!百个单词检测,看看你认识几个...
  13. 使用Math.max和Math.min求数组的最大值和最小值
  14. 2022-JavaScript-过滤数组中的undefined,null,空串,NaN
  15. 音频D类功放LC滤波器设计(二)
  16. 伦敦国王学院EEM专业介绍
  17. ubuntu vi 方向键乱
  18. python去除字符串中的空格、特殊字符、指定字符
  19. 类加载初始化顺序(nullpoint异常)
  20. linux 挂载4t移动硬盘,Linux挂载移动硬盘

热门文章

  1. matlab实现悬臂梁非线性动力学分析
  2. 体积小纯净无打扰,新版微软电脑管家在教国内做杀软
  3. LANG和LANGUAGE的区别
  4. 一个不错的图形软件g6
  5. linux命令 For循环
  6. copy 命令复制大批文件时不覆盖现有文件
  7. pc104计算机加固,凌华科技发布高性价比、加固型宽温PC/104单板计算机
  8. C++语言中的元类编程(七)
  9. Flume配置-Failover
  10. 基于区块链的医疗数据共享系统