刚才谈到了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服务器测试
执行以下命令查看nfs共享目录:
tl@tl-desktop:~$ showmount -e
tl@tl-desktop:~$ sudo mount -t nfs localhost:/home/tl/ /opt/
进入/opt目录可以看到原来在/home/tl目录下的所有内容,如下图:
4.3 查看本地nfs挂载情况
在命令行终端执行“df”命令可以查看系统的所有挂载目录,如下图所示:
通过以下命令将本地挂载的nfs共享系统从挂载点/opt卸载
tl@tl-desktop:~$ sudo umount /opt/操作如下图:
开发板和Windows主机先通过直连网线插到路由器,这样Winsows主机、虚拟机、开发板就相当于在同一个局域网了。若没有路由器,也可以通过交叉网线将开发板和Windows主机互联。
在Windows主机<开始>菜单栏的最下方输入“cmd”,然后按回车进入dos操作界面,再输入执行"ipconfig"查看Windows主机的IP地址,如下图所示:
可以看到“本地连接”IPv4字段是:192.168.0.2,这是主机的IP地址,子网掩码是:255.255.255.0,不同主机的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,如下图所示:
在设置之前先将虚拟机和主机的网络连接方式设置为桥接,点击虚拟机"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和子网掩码等信息,结果如下图:
在虚拟机执行以下命令,Linux系统的ping命令不会像Windows一样自动停止显示,需要执行“Ctrl+C”命令才能停止。
tl@tl-desktop:~$ ping 192.168.0.8
成功ping通的结果如下图:
在开发板输入以下命令,测试开发板和虚拟机的网络连通性:
root@tl:~# ping 192.168.0.5
成功ping通的结果如下图:
执行以下命令在根目录下建立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盘传输更加便捷。
执行以下命令离开开发板/nfs目录,并卸载nfs挂载目录:
root@tl:/nfs# cd
root@tl:~# umount /nfs/
再查看/nfs目录,可以看到里面的挂载内容已经没有了,说明卸载成功,操作和显示如下图:
开发板上电后,按任意键进入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”说明网络畅通,如下图所示:
务必保证虚拟机tftp服务器已经搭建好,同时保证有内核文件uImage在虚拟机的tftp服务器目录“/home/tl/tftpboot”,如下图所示:
设置tftp内核下载环境变量命令如下:
U-Boot > setenv bootcmd 'tftp c0700000 uImage;bootm c0700000'
U-Boot > saveenv
操作如下图所示:
设置以下环境变量以后,开发板每次启动都会从服务器tftpboot目录下载uImage内核镜像,测试内核非常方便。
务必保证虚拟机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:同网段的网关:子网掩码)。
不用插SD卡,开发板上电,即可直接进入开发板系统根目录,发现开发板文件系统内核和虚拟机中/home/tl/omapl138/rootfs目录下的内容一样,证明nfs起根文件系统成功了。通过tftp下载内核和nfs起根文件系统,形成一个最流行,也是最便捷的一种调试方法。以下为两端的截图。
开发板端:
虚拟机nfs文件系统目录: