这星期,花了三天去搞NFS文件系统启动Linux问题:
第一:其实NFS的配置很容易就搞定啦,主要是在ubuntu下使用sudo apt-get intall nfs-kernel-server 安装nfsd服务,然后配置/etc/exports,加入共享的根文件系统路径:/root/rootfs ×(rw,sync,no_root_squash,no_subtree_check),把根文件系统解压到/root/rootfs目录下。
第二:配置POS机器,因为POS机器是启动了LwIP协议栈的,所以在开始下载的时候先把zImage的linux内核下载到POS中(这里用公司专用的工具),然后在内核启动的时候根据配置的启动选项来启动(选项设定在POS启动的时候就可以配置,配置的主要是NFS的远程路径:192.168.xxx.xxx:/root/rootfs, 启动优先级是NFS)
(NOTE:在解压根文件系统时要用root用户,ubuntu默认是没root,需要adduser root,然后设定root密码)
第三:其实可以通过串口,看到linux启动的信息,其中信息如下:
Default kernel command string(CMDLINE)[noinitrd mem=16M console=ttyS0, 115200 init=/linuxrc root=/dev/nfs rw nfsroot=192.168.0.xxx:/nfsboot/root ip=192.168.0.xxx(src):192.168.0.xxx(dest):192.168.0.xxx(net gate):255.255.255.0:xxx(name):eth0:off]
第四:就是配置一下在同一网段的地址就可以启动,其中遇到一个超级大问题,就是我使用DHCP链接到公司网上才可以,然后Linux的专用下载工具可以下载内核并启动并顺利挂载nfs文件系统,而当我自定的设定PC的IP地址和网段就不能下载内核,我用wireshark抓包发现,tcp握手握不上,主要是防火墙把下载工具的tcp握手回应包(syn-ack)拦截啦,结果老是连接不上,我再看了一下控制面板下的防火墙,发现都没开的,为什么还是这样,于是打开网卡属性,选中高级选项,发现还有防火墙选项,而且是打开的,于是手动关闭就可以下载内核啦。(这个问题搞了差不多3天)
第四:这样就可以实现挂载NFS文件系统来操作文件,然后用串口来控制POS的Linux系统,当调试模块,就很简单啦。
总结是花最久的就是防火墙屏蔽了下载握手回应信号的问题上,而且最累,我自己都写了一个tcp server来测试,结果还是没找到问题,还好,通过这样的尝试,我对nfs的操作及观念理解深刻了一些。
NFS是sun退出的network file system,不同于NTFS,NTFS是NT File System(microsoft),NFS使用的核心的RPC(remote Process Call)机制,详细可以看RFC1094 NFS Specification和NFSv4,RFC1050 RPC spcification。
阅读(10540) | 评论(0) | 转发(0) |