开发平台:Ubuntu11.04
在项目开发阶段,为了调试方便,一般不会把内核和文件系统镜像直接烧写到开发板的FLASH中,而是通过网络的方式实现:
内核镜像:通过TFTP服务把存放在开发平台(如Ubuntu)某个目录(如/tftpboot)下的内核镜像(如uImage)烧写到开发板的内存中,然后直接从内存启动。
文件系统:不用制作成镜像,文件系统的所有文件都存放在开发平台(如Ubuntu)的某个目录(如/opt/nfsdir)下,然后通过NFS服务把这个目录当作开发板的根目录。
1、NFS服务的配置
NFS是一种基于远程过程调用(Remote Procedure Call, RPC)协议,采用客户端/服务器端结构而实现的分布式文件系统。
我们一般在开发平台系统(如Ubuntu)中安装NFS服务器端,并指定相应的共享目录(如/opt/nfsdir),然后客户端就可以通过网络像访问本地目录一样透明地访问这个服务器端共享的目录。只要客户端拥有相应的权限,就可以读写、创建和删除其中的任何文件(包括目录)。
目前NFS主要有3个版本(即版本2、3和4),在实践中须要注意客户端和服务器端版本的兼容性,以确保NFS服务的顺利实现。
(1)、Ubuntu中NFS服务器端的配置
配置NFS服务器端通常包括两个步骤,一是安装NFS服务器端软件包,二是在/etc/exports配置文件中指定共享目录并给予客户端一定的访问权限。
首先,在Ubuntu中安装NFS服务器端:
$ sudo apt-get install nfs-kernel-server
在以上软件的安装过程中,会同时安装nfs-common和portmap等相关的底层支持软件包。
The following NEW packages will be installed: libgssglue1 libnfsidmap2 librpcsecgss3 nfs-common nfs-kernel-server portmap
nfs-common是一个通用的支持软件包,包括rpc.statd、rpc.idmapd及rpc.gssd等实用程序,为NFS服务器和NFS客户系统提供底层支持。
portmap用于提供NFS协议需要的RPC连接服务,管理和维护基于RPC规范的网络连接与数据传输。
然后,创建NFS共享目录,并把这个新创建的共享目录的绝对路径添加到/etc/exports配置文件中:
$ sudo mkdir -p /opt/nfsdir //如果父目录/opt不存在的话,mkdir命令需要加-p选项
$ sudo vi /etc/exports
/opt/nfsdir *(rw,sync,no_root_squash,no_subtree_check)
其中,/opt/nfsdir是NFS服务共享目录,*代表允许所有的网络段访问,rw指的是客户端的可读写权限,sync表示强制NFS服务器端采用同步方式处理客户端的数据写操作,no_root_squash指的是使NFS客户端的超级用户拥有与服务器端超级用户相同的访问权限,no_subtree_check指的是禁止NFS子目录树的检测。
最后,重新启动服务:
$ sudo /etc/init.d/portmap restart $ sudo /etc/init.d/nfs-kernel-server restart
(2)、配置开发板内核使其支持NFS服务的客户端
如在linux-2.6.38.8内核中配置NFS服务的过程:
$ make menuconfig
File systems ---> [*] Network File Systems ---> <*> NFS client support [*] NFS client support for NFS version 3 //也可以使用版本4 [*] Root file system on NFS
2、Ubuntu中TFTP服务的配置
TFTP(Trivial File Transfer Protocol,简单文件传输协议)是TCP/IP协议族中的一个用来在客户机与服务器之间进行简单文件传输的协议,提供不复杂、开销不大的文件传输服务。
首先,在Ubuntu中安装TFTP相关软件包:
$ sudo apt-get install tftp-hpa tftpd-hpa
不需要inetd服务,tftpd也可以独立地运行。
然后,创建TFTP服务的共享目录,并修改配置文件/etc/default/tftpd-hpa以指定这个共享目录:
$ sudo mkdir /tftpboot
$ vi /etc/default/tftpd-hpa
# /etc/default/tftpd-hpa TFTP_USERNAME="tftp" TFTP_DIRECTORY="/tftpboot" //指定tftp服务的共享目录 TFTP_ADDRESS="0.0.0.0:69" TFTP_OPTIONS="--secure"
最后,重新启动TFTP服务:
$ sudo /etc/init.d/tftpd-hpa restart