首先我不得不承认,这个问题花费了我一天多的时间,终于在今天早晨搞定了,做个备忘吧,也为出现同样问题的人留个参考!
首先,说明下,我的tftp以及NFS都配置成功了,都做过测试,如何设置tftp和NFS,以及如何测试就不说了,网上这方面的文章一大堆。
为了测试自己做的根文件系统是否能够正常运行,决定让开发板通过NFS启动,并根据uboot对bootargs的规定,做了如下设置:
$ setenv ipaddr 192.168.109.27 (开发板IP)
$ setenv serverip 192.168.109.33 (NFS服务器IP)
$ setenv gatewayip 192.168.109.254
$ setenv netdev eth0
$ setenv hostname zlg
$ setenv rootpath /arm3250/rootfs (NFS服务器上的用于启动系统的根文件目录)
$ saveenv
以上这些都设好以后,再设置了启动参数bootargs,因为原来开发里已经有根文件系统了,为了保持原来的bootargs,让开发板可以从自己的根文件系统启动,要保持flash里的bootargs不变,所以这里设置好bootargs之后,并不保存,目标板reset之后,就失效。
$ setenv bootargs root=/dev/nfs rw console=ttyS0,115200 nfsroot=$(serverip):$(rootpath) ip=$(ipaddr):$(serverip):$(gatewayip):$(netmask):$(hostname):$(netdev):off
关于bootargs的使用会在下篇博文里介绍。
还需要说明的是根文件系统已经拷贝到/arm3250/rootfs 下。
上述设定完成后,就可以启动系统了
$ run yboot
结果出现了以下的情况:
IP-Config: Complete:
device=eth0, addr=192.168.109.27, mask=255.255.255.0, gw=192.168.109.254,
host=zlg, domain=, nis-domain=(none),
bootserver=192.168.109.33, rootserver=192.168.109.33, rootpath=
Looking up port of RPC 100003/2 on 192.168.109.33
Looking up port of RPC 100005/1 on 192.168.109.33
VFS: Mounted root (nfs filesystem).
Freeing init memory: 108K
init started: BusyBox v1.11.2 ()
starting pid 321, tty '': '/etc/rc.d/rcS'
Mounting /proc and /sys
Starting the hotplug events dispatcher udevd
Synthesizing initial hotplug events
Setting the hostname to zlg
Mounting filesystems
mount: mounting usbfs on /proc/bus/usb failed: No such file or directory
Running sysctl
Setting up networking on loopback device:
Setting up networking on eth0:
nfs: server 192.168.109.33 not responding, still trying
并且就死在这了
,开始考虑是什么问题,难道是我做的根文件系统有问题,启动不了,于是我把根文件系统换成板子自带的根文件系统,这个保证是好的哦,运行了一下之后,发现还是这个问题,我疯掉。。。
通过对上述信息的检查可以看出NFS服务器已经挂载成功,NFS服务器设置本身应该是没有问题的,那么问题应该还是处在根文件系统上,于是就上网搜问题的解决办法。
网上关于nfs: server ******* not responding, still trying的帖子倒也不少,大致有两个版本,一个就说要改nfs的协议,从udp该到tcp,然后一个就是该每次传输的块,更改rsize和wsize,两种方法大都集中在丢包上。更主要的问题是,这些帖子多是针对系统启动后,两个系统之间进行NFS传输出现的not responding,和我这个情况根本就不一样。
然后就在网上海搜,凡是有点关系的帖子我都看看,这其中包括好好地看了一下bootargs的设置问题(这也是收获吧~~)
在其中一篇文章中有人提到,可能是根文件系统启动的时候更改了目标板的ip,当时想这不应该,ip我通过bootargs已经传给内核了,而且也已经成功挂载了,要是更改了就不能挂载了。我晕死,当时犯浑了,挂载是发生在启动前的,是系统启动的时候改的,所以才导致系统无法启动的。
后来在看到这两篇几乎没几句话的帖子时,又回想了上述的话,才幡然醒悟,问题可能就出现在这里啦。
于是我翻找上述那一大段的信息找到了starting pid 321, tty '': '/etc/rc.d/rcS'
这是系统启动时执行的第一个文件rcS,我想问题就在这里啦。于是在主机里,打开rcS,并没有发现更改IP的地方啊,但是我看到在这个文件里有句话
#load the configuration information
. /etc/rc.d/rc.conf(注意,这是在开发板上的根文件目录里)
这就是系统启动的时候加载的第一个配置文件了,问题应该就出现在这里了,打开这个文件惊奇的发现如下我期待已久的信息:
export INTERFACE0="eth0"
export IPADDR0="192.168.7.236"
export NETMASK0="255.255.255.0"
export BROADCAST0="192.168.7.255"
export GATEWAY0="192.168.7.1"
export NAMESERVER0="192.168.7.1"
看来就是它了,于是我按照自己的配置更改了选项:
export INTERFACE0="eth0"
export IPADDR0="192.168.109.101"
export NETMASK0="255.255.255.0"
export BROADCAST0="192.168.109.255"
export GATEWAY0="192.168.109.254"
export NAMESERVER0="192.168.109.254"
改好之后,保存。然后,回到Tera Term下,重启开发板,成功啦
starting pid 321, tty '': '/etc/rc.d/rcS'
Mounting /proc and /sys
Starting the hotplug events dispatcher udevd
Synthesizing initial hotplug events
Setting the hostname to zlg
Mounting filesystems
mount: mounting usbfs on /proc/bus/usb failed: No such file or directory
Running sysctl
Setting up networking on loopback device:
Setting up networking on eth0:
Adding static route for default gateway to 192.168.109.254:
route: SIOCADDRT: File exists
Setting nameserver to 192.168.109.254 in /etc/resolv.conf:
Starting inetd:
Starting the port mapper:
Starting the ssh server:
starting pid 632, tty '': '-/bin/sh'
[root@zlg /]#
至此,此问题得到完满解决!在这个解决问题的过程中是我认识到,遇到问题一定要多加思考,不能想当然的认为怎么样,要根据已有情况去做分析、判断。
阅读(1040) | 评论(0) | 转发(0) |