linux加载rootfs 根文件系统 kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(2,0)

环境:linux内核加载自己的制作的文件系统。

错误信息有以下几种:

错误信息1:

Root-NFS: Server returned error -5 while mounting /mini2440/rootfs
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             256 mtdblock0 (driver?)
1f01             128 mtdblock1 (driver?)
1f02            5120 mtdblock2 (driver?)
1f03          125568 mtdblock3 (driver?)
1f04          131072 mtdblock4 (driver?)
Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(2,0)
Backtrace:
[<c00341cc>] (dump_backtrace+0x0/0x10c) from [<c03

错误信息2:

Looking up port of RPC 100003/2 on 192.168.1.149
eth0: link up, 100Mbps, full-duplex, lpa 0xC9E1
Looking up port of RPC 100005/1 on 192.168.1.149
VFS: Mounted root (nfs filesystem) on device 0:11.
Freeing init memory: 156K
Kernel panic - not syncing: No init found.  Try passing init= option to kernel.
Backtrace:

[<c00341cc>] (dump_backtrace+0x0/0x10c) from [<c0329b08>] (dump_stack+0x18/0x1c)
 r7:00000000 r6:00000000 r5:c001f24c r4:c0481c30

这是我在加载自己的制作的文件系统的时候出现的错误信息。到网上找了帮助。

应该注意以下几点:

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工具 做的是否成功?

 

 

你可能感兴趣的:(c,linux,struct,command,编译器,linux内核)