问题
我有一个嵌入式系统,无法使用放置在我的笔记本电脑(用作 NFS 服务器和 TFTP 服务器)上的嵌入式 Linux 内核映像和 rootfs 通过 NFS 进行启动。
有用的信息
我的笔记本电脑的 /etc/exports:
/tftpboot/rootfs_arm-gnueabi *(rw,sync,insecure_locks,no_root_squash,no_all_squash)
Linux 映像(myImage)路径:/tftpboot/ 根文件系统(rootfs)路径:/tftpboot/
TFTP 服务器和 NFS 服务器 IP:10.3.70.116
我的嵌入式系统 IP:10.3.70.181
我用来重启 NFS 和 TFTP 服务器的命令
sudo /etc/init.d/nfs-kernel-server 重新启动
sudo /etc/init.d/xinetd 重新启动
细节
当我通过嵌入式机器启动时,U-Boot 启动,然后系统开始加载“myImage”,最后它尝试通过 NFS 访问 rootfs,同时打印一些奇怪的字符,如以下引文末尾所示。
文件名“myImage”。
加载地址:0x2000000
加载:*#########################################################################################################################
完成传输的字节数 = 1181188(十六进制 120604)
在 02000000 处启动映像...
映像名称:Linux-2.6.22.18
创建时间:2010-12-07 6:01:19 UTC
图像类型:ARM Linux 内核图像(未压缩)
数据大小:1181124 字节 = 1.1 MB
加载地址:00008000
入口点:00008000
验证校验和...确定
好的
检查 Linux 内核字节序在 0x02000040 = 0xe1a00000
Linux 内核是 LE
以 LE 模式启动内核...
解压 Linux................................................................................................完成,启动内核。
啊啊啊啊啊啊啊啊啊啊啊啊啊啊啊
我运行了 Wireshark 并捕获了数据包,以查看哪些数据包在服务器和嵌入式机器之间往返。通过这样做,我发现在某个时候出现了一些 NFSERR_NOENT 错误。而且似乎错误是在访问/加载 ld.so.preload 时出现的
以下是一些按“时间源目标协议信息”排列的数据包。抱歉,视图有点混乱。我没办法。:)
4776 20.482764 10.3.70.181
10.3.70.116 NFS V2 LOOKUP 调用(4777 回复),DH:0xf4f053a1/etc4777 20.482838 10.3.70.116
10.3.70.181 NFS V2 LOOKUP 回复(呼入 4776),FH:0x468d1c144778 20.483000 10.3.70.181
10.3.70.116 NFS V2 LOOKUP 调用(4779 回复),DH:0x468d1c14/ld.so.preload4779 20.483443 10.3.70.116
10.3.70.181 NFS V2 LOOKUP 回复(呼入 4778)错误:NFSERR_NOENT4780 20.483712 10.3.70.181
10.3.70.116 NFS V2 LOOKUP 调用(4781 回复),DH:0x468d1c14/ld.so.cache4781 20.483839 10.3.70.116
10.3.70.181 NFS V2 LOOKUP 回复(呼入 4780)错误:NFSERR_NOENT
如果您已经读到这里:)并且得到了一些线索,我会很高兴知道您认为出了什么问题。
多谢。