系统启动后,虽然nand驱动表现正常,但是最后挂载rootfs时候出错:

Kernel command line: root=/dev/mtdblock2 rw init=/linuxrc console=ttyAMA1,115200 mem=64M rootfstype=yaffs2
。。。。
。。。。

AS353X NAND Driver, (c) 2010 austriamicrosystems
as353x_nand_probe
Nand clock set to 24000000
Nand:res->start at e60000
Nand:mapped registers at c48dc000
as353x_nand_inithw
Nand:initialising set 0 (c3a62800, info c3a934e0)
as353x_nand_init_chip
NAND device: Manufacturer ID: 0xec, Chip ID: 0xd3 (Samsung NAND 1GiB 3,3V 8-bit)
Scanning device for bad blocks
Bad eraseblock 2262 at 0x11ac0000
Bad eraseblock 3151 at 0x189e0000
Bad eraseblock 3649 at 0x1c820000
Bad eraseblock 5198 at 0x289c0000
Bad eraseblock 6842 at 0x35740000
as353x_nand_add_partition
Creating 5 MTD partitions on "NAND 1GiB 3,3V 8-bit":
0x00000000-0x00100000 : "U-Boot"
0x00100000-0x00900000 : "Kernel"
0x00900000-0x0d100000 : "Root filesystem"
0x0d100000-0x11100000 : "Temp"
0x11100000-0x3d700000 : "Data"
Nand:initialised ok
。。。。。。。
Root-NFS: No NFS server available, giving up.
VFS: Unable to mount root fs via NFS, trying floppy.
VFS: Cannot open root device "mtdblock2" or unknown-block(2,0)
Please append a correct "root=" boot option; here are the available partitions:
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(2,0)

【解决过程】

1.开始以为rootfs里面没有/dev/mtdblock2这个设备呢,后去制作rootfs的所用的文件那里查证,rootfs里面是有这些设备的:

[crifan@linux-41lh root]$ls dev/mtd* -l
-rw-r----- 1 eric develop 0 2010-01-12 13:58 dev/mtd0
-rw-r----- 1 eric develop 0 2010-01-12 13:58 dev/mtd1
-rw-r----- 1 eric develop 0 2010-01-12 13:58 dev/mtd2
-rw-r----- 1 eric develop 0 2010-01-12 13:58 dev/mtd3
-rw-r----- 1 eric develop 0 2010-01-12 13:58 dev/mtdblock0
-rw-r----- 1 eric develop 0 2010-01-12 13:58 dev/mtdblock1
-rw-r----- 1 eric develop 0 2010-01-12 13:58 dev/mtdblock2
-rw-r----- 1 eric develop 0 2010-01-12 13:58 dev/mtdblock3

【!!!此理解错误->】此外,最后经证实和确定,系统访问/dev/mtdblock2时候,这些块设备是系统内部生成的,即使你rootfs里面没建立这些设备文件,也是不影响的。

2.以为rootfs数据有问题,后来发现,此时还未涉及到rootfs数据的读写,因为还没挂载成功呢。

3.经过同事提醒,是否设置了MTD的block device支持。所以去内核源码处,查看配置:

make ARCH=arm menuconfig

在device drivers -> Memory Technology Device (MTD) support --->

发现里面有个选项:

Caching block device access to MTD devices

经过看其help:

Memory Technology Device (MTD) support -------------------------------------------+
| CONFIG_MTD:                                                                                                                 | 
|                                                                                                                             | 
| Memory Technology Devices are flash, RAM and similar chips, often                                                           | 
| used for solid state file systems on embedded devices. This option                                                          | 
| will provide the generic support for MTD drivers to register                                                                | 
| themselves with the kernel and for potential users of MTD devices                                                           | 
| to enumerate the devices which are present and obtain a handle on                                                           | 
| them. It will also allow you to select individual drivers for                                                               | 
| particular hardware and users of MTD devices. If unsure, say N.

和网上查找:

7.1 MTD-Supported Devices

Caching block device access to MTD devices, CONFIG_MTD_BLOCK

This is the configuration option for the read-write block device MTD user module that is visible as /dev/mtdblockN. If you configure this as a module, the module's filename is mtdblock.o.

得知,这个就是对应的,mtd的块设备的选项,因此,选上,重新编译,就可以加入mtd 块设备的支持了。

也就可以访问上面的/dev/mtdblcok2了。

【后记】

1.经过实际测试发现,rootfs中的/dev/mtdblockN,还是有关系的,其系统访问此mtd块设备,还是会去访问此文件的,/dev/mtdblockN会连接到底层对应的块设备,也就是这样是对的:

[root@linux-41lh root]$ls dev/mtd* -l
crw-r----- 1 root root 90, 0 2009-11-16 15:06 dev/mtd0
crw-r----- 1 root root 90, 2 2009-11-16 15:06 dev/mtd1
crw-r----- 1 root root 90, 4 2009-11-16 15:06 dev/mtd2
crw-r----- 1 root root 90, 6 2009-11-16 15:06 dev/mtd3
crwxr-xr-x 1 root root 90, 8 2009-11-16 15:06 dev/mtd4
brw-r----- 1 root root 31, 0 2009-11-16 15:06 dev/mtdblock0
brw-r----- 1 root root 31, 1 2009-11-16 15:06 dev/mtdblock1
brw-r----- 1 root root 31, 2 2009-11-16 15:06 dev/mtdblock2
brw-r----- 1 root root 31, 3 2009-11-16 15:06 dev/mtdblock3
brwxr-xr-x 1 root root 31, 4 2009-11-16 15:06 dev/mtdblock4

而上面我们看到的:

-rw-r----- 1 eric develop 0 2010-01-12 13:58 dev/mtdblock2

这个明显不是设备文件,所以是不正常的。

因此,需要生成对应的设备文件放到rootfs里面,然后重新执着roofs镜像文件(此处我这里是用mkyaffs2image去对root/文件夹及其下面的文件,制作出来yaffs2的rootfs文件的)。

nfs 挂载根文件系统

最近在实验从nfs服务器上挂载根文件系统。我用的redhat-2.6.18的内核,重新编译内核后。在启动过程中出现以下错误信息:

。。。。。
looking up port of RPC 100003/2 on 192.168.1.2
portmap: RPC call retured error 101
Root-NFS: Unable to get nfsd port number from server, using default
looking up port of RPC 100005/1 on 192.168.1.2
portmap: RPC call retured error 101
Root-NFS: Unable to get mountd port number from server, using default
mount: RPC call returned error 101
Root-NFS: Unable to get mountd port number from server, using default
mount: RPC call returned error 101
Root-NFS:Server returned error -101 while mounting /tftpboot/nfs
VFS: Unable to mount root fs via NFS, trying floppy
VFS: Cannot open root device "nfs" or unknown-block(2,0)
Please append a correct "root=" boot option
kernel panic - not syncing : VFS : Unable to mount root fs on unknown-block(2,0)

我的default 文件配置如下
default local
timeout 100
prompt 1
display msgs/boot.msg
F1 msgs/boot.msg
F2 msgs/general.msg
F3 msgs/expert.msg
F4 msgs/param.msg
F5 msgs/rescue.msg
F7 msgs/snake.msg

label local
   localboot 1

label 0
   localboot 1

label 1
   kernel ../boot/bzImage
   append root=/dev/nfs rw nfsroot=192.168.1.2:/tftpboot/nfs   ip=dhcp

nfs配置文件如下
/tftpboot   *(rw,no_root_squash,sync)

内核编译文件中
CONFIG_ROOT_NFS=Y
CONFIG_IP_PNP=Y
CONFIG_IP_PNP_DHCP=Y
CONFIG_IP_PNP_BOOTP=Y
CONFIG_IP_PNP_RARP=Y

是因为内核中没有编译网卡的驱动,只要在内核中编译进相应的网卡驱动就好了

问题描述:使用SAM9X25  内核版本是2.6.39 ,采用NFS文件系统, 在启动内核时会出现VFS: Cannot open root device "nfs" or unknown-block(0,255)错误

解决办法:step1,在内核配置时候文件系统中选中Root file system on NFS,这个选项depend on IP_PNP,发现IP_PNP在/net/ipv4/Kconfig中定义,故此项也要选中。

step2,uboot配置时需要关闭自动配置项,如下关闭eth0的IP自动配置

setenv bootargs root=/dev/nfs rw nfsroot=10.10.150.177:/home/wuer/nfs

ip=10.10.150.180:10.10.150.177:10.10.150.20:255.255.255.0::eth0::off  console=ttyS0,115200

这样NFS就挂载成功了

嵌入式 VFS: Cannot open root device "mtdblock2" or unknown-block(2,0)的更多相关文章

  1. linux kernel 提示VFS: Cannot open root device "mmcblk0p1" or unknown-block(179,1): error -19等信息后发生panic

    一.背景 文件系统安装在sd卡的第一个分区中,使用的是ext4文件系统,linux内核版本为4.14 二.思考 在内核启动之前,uboot给内核传递了参数root=/dev/mmcblk0p1,但是为 ...

  2. VFS: Cannot open root device "nfs" or unknown-block(0,255)错误的解决

    1. 解决办法:在内核配置时候文件系统中选中Root file system on NFS

  3. linux内核挂载根文件系统时报错”VFS: Cannot open root device "ram0" or unknown-block(0,0): error -6“如何处理?

    1. 通过error -6得到: #define ENXIO            6      /* No such device or address */ 2. 解决办法 使能CONFIG_BL ...

  4. CentOS启动报错:Centos kernel panic-not syncing:VFS:Unable to mount root fs on unknown block

    Centos kernel panic-not syncing:VFS:Unable to mount root fs on unknown block 原因:主要问题就是你更新了内核之后出现的问题. ...

  5. linux kernel 卡在提示信息Waiting for root device /dev/mmcblk0p1...处

    一.背景 1.1 移植linux-4.14内核的过程中,此时使用的是ext4文件系统,并且将根文件系统存储在sd卡的第一个分区上 1.2 内核打印完Waiting for root device /d ...

  6. 痞子衡嵌入式:可通过USB Device Path来唯一指定i.MXRT设备进行ROM/Flashloader通信

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是通过USB Device Path来唯一指定i.MXRT设备进行ROM/Flashloader通信. i.MXRT系列高性能微控制器从2 ...

  7. 从结果推断过程----->使用System.out和Root Device

    刚才解决了一个App中更新的逻辑问题.出问题之后发现,有很多处调用了更新,后来都不知道是哪里改写了SharedPreferences. 然后一直在挨个寻找每一处更新的地方,花了很多时间. 最后直接使用 ...

  8. Centos kernel panic-not syncing:VFS:Unable to mount root fs on unknown block 解决办法

    昨晚更新了一下内核,今晚开机就无法进系统了...提示如下图: 解决方案:开机启动时按Esc,然后选择下面的旧版本的内核启动即可. (成功进入系统后,你可以选择改变开机默认选择的内核). uname - ...

  9. (转)Genymotion安装virtual device的“unable to create virtual device, Server returned Http status code 0”的解决方法

    网络原因无法下载virtual device,status 为0表示服务器没有响应.FQ下载吧,有VPN的小伙伴推荐这种. 或者直接手动下载ova虚拟机文件,然后将虚拟机文件导入到virtualbox ...

随机推荐

  1. 编译FreePascal和Lazarus

    一,准备目录假设我们准备将整个FreePascal环境安装到D盘的fpc目录下,那么我们需要创建以下几个目录:d:\fpc_svn\bind:\laz_svn二,准备环境1,安装SVN客户端Torto ...

  2. Linux内核通杀提权漏洞CVE-2016-5195 - 内核升级方法

    如题,对于脏牛(Dirty COW)漏洞的修复方式已经在上篇文章中有介绍过如何验证,这里对如何升级内核给出修复建议. (注意:为避免不必要的生产风险的发生,请审核自己的实际环境而决定采用什么方法进行升 ...

  3. kafka安装及常用命令

    kafka是一个开源的分布式消息队列 他提供可靠的集群容错机制,并保证故障切换时的数据完整性. 无论从性能.可靠性.易用性都强过ActiveMQ(client的API感觉还是不如ActiveMQ好用, ...

  4. [转]“WARNING: soft rlimits too low” in MongoDB with Mac OS X

    转自:Programming and Technology If you get this warning when you connect to mongo shell in Mac OX X: * ...

  5. Java 数据结构之vector

    Vector 实现了一个动态数组.是可实现自动增长的对象数组. vector和arraylist的比较: 1.都是采用数组格式存储数据,索引数据块插入数据慢 2.ArrayList会比Vector快, ...

  6. Activity Recognition行为识别

    暑假听了computer vision的一个Summer School,里面Jason J. Corso讲了他们运用Low-Mid-High层次结构进行Video Understanding 和 Ac ...

  7. python实现简单kNN

    注释写得很清楚了,熟悉了一下python的一些基本语法和numpy中的一些操作. from numpy import * import operator def createDataSet(): # ...

  8. linux查看某个端口被占用

    如8003 端口 使用命令:netstat -nlptu |awk '{print $4,$7}' | grep 8003 [root[@bogon](/user/bogon) ~]# netstat ...

  9. Sublime Text 插件列表(整理中...)

    作为Java Web的开发者,前端和后端的技术都会用到,用了几款文本编辑器,Uedit32.EditPlus.Sublime Text等,发现还是Sublime Text用起来最方便. 首先安装pac ...

  10. Python3 学习第六弹: 迭代器与生成器

    1> 迭代器 迭代的意思类似递归一般,不断地对一个对象做重复的操作.来看个例子: class Fibs: def __init__(self): self.last = self.now = 1 ...