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

时间:2022-03-21 16:53:13

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

dm9000 dm9000.0: WARNING: no IRQ resource flags set.
eth0: link down
IP-Config: Complete:
     device=eth0, addr=192.168.1.10, mask=255.255.255.0, gw=192.168.1.1,
     host=192.168.1.10, domain=, nis-domain=(none),
     bootserver=192.168.1.50, rootserver=192.168.1.150, rootpath=
Looking up port of RPC 100003/2 on 192.168.1.150
eth0: link up, 100Mbps, full-duplex, lpa 0x45E1
Looking up port of RPC 100005/1 on 192.168.1.150
Root-NFS: Server returned error -13 while mounting /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; here are the available partitions:
1f00            1024 mtdblock0 (driver?)
1f01            4096 mtdblock1 (driver?)
1f02          256896 mtdblock2 (driver?)
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(2,0)
[<c003f7f4>] (unwind_backtrace+0x0/0xd4) from [<c0054330>] (panic+0x40/0x124)
[<c0054330>] (panic+0x40/0x124) from [<c0008f7c>] (mount_block_root+0x1c4/0x20c)
[<c0008f7c>] (mount_block_root+0x1c4/0x20c) from [<c00091f8>] (prepare_namespace+0x130/0x190)
[<c00091f8>] (prepare_namespace+0x130/0x190) from [<c00088d4>] (kernel_init+0xc8/0xfc)
[<c00088d4>] (kernel_init+0xc8/0xfc) from [<c003ad6c>] (kernel_thread_exit+0x0/0x8)】

解决方案如下:

最可能的原因:

问题原因:这种情况通常是nfs配置问题。 确 
认uboot的bootargs参数里和nfs相关的ip地址信息设置是否正确,以及Host机/etc/exports配置无误,重起nfs服务,重新 
尝试连接。另外还需要注意bootargs内console和mem两个参数的设置。kernel2.6后console最好设置为 
ttySAC0,mem也要根据开发板实际情况设置正确。 

======================================================

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

1、确保自己的内核镜像即uImage或者zImage正确,同时必须确保把镜像烧写到正确的地址,如果以nfs方式加载镜像的话,确保不要超出ram的地址范围。

2、linux主机上面的nfs服务是否安装好。nfs的确定可以参见我之前的记录。

3、linuxrc的权限问题没有设为可执行文件,在制作根文件系统时,最好 chmod 777 linuxrc 一下,以免出现Failed to execute /linuxrc的麻烦。

      主要linuxrc文件的存在不是必须的。在没有linuxrc的时候busybox使用自己默认的文件,同时inittab文件也是非必须的。需要与否要根据自己的制作根文件系统的方法有关。

     Freeing init memory: 156K
     Failed to execute /linuxrc.  Attempting defaults...为什么会有这个信息。

    当使用busybox生成文件系统时,以static方式进行编译,同时把自动生成的linuxrc文件删除了,但是在uboot的bootargs中又其选项init=/linuxrc,因为在内核 main.c中init_post()函数中

 if (execute_command) {
  run_init_process(execute_command);
  printk(KERN_WARNING "Failed to execute %s.  Attempting "
     "defaults...\n", execute_command);
 } 需要执行其文件/linuxrc。因此没有此文件时可以的。

4、在安装busybox的时候,没有静态编译链接库。

     解决方法,在busybox选项中选择静态编译,或者将交叉编译器中的lib/目录下的链接库 cp到根文件系统下的 lib/目录下,这样做出来的文件系统往往较大。

5、yaffs2 文件系统被烧写到了错误的分区。yaffs2 文件系统文件系统应烧写在nand的root分区下。其分区信息可以到内核源代码中找到如:

      mach-mini2440.c中的static struct   mtd_partition friendly_arm_default_nand_part[] 数据   定  义了分区信息。

6、如果你是用的是uboot,你是否用对了yaffs的烧写指令,nand write.yaffs 而不是 nand write ,另外你的uboot是否正确修改了yaffs文件系统的烧写支持。

7、mkyaffs2image工具 做的是否成功?

8. 下载和内核一样老的yaffs2源码包,可能是nand的OOB不同。



Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(2,0)