内核版本:linux-2.6.32.2 实验平台:ubuntu 12.04 + mini2440
nfs文件系统称为网络文件系统,因为文件系统在宿主机中,这样在修改文件系统就非常方便,所以主要用于开发阶段使用。
1. 主机安装nfs服务
$ sudo apt-get install nfs-kernel-server
2. 主机端修改nfs配置文件
修改/etc/exports文件,添加如下内容:
#/home/tracy/work/mini2440/nfsroot 192.168.1.*(rw,sync,no_root_squash) /home/tracy/work/mini2440/nfsroot *(rw,sync,no_root_squash)
原意是想让192.168.1.*ip地址访问nfsroot,但是在本地测试时会出现这样一条信息:
mount.nfs: access denied by server while mounting 192.168.1.100:/home/tracy/work/mini2440/nfsroot
测试命令如下:
$ sudo mount 192.168.1.100:/home/tracy/work/mini2440/nfsroot /mnt/tmp
一时也没有找到问题所在,所以改成了所有ip地址都能访问nfsroot,再次测试时能够挂载成功。
3. 重启nfs服务
$ sudo service nfs-kernel-server restart
4. 内核配置
使用nfs服务,肯定需要网络的支持,所以首先需要使网络能够正常工作,可以参阅前面一篇文章,然后还需要nfs客户端的支持。
File systems ---> [*] Network File Systems ---> <*> NFS client support [*] Root file system on NFS
5. 在bootloader中设置内核启动的命令行参数
noinitrd console=ttySAC0,115200 init=/init root=/dev/nfs rw nfsroot=192.168.1.100:/home/tracy/work/mini2440/nfsroot/rootfs ip=192.168.1.110:192.168.1.100:192.168.1.1:255.255.255.0::eth0:off
其中:
root 表示使用/dev/nfs这个设备作为根文件系统。 rw 表示可读可写的。 nfsroot 表示服务器中rootfs所在路径,注意需要跟上服务器的ip地址。 192.168.1.110 是板子启动之后的ip地址。 192.168.1.100 是nfs服务器的ip地址。 192.168.1.1 是板子网关地址。 255.255.255.0 是板子子网掩码。 eth0 表示板子上的网络设备。 off 表示关闭动态获取ip地址。
注意:eh0前面有两个冒号,那是因为这里还可以填写一个板子的主机名,这里没有设置,所以为空。
6. 测试结果
将编译好的内核下载到板子上(不需要下载根文件系统,根文件系统在nfs服务器上),在测试之前还需要将rootfs复制到nfsroot目录下,给板子连上网线进行测试(使用的是mini2440自带的交叉网线连接到路由器上的),系统正常启动。使用nfs文件系统有什么好处呢,在开发阶段,如果需要修改文件系统内容,或者要往板子上传递文件,使用nfs文件系统是非常方便的,只需要在本地nfs服务器上修改文件系统就可以了。
注意:通过交叉网线与电脑直连的方式,系统也是同样能够启动的。
7. 使用nfs直接挂载nfs服务器上的目录
需要配置内核:
File systems ---> [*] Network File Systems ---> <*> NFS client support [*] NFS client support for NFS version 3 [*] NFS client support for the NFSv3 ACL protocol extension [*] NFS client support for NFS version 4 (EXPERIMENTAL) [*] NFS client support for NFSv4.1 (DEVELOPER ONLY)
上面这些都是需要内核支持的nfs协议,而之前的配置是支持nfs根文件系统。
烧写内核和根文件系统,启动板子,系统启动之后(首先需要设置板子的ip地址)调用如下命令进行挂载:
mount -o nolock -t nfs 192.168.1.100:/home/tracy/work/mini2440/nfsroot /mnt/tmp
注意一定要加上-o nolock,否则会挂在不上。