解决Sending DHCP and RARP requests .... 卡住问题

来源:互联网 发布:sx2150k基本数据 编辑:程序博客网 时间:2024/04/30 11:44

最近在调试dvsdk tftp ,nfs启动EVM板,由于之前玩的都是Android ,突然一下换linux感觉有点点谋生,不过还好很多问题都得到了自己的解决,中途遇到问题如下:

Sending DHCP and RARP requests ....
 原因是为了支持NFS作为根文件系统,而在内核配置的时候选择自动配置IP。因为我们需要做的是再bootargs这个内核参数中给出固定的IP ,不然他就一直再哪里配置,配置完参赛再去启动内核。所以自己定义IP。

这个IP的格式也是第一次去详细了解如下(参考别人的文章):

ip参数的格式如下:

ip=<client-ip>:<server-ip>:<gw-ip>:<netmask>:<hostname>:<device>:<autoconf>

client-ip:

你正在使用的这块板子,你要为它设置的ip

server-ip:

提供nfs服务的服务器的ip地址。如不需要NFS服务于板子,则此项可以空置

gw-ip:

网关的ip地址,如果nfs与目标板在同一个网段内,则此项可以空置

netmask:

子网掩码,如此项为空,则子网掩码为默认值255.255.255.0

hostname:

你希望给目标板设置的主机名,在linux的shell中的如bash,命令行最开始有一个形如 blacksword@laptop2:~ $ 这样的一个提示符,blacksword指当前的用户,而laptop2就是一个hostname.此项可以留空

device:

如果目标板上仅一个网卡,且只接了一个PHY,同时电路的设计没有将PHY拉出两个地址来,则此项为空。 如果不指有一个网卡,则可以指定要设置的ip地址是作用于哪一个网卡的。 如指定给第一块网卡,则该参数为eth0. 第二块为eth1,依此类推。

autoconf:

自动配置未明确指定参数的方式,可以是dhcp, rarp, bootp。如果不希望使用自动配置则可以使用off值来关闭  autoconf参数可以独立作用于ip参数,如ip=dhcp即表示由dhcp服务器给内核的ip参数提供所有数据。 ip=off则表示所有参数都不配置,留待系统启动进行配置。

最稳妥而简化的指定静态ip的方法为 ip=<clinet-ip>::::eth0:off  请注意中间冒号的个数。其他各项可以根据自己的实际情况来指定相应的值。

原来一个传给内核的ip参数就这么复杂,

这里给出我传递的参数形式:

setenv bootargs 'console=ttyO0,115200n8 rw mem=55M@0x80000000 mpurate=1000 mem=128M@0x88000000
omap_vout.vid1_static_vrfb_alloc=y omapfb.vram=0:4M
root=/dev/nfs nfsroot=192.168.1.55:/home/BeagleBoard/rootfs ip=192.168.1.56:192.168.1.55:192.168.1.255:255.255.255.0::eth0:off'
setenv bootcmd 'dhcp;setenv serverip 169.254.7.218;tftpboot;bootm

在ip中mask后面的内容别弄错了,起初写成255.0:eth0:off就挂载不了NFS,原因可能在于认为网卡是off了,就找不到NFS系统了。错误如下:

[    4.282989] mmc1: card claims to support voltages below the defined range. These will be ignored.
[    4.312072] mmc1: queuing unknown CIS tuple 0x91 (3 bytes)
[    4.320007] mmc1: new SDIO card at address 0001
[   76.779052] VFS: Unable to mount root fs via NFS, trying floppy.
[   76.787536] VFS: Cannot open root device "nfs" or unknown-block(2,0)
[   76.794219] Please append a correct "root=" boot option; here are the available partitions:
[   76.803100] 1f00             512 mtdblock0  (driver?)
[   76.808380] 1f01            1280 mtdblock1  (driver?)
[   76.813720] 1f02             768 mtdblock2  (driver?)
[   76.819030] 1f03            5120 mtdblock3  (driver?)
[   76.824310] 1f04          516608 mtdblock4  (driver?)
[   76.829650] b300         3829760 mmcblk0  driver: mmcblk
[   76.835235]   b301           40131 mmcblk0p1 00000000-0000-0000-0000-000000000mmcblk0p1
[   76.843658]   b302         3783307 mmcblk0p2 00000000-0000-0000-0000-000000000mmcblk0p2
[   76.852050] Kernel panic - not syncing: VFS: Unable to mount root fs on unknown-block(2,0)
[   76.860748] [<c004faf0>] (unwind_backtrace+0x0/0xec) from [<c0471b34>] (panic+0x4c/0x184)
[   76.869354] [<c0471b34>] (panic+0x4c/0x184) from [<c00091f0>] (mount_block_root+0x1d4/0x21c)
[   76.878204] [<c00091f0>] (mount_block_root+0x1d4/0x21c) from [<c00092dc>] (mount_root+0xa4/0xc4)
[   76.887420] [<c00092dc>] (mount_root+0xa4/0xc4) from [<c0009460>] (prepare_namespace+0x164/0x1c8)
[   76.896728] [<c0009460>] (prepare_namespace+0x164/0x1c8) from [<c0008710>] (kernel_init+0x10c/0x150)
[   76.906341] [<c0008710>] (kernel_init+0x10c/0x150) from [<c004ad10>] (kernel_thread_exit+0x0/0x8)

正确通过如下

[    4.275085] mmc1: card claims to support voltages below the defined range. These will be ignored.
[    4.304168] mmc1: queuing unknown CIS tuple 0x91 (3 bytes)
[    4.312164] mmc1: new SDIO card at address 0001
[    4.615783] net eth0: SMSC911x/921x identified at 0xd0884000, IRQ: 336
[    5.630187] IP-Config: Cannot add default route (-101).
[    7.668518] VFS: Mounted root (nfs filesystem) on device 0:14.
[    7.674865] Freeing init memory: 220K
INIT: version 2.86 booting

很显然这里显示网卡设备位eth0,可以找到。同时通过这个device也可以找到主机上的NFS文件系统,因此避免了在误认为net 是off的设备查找NFS。

因此ip的写法也很重要。

原创粉丝点击