基于ubuntu10.04的nfs开发环境搭建

来源:互联网 发布:ubuntu的英语读音 编辑:程序博客网 时间:2024/05/22 20:37

刚才谈到了TPTP开发环境的搭建,现在接着说说其基于NFS开发环境搭建。

开发平台:广州创龙电子公司的OMAPL138开发板平台

开发环境:Ubuntu10.04(虚拟机建议采用VM7.0或以上)


1. 安装nfs服务包

    安装软件前务必保证虚拟机可以上网。虚拟机要访问网络必须在“Virtual Machine setting”菜单下选择Network Adapter->Network connection->NAT:Used to share the host's IP address,设置如下图:

    在终端输入以下命令安装nfs服务包:

tl@tl-desktop:~$ sudo apt-get install nfs-kernel-server

    安装成功如下图所示:

2. 配置nfs

    nfs允许挂载的目录和权限需要在文件/etc/exports中进行定义。使用以下命令打开/etc目录下的nfs配置文件exports:

tl@tl-desktop:~$ sudo gedit /etc/exports

    在文件最后加入如下内容:

/home/tl/ *(rw,sync,no_root_squash)

    修改完成如下图所示:


    保存并退出编辑,下面解释一下设置的含义其中:

/home/tl:共享目录

*:允许所有的网络段访问

rw:访问者具有可读写权限

sync:资料同步写入内存和硬盘

no_root_squash:nfs共享目录访问者具有root权限
nfs常用参数有:
ro:只读访问
rw
:读写访问sync所有数据在请求时写入共享
async nfs
:在写入数据前可以响应请求
secure nfs
:通过1024以下的安全TCP/IP端口发送
insecure nfs
:通过1024以上的端口发送
wdelay
:如果多个用户要写入nfs目录,则归组写入(默认)
no_wdelay
:如果多个用户要写入nfs目录,则立即写入,当使用async时,无需此设置

hide:在nfs共享目录中不共享其子目录
no_hide
:共享nfs目录的子目录
subtree_check
:如果共享/usr/bin之类的子目录时,强制nfs检查父目录的权限(默认)
no_subtree_check
:和上面相对,不检查父目录权限
all_squash
:共享文件的UID和GID映射匿名用户anonymous,适合公用目录
no_all_squash
:保留共享文件的UID和GID(默认)
root_squash root
:用户的所有请求映射成如anonymous用户一样的权限(默认)
no_root_squas root
:用户具有根目录的完全管理访问权限
anonuid=xxx
:指定nfs服务器/etc/passwd文件中匿名用户的UID

3. 重启nfs服务、

    执行以下命令重启nfs服tl@tl-desktop:~$ sudo /etc/init.d/portmap restart

tl@tl-desktop:~$ sudo /etc/init.d/nfs-kernel-server restart
成功安装如下图:

4. 本地nfs服务器测试

4.1 显示已共享的nfs本地目录

    执行以下命令查看nfs共享目录:

tl@tl-desktop:~$ showmount -e

4.2 挂载本地nfs共享目录

tl@tl-desktop:~$ sudo mount -t nfs localhost:/home/tl/ /opt/

    进入/opt目录可以看到原来在/home/tl目录下的所有内容,如下图:

 4.3 查看本地nfs挂载情况

    在命令行终端执行“df”命令可以查看系统的所有挂载目录,如下图所示:

4.4 卸载本地nfs共享目录

    通过以下命令将本地挂载的nfs共享系统从挂载点/opt卸载

tl@tl-desktop:~$ sudo umount /opt/操作如下图:

5. 开发板挂载nfs服务器共享目录

    开发板和Windows主机先通过直连网线插到路由器,这样Winsows主机、虚拟机、开发板就相当于在同一个局域网了。若没有路由器,也可以通过交叉网线将开发板和Windows主机互联。

5.1 查看PC机Windows主机的IP地址

    在Windows主机<开始>菜单栏的最下方输入“cmd”,然后按回车进入dos操作界面,再输入执行"ipconfig"查看Windows主机的IP地址,如下图所示:

    可以看到“本地连接”IPv4字段是:192.168.0.2,这是主机的IP地址,子网掩码是:255.255.255.0,不同主机的IP是不一样的。

5.2 修改开发板的IP地址

    开发板上电,进入开发板系统后设置IP的前三个字段和Windows主机的一样,最后一个字段务必不能相同,同时设置子网掩码为一致。只有前三个在字段和子网掩码相同,Windows主机、Ubuntu虚拟机、开发板三者之间才能互相ping通。例如,针对Windows主机的IP:192.168.0.2,子网掩码:255.255.255.0,可以设置开发板的IP地址为:192.168.0.8,子网掩码:255.255.255.0,设置命令如下:

root@tl:~# ifconfig eth0 192.168.0.8 netmask 255.255.255.0

    可以通过ifconfig命令查看修改后的IP和子网掩码等信息,操作如下图:

    一种更简便的方法是使用“udhcpc”命令让开发板自动获取路由器给它分配的IP,如下图所示:

5.3 设置Ubuntu虚拟机IP地址

    在设置之前先将虚拟机和主机的网络连接方式设置为桥接,点击虚拟机"VM->Setting",弹出以下设置界面:

    点击“Network Adapter->Network Connection->Bridged”选项,如下图所示:

    点击OK,完成设置。

    进入虚拟机Ubuntu系统后设置IP的前三个字段和Windows主机的一样,最后一个字段务必不能相同,同时设置子网掩码为一致。只有前三个在字段和子网掩码相同,Windows主机、Ubuntu虚拟机、开发板三者之间才能互相ping通。例如,针对Windows的IP:192.168.0.2,子网掩码:255.255.255.0,可以设置虚拟机的的IP地址为:192.168.0.5,子网掩码:255.255.255.0。

    执行以下命令配置IP:

tl@tl-desktop:~$ sudo ifconfig eth0 192.168.0.5 netmask 255.255.255.0

    通过ifconfig命令查看修改后的IP和子网掩码等信息,结果如下图:

5.4 开发板和Ubuntu虚拟机ping测试

    在虚拟机执行以下命令,Linux系统的ping命令不会像Windows一样自动停止显示,需要执行“Ctrl+C”命令才能停止。

tl@tl-desktop:~$ ping 192.168.0.8

    成功ping通的结果如下图:

    在开发板输入以下命令,测试开发板和虚拟机的网络连通性:

root@tl:~# ping 192.168.0.5

    成功ping通的结果如下图:

5.5 开发板挂载Ubuntu虚拟机nfs服务器共享目录

    执行以下命令在根目录下建立nfs挂载目录:

root@tl:~# mkdir -p /nfs

    在开发板中当前执行以下命令挂载nfs服务器共享目录到开发板的/nfs目录:

root@tl:~# mount -t nfs -o nolock 192.168.0.5:/home/tl /nfs

-t nfs:挂载类型(type)是nfs。

-o nolock:不加文件锁,nfs mount默认选项包括文件锁(lock),依赖于portmap提供的动态端口分配功能。

192.168.0.5:/home/tl:虚拟机的IP地址是192.168.0.5,共享目录是虚拟机的/home/tl。

    进入开发板/nfs目录,可以看到Ubuntu虚拟机nfs服务器共享目录下的所有文件了,结果如下图所示:

    使用以下命令在开发板的/nfs目录建立nfs测试文件“nfs-test”:

root@tl:/nfs# touch nfs-test

    可以看到开发板已经出现了“nfs-test”测试文件,在使用vi编译器在“nfs-test”文件输入“test nfs”,保存并退出vi编译器,如下图所示:

    这时可以看到在虚拟机的nfs共享目录中有“nfs-test”文件产生了,使用“cat”命令查看其内容,如下图:

    说明开发板通过nfs挂载虚拟机的共享目录已经成功,并且可读可写,以后就可以通过nfs服务器来传输文件了,比U盘传输更加便捷。

5.6 卸载开发板的nfs挂载目录

    执行以下命令离开开发板/nfs目录,并卸载nfs挂载目录:

root@tl:/nfs# cd

root@tl:~# umount /nfs/ 

    再查看/nfs目录,可以看到里面的挂载内容已经没有了,说明卸载成功,操作和显示如下图:

6. nfs起根文件系统

6.1 在uboot中设置网络环境变量

         开发板上电后,按任意键进入uboot命令行,输入以下命令设置虚拟机TFTP服务器的IP地址变量serverip

U-Boot > setenv serverip 192.168.0.5

         输入以下命令设置开发板的IP地址变量ipaddr

U-Boot > setenv ipaddr 192.168.0.8

         另外一个变量ethaddr已经在uboot里面写好了,无需设置。设置会提示无法覆盖,如下图所示:

         执行以下命令保存环境变量:

U-Boot > saveenv

         保存后重新上电就不用再次设置了,提示如下图:

         执行以下命令测试网络的连通性:

U-Boot > ping 192.168.0.5

         若提示“host *.*.*.* is alive”说明网络畅通,如下图所示:

6.2 在uboot中设置tftp内核下载环境变量

         务必保证虚拟机tftp服务器已经搭建好,同时保证有内核文件uImage在虚拟机的tftp服务器目录“/home/tl/tftpboot”,如下图所示:

         设置tftp内核下载环境变量命令如下:

U-Boot > setenv bootcmd 'tftp c0700000 uImage;bootm c0700000'

U-Boot > saveenv

         操作如下图所示:

         设置以下环境变量以后,开发板每次启动都会从服务器tftpboot目录下载uImage内核镜像,测试内核非常方便。

6.3 在uboot中设置nfs网络文件系统加载环境变量

         务必保证虚拟机nfs服务器已经搭建好,在uboot中设置nfs网络文件系统加载环境变量:

U-Boot > setenv bootargs root=/dev/nfs rw nfsroot=192.168.0.5:/home/tl/omapl138/rootfs

nfsaddrs=192.168.0.8:192.168.0.5:192.168.0.1:255.255.255.0

console=ttyS2,115200n8 mem=128M 

U-Boot > printenv

U-Boot > save

         操作如下图所示:

         以下为参数解释:

root=/dev/nfs rw使用nfs起根文件系统,权限为可读可写。

nfsroot=192.168.0.5:/home/tl/omapl138/rootfs挂载的是IP地址为192.168.0.5的虚拟机nfs服务器/home/tl/omapl138/rootfs目录下的文件系统。

nfsaddrs=192.168.0.8:192.168.0.5:192.168.0.1:255.255.255.0设置nfs的网络IP参数,格式是nfsaddrs=(开发板IP:虚拟机nfs服务器IP:同网段的网关:子网掩码)。

6.4 测试nfs网络文件系统

         不用插SD卡,开发板上电,即可直接进入开发板系统根目录,发现开发板文件系统内核和虚拟机中/home/tl/omapl138/rootfs目录下的内容一样,证明nfs起根文件系统成功了。通过tftp下载内核和nfs起根文件系统,形成一个最流行,也是最便捷的一种调试方法。以下为两端的截图。

         开发板端:

         虚拟机nfs文件系统目录:

原创粉丝点击