今个真高兴啊(真的不容易啊),Tiny6410 终于可以通过 NFS 起根文件系统了,那个 Linux 系统总算跑起来了(相对 initramfs 起根文件系统就是好用)!
今天完美解决了:nfs: server 192.168.1.111 not responding, still trying 这个问题(后面有解决方法在步骤 7 中有详细的说明,说白了就是设置好 bootargs 这个 UBoot 环境变量,其实是很简单的)!
1、需要的实验器材(怎么感觉像是做实验的,呵呵~~)
1)友善之臂提供的 NFS 文件系统(厂家提供的光盘里都有)。
2)友善之臂提供的 Linux2.6.38 这个源码。
3)RHEL5 虚拟机(当然里面得有必须的交叉工具链、NFS 工具等)。
4)超级终端软件。
5)Tiny6410 开发板!
2、实验步骤
关于如何解压文件啊之类的,这个完全自行就可以解决,我这里只是说操作部分!
1)编译 /etc/exports 文件,设置共享目录。
2)启动 nfs 服务!
3)进入 Linux2.6.38 内核文件,拷贝厂商提供的 config 文件到主目录的 .config 文件。
4)直接 make menuconfig,由于厂商都已经做好了,所以这里就两点需要更改的,首先是取消 initramfs(这个在 General Setup 里面),然后选中 NFS(这个貌似在 File System -> NetWork File System 里面)!
5)然后执行命令编译!
6)编译完成后,找到文件,放到 /tftpboot 目录下。
7)从 NandFlash 启动 Tiny6410,然后修改 UBoot 的环境变量 bootargs(就是这里了,可以解决一开始文章的 not responding 的问题)!
首先呢,我用红色的横杠画出了空格的地方!然后就是其中的意思了:
console=ttySAC0 ttySAC0 作为控制台
root=dev/nfs 固定格式,表示内核采用 nfs 方式起根文件系统
nfsroot=192.168.1.111:nfs/rootfs_qtopia_qt4
表示的是 nfs 起的根文件系统位于 nfs 服务器 /nfs/rootfs_qtopia_qt4
目录下,我的虚拟机的 IP 为:192.168.1.111
,proto=tcp,nfsvers=3,nolock 如果不加这条语句会造成上面的 nfs: server 192.168.1.111
not responding, still trying 这样的错误!
原因:NFS 的默认传输协议是 UDP,而PC机与嵌入式系统通过UPD交互时就会出现严重的网卡丢包现象(这个也只是暂时的分析)!貌似好多人都说是网卡移植出现的问题!具体我也就不知道了,反正写上这个,然后就没有问题了!
ip=192.168.1.113:192.168.1.111:192.168.1.1:250.250.250.0:_Justin:eth0:off
这句话的格式是:ip=IP1:IP0:IP2:IP3:nameofyoulike:eth0:off
第一项(IP1)是目标板的临时IP(注意不要和局域网内其它的IP有冲突)
第二项(IP0)是我的虚拟机的IP
第三项(IP2)是目标板上网管(GW)的设置,这个参数设置跟虚拟机网管一致
第四项(IP3)是子网掩码
第五项(yourname)是开发板的名字(随便啦)
第六项(eth0)是网卡设备的名字
8)通过 tftp 下载位于虚拟机 /tftpboot 目录下的 uImage 文件到 0x50000000 处!
9)bootm 吧~~
10)等待查看,按提示按下 Enter!
到这里就可以完美的在 Tiny6410 上用 NFS 起根文件系统了!!!!