本文大部分参考别人的文章,加上自己的一些改动,我用的是Ubuntu9.10
先交代一下我的基本配置:
我是通过一个路由器,连接了电脑和开发板。电脑的IP地址为:192.168.1.167,开发板的IP地址为:192.168.1.230,网关为:192.168.1.1,子网掩码为:255.255.0.0 。开发板和电脑都可以上网。没有路由器的朋友可以将电脑和开发板设置到同一个网段内,及子网掩码,网关都相同,IP地址前面3段相同,最后一段不同(比如我上面的那样),然后直接拿交叉网线(不是普通的网线)将电脑和开发板相连,但是不能上网(有无线的网的,配置以下无线,还可以上网,不管怎么样,只要开发板和电脑能互相ping通就可以了)。
(注* 先打sudo -i 进入root权限)
1.下载安装必要的软件:
apt-get install nfs-kernel-server
2.开始配置:
首先配置共享目录:
vim /etc/exports
输入以下内容:
/opt/FriendlyARM/mini2440/root_qtopia *(rw,sync,no_root_squash)
其中,“/opt/FriendlyARM/mini2440/root_qtopia”是你要共享的目录,“*”代表所有的IP地址都可以访问,“rw”表示挂载了该目录的用户对该目录有读写的权限,no_root_squash表示,如果挂载了该目录的用户以root权限登录,在在该目录中,也具有root权限。(注* 我现在也还没有搞清楚,为什么在设定可以访问该目录的IP段的时候,只能用*,而不能使用网上诸多的IP段设定方法,如192.168.1.* ,如果设定了这些IP段,在挂载是就会出现如下的错误:mount.nfs: access denied by server while mounting xxxx : yyyyy 的权限提示。另外还有值得注意的是,目录和后面的“*”之间有空格,我今天就因为没有打这个空格,花了近半个小时)
然后配置访问权限:
vim /etc/hosts.deny
输入以下内容:
portmap:ALL
lockd:ALL
mountd:ALL
rquotad:ALL
statd:ALL
然后保存退出(这里是禁止了所有IP地址)
vim /etc/hosts.allow
输入以下内容:
portmap: *
lockd: *
rquotad: *
mountd: *
statd: *
保存退出
(上面这里注意一下,网上有人说可以用“192.168.1.” 代替“*”,但是我搞了很久都用不了,只能开放全部,不过这样就很不安全,你自己看着办吧 )
然后把你你要共享的目录的权限改成777(是我偷懒了,没有算,这样不太好,你可以自己算一下)命令如下:
chomod -R 777 /opt/FriendlyARM/mini2440/root_qtopia
到这里,要配置的东西就都配置完了。之后就是启动,验证服务了。
运行命令:
/etc/init.d/portmap start
/etc/init.d/nfs-kernel-server start
如果运行结果如下:
# /etc/init.d/portmap start
Rather than invoking init scripts through /etc/init.d, use the service(8)
utility, e.g. service portmap start
Since the script you are attempting to invoke has been converted to an
Upstart job, you may also use the start(8) utility, e.g. start portmap
# /etc/init.d/nfs-kernel-server start
* Exporting directories for NFS kernel daemon...
exportfs: /etc/exports [3]: Neither 'subtree_check' or 'no_subtree_check' specified for export " *:/opt/FriendlyARM/mini2440/root_qtopia". Assuming default behaviour ('no_subtree_check').
NOTE: this default has changed since nfs-utils version 1.0.x
[ OK ]
* Starting NFS kernel daemon [ OK ]
然后进行测试,看共享目录是否存在,命令如下:
showmount -e
如果出现和下面类似的结果,则说明共享目录配置成功了。
# showmount -e
Export list for vrs-laptop :
/opt/FriendlyARM/mini2440/root_qtopia *
看到这样的结果,如果不出意外的话,下面的步骤都是可以成功的:
运行mount命令,将刚才的目录挂载都自己的电脑上试试看。
# mount -t nfs localhost:/opt/FriendlyARM/mini2440/root_qtopia/ /mnt/
# ls /mnt/
bin etc lib mnt proc sbin test_nfs usr www
dev home linuxrc opt root sys tmp var
呵呵,激动不?这样的结果就说明前面的心血没有白花,如果你按我说的做了,出现了问题,那么请不要怨我啊,因为Linux系统的差异性太大了,每个人的都不一样。所以,请你耐心点,上Google搜搜看(中国的网站,外国的网站上有很多关于这方面的问题解决方案,推荐上国外的网站,虽然是英语的,但是解决的步骤详细,讲解耐心,细致)
完成上面的配置后,连接好开发板,然后打开minicom,给开发板上电,从NAND Flash启动,在上电或复位的一刹那间(这是友善之臂官方给的,原话岁然不是这样,但大致的意思就是这样,这一点做的很垃圾,有时候手气不好,得复位好几次),按下开发板上的任意一个键,进入supervivi模式,按下“q”键,在supervivi的命令行模式下,输入:
param set linux_cmd_line "console=ttySAC0 root=/dev/nfs nfsroot=192.168.1.167:/opt/FriendlyARM/mini2440/root_qtopia ip=192.168.1.230:192.168.1.167:192.168.1.167:255.255.255.0:VRS:eth0:off"
这段命令的意思分解如下:
(1) “param set linux_cmd_line”设置Linux的命令行;
(2) “console=ttySAC0” 终端设置为ttySAC0;
(3) “root=/dev/nfs” 根目录为/dev/nfs
(4) “nfsroot=192.168.1.167:/opt/FriendlyARM/mini2440/root_qtopia ” NFS服务的目录是IP为“172.16.19.132”
主机下的“/opt/FriendlyARM/mini2440/root_qtopia”目录
(5) “ip=192.168.1.230:192.168.1.167:192.168.1.167:255.255.255.0”开发板的IP地址为192.168.1.230,主机的IP为
192.168.1.167,开发板和主机的网关与子网掩码分别为192.168.1.167和255.255.255.0
(6) “sbc2440.arm9.net” 主机(也就是PC机)的主机名,这个无所谓,写什么都可以
(7) “eth0” 开发板的网络设备(也就是所选择的网卡)
(8) “off” 至于这个off,我现在也还没有搞清楚到底要关闭什么东西,希望那个高手能给个指点
上面的解释都是我自己的理解,官方是没有说明的,如果我的理解有错误,请在留言板给予指正。
输入命令后,就可以按下回车,然后输入boot,让开发板从主机上的NFS目录下启动了。
Supervivi> boot
Copy linux kernel from 0x00060000 to 0x30008000, size = 0x00500000 ... done
zImage magic = 0x016f2818
Setup linux parameters at 0x30000100
linux command line is: "console=ttySAC0 root=/dev/nfs nfsroot=172.16.19.132:/op"
MACH_TYPE = 1999
NOW, Booting Linux......
呵呵,到这里,NFS的配置就完成了。以后开发的时候,就可以直接从NFS启动开发板,在主机上编写,编译程序,然后直接到开发板下运行,验证,而不用将程序通过其他方式下载到开发板中,并且,在开发板下对系统做的修改都是永久性的,不会因为开发板重启,掉电等丢失东西,这对开发较大型的工程是很有好处的。