官方QQ群收藏本站

百问linux嵌入式论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 9535|回复: 41

【答疑专题贴】NFS那些事儿

[复制链接]

46

主题

1391

帖子

2万

积分

论坛元老

Rank: 8Rank: 8

积分
26702
发表于 2016-6-24 11:05:09 | 显示全部楼层 |阅读模式
本帖最后由 lizuobin 于 2016-12-8 12:04 编辑

在第一期视频 第0课第7节_刚接触开发板之制作根文件系统及初试驱动.wmv 这节,因为要测试驱动,所以必须要把驱动程序弄到开发板里才行。
于是韦老师介绍了两种方式:

7.1 仅用flash上的根文件系统启动后,手工MOUNT NFS
7.2 使用NFS作为根文件系统来启动


视频中只介绍了开发板这端uboot参数的设置,并未介绍Ubuntu端NFS服务器的设置,这就导致很多学员学习时遇到了难以逾越的问题,从而影响了学习进度和学习热情。今天这篇帖子就是解决NFS相关的问题,希望能对初学者有所帮助。

仅用flash上的根文件系统启动后,手工MOUNT NFS    的前提条件:
1.开发板上要烧写好文件系统
2. 能正常开机进入Linux系统
3.uboot中启动参数类似这种  bootargs=noinitrd root=/dev/mtdblock3 init=/linuxrc console=ttySAC0


NFS什么
NFS:Network File System(网络文件系统),NFS只是一种文件系统,本身并没有传输功能,是基于RPC协议实现的,为C/S架构。
也就是说,NFS也只是文件系统而已,与jffs2,yaffs,ext4等是一类东西。但是NFS的特殊之处在于,它可以通过网络来挂载,而不用烧写到设备上。这就跟网吧里使用PXE启动来搭建无盘系统一样,每台电脑并没有安装硬盘,而是直接通过PXE启动服务器上的系统,看起来每台电脑都有硬盘,其实都是挂载服务器上的硬盘。


NFS怎么用?
前边已经介绍过,NFS是C/S架构,也就是说,使用NFS需要搭建服务器和客户端。客户端很简单,自带的uboot已经添加了对NFS客户端的支持,我们只需要管NFS服务器。这个服务器其实跟TFTP服务器、Samba服务器、Ftp服务器也是一类的东西,直接在Ubuntu上使用命令安装即可,演示如下:

sudo apt-get install nfs-kernel-server

1.png

很显然,我已经安装过了,在提供的Ubuntu9.10里也安装过了,继续往下走--------配置NFS服务器

sudo vi /etc/exports
2.png

默认状态下是没有配置的,可以参考给出的例子或者百度来决定配置信息
例如,可以配置成这样
3.png

就是在文件里添加了
/work/nfs               *(rw,sync,no_root_squash)
/var/lib/tftpboot       *(rw,sync,no_root_squash)

然后保存,重启NFS服务器或者Ubuntu(如果不重启,配置不会生效)
sudo /etc/init.d/nfs-kernel-server restart
4.png

解释一下:
/work/nfs   :允许客户端挂载的目录,可添加任意多个,如果不设置,服务器将不允许客户端挂载。
*               :允许所有IP的主机挂载该目录
括号内的    :一些权限设置,比如是否能够读写(可百度,更详尽)


现在NFS服务器就可以用了。


1.查看开发板和Ubuntu的IP,设置开发板IP并ping通NFS服务器
8.png

9.png

10.png

2.把你想拷贝到开发板上的文件都复制到刚才设置的目录里,例如拷贝到 /work/nfs,然后在开发板上执行挂载命令
mount   -t    nfs    -o   nolock,vers=2    10.0.0.147:/work/nfs    /mnt

解释一下:
mount     :挂载命令
nfs          :使用的协议
nolock     :不阻塞
vers        :使用的NFS版本号
IP           :NFS服务器的IP(NFS服务器运行在哪个系统上,就是哪个系统的IP)
/work/nfs:要挂载的目录(Ubuntu的目录)
/mnt       :要挂载到的目录(开发板上的目录,注意挂载成功后,/mnt下原有数据将会被隐藏,无法找到)

3.现在进入开发板上的/mnt目录,就可以看到Ubuntu上要传输的文件了
6.png
4.测试驱动,测试应用程序都可以在/mnt目录下进行,并且这个/mnt目录也不会占用开发板的Flash空间,很方便。


到这里,就介绍完了 7.1 仅用flash上的根文件系统启动后,手工MOUNT NFS 使用方法,强烈推荐用这种方式,因为太简单了。
随时想挂载就挂载,Ubuntu系统即使不开机也不影响开发板的启动。而 7.2 使用NFS作为根文件系统来启动  若Ubuntu未启动或者文件系统有问题,开发板根本无法开机,严重影响体验。


下节介绍NFS启动。。。。。。。。。。。。。。。。。。。。



你可能遇到的问题

5.png
典型的网络不通,检查彼此的IP,保证网络通畅。
很多初学者以为,在uboot状态下设置完IP能ping通Ubuntu那么开发板进入Linux后也一定能ping通Ubuntu,这是不对的。两种状态下的IP互不影响,也就是说uboot的IP不会传递给Linux,如果需要使用网络都需要分别设置IP。


7.png
①检查要挂载的目录/work/test是否在/etc/exports中声明过,如果没有,是没有挂载权限的,就参考前边的例子添加
在Ubuntu上执行命令 showmount -e 即可查看已经声明过的可被挂载的目录
②检查NFS服务器是否在运行
在Ubuntu上执行命令 sudo /etc/init.d/nfs-kernel-server status 即可查看nfsd是否正在运行,如果没有运行就参考前面的命令使其运行











韦东山视频开发板购买店铺:https://100ask.taobao.com
微信公众平台:baiwenkeji
有问题,不要发私信,直接在帖子下方留言,每天都会查看的。
回复

使用道具 举报

46

主题

1391

帖子

2万

积分

论坛元老

Rank: 8Rank: 8

积分
26702
 楼主| 发表于 2016-6-24 11:12:40 | 显示全部楼层
本帖最后由 勤奋的小青蛙 于 2016-6-29 17:11 编辑

现在介绍  7.2 使用NFS作为根文件系统来启动   如果你仅仅是想要让开发板跟Ubuntu共享文件,那么强烈建议你用上一个帖子所提供的方式,因为 7.2 使用NFS作为根文件系统来启动 要实现上述功能比较麻烦,这种启动方式主要用在制作文件系统上。下面将详细说明!


视频一开始就教大家怎么重烧整个系统,怎么编译uboot,怎么编译内核都讲了,就是没有讲怎么制作文件系统。制作文件系统属于进阶内容,被放到了第11节。但是视频中又提前的介绍了NFS启动,这就导致很多紧跟视频操作不敢有丝毫遗漏的同学陷入深深的苦恼当中,无法在自己的开发板上复现视频中的现象是不可容忍的,有些同学甚至因此放弃了嵌入式的学习,这对一个过来人来说感觉是相当可惜的。现在我就慢慢引入为什么需要NFS启动吧。


大家都知道,开发板要想运行应用程序,文件系统是必不可少的,在光盘里有提供文件系统,如图所示
01.png
参考视频的烧写方法,很容易能够烧写成功。但是这个文件系统是怎么制作出来的?只能看第11节的视频了,会发现步骤非常多。为了避免出错,需要时时看制作的效果。如果每做一步都用mkyaffs2image制作一个文件系统fs.yaffs2烧写到开发板上显然效率太低,此时NFS启动的优势就很明显了-----可以通过NFS启动的方式来实时看效果。

使用NFS启动的前提条件
编译内核和制作文件系统所用的交叉编译器必须相同(如果你用2.6.22.6的内核去挂载毕业班、第三期视频的NFS文件系统,肯定无法挂载)

1.将制作的文件系统放到/work/nfs/jz2440目录下
05.png



2.参考上一个帖子的方式,添加路径  /work/nfs/jz2440   到文件 /etc/exports 中,以保证开发板有挂载这个目录的权限
06.png

3.重启nfs服务器
4.png

4.再次确认刚才设置的目录是否生效
07.png

5.查看Ubuntu的IP和开发板的IP,等会设置uboot启动参数时会用到
9.png

08.png

6.设置uboot启动参数
set bootargs noinitrd root=/dev/nfs nfsroot=10.0.0.147:/work/nfs/jz2440 ip=10.0.0.10:10.0.0.147:10.0.0.1:255.255.255.0::eth0:off init=/linuxrc console=ttySAC0
save


7.如果你的文件系统制作的没有问题,那么重启开发板后应当能够进入Linux系统。如果挂载失败,就用光盘里提供的文件系统试试
09.png


注意:光盘提供的文件系统中etc/init.d/rcS文件中已经默认添加了设置开发板IP的命令,如果你不需要这个IP或者跟你的网段不同,可以修改以符合自己的需要。光盘里提供的文件系统都是用arm-linux-gcc(3.4.5版本制作的),因此你必须使用2.6.22.6的内核来启动,否则无法挂载文件系统。
010.png

8.使用NFS启动你会发现一个问题,如果开发板跟Ubuntu之间的网络不通,那么你的开发板就启动不了。想想也很正常,客户端跟服务器网络不通是无法登陆的。如果你制作的文件系统经过测试没有任何问题,那就可以制作成yaffs2文件系统烧写到开发板上,不用每次都得打开Ubuntu,插上网线,再启动开发板了。
在第一期视频第0课第7节03:40处有演示,
04.png

其实就是将NFS文件系统使用mkyaffs2image工具制作一下就生成yaffs2格式的文件系统了。




至此,NFS就分析完了,有问题,可以提问,帖子可以再完善....................................







韦东山视频开发板购买店铺:https://100ask.taobao.com
微信公众平台:baiwenkeji
有问题,不要发私信,直接在帖子下方留言,每天都会查看的。
回复 支持 反对

使用道具 举报

191

主题

1764

帖子

6129

积分

超级版主

答疑助手

Rank: 8Rank: 8

积分
6129
QQ
发表于 2016-6-24 11:19:30 | 显示全部楼层
本帖最后由 lizuobin 于 2016-12-8 11:59 编辑

其实,测试NFS能否挂载最快的方法就是在UBUNUTU上自己挂载自己:

//测试主机nfs:
mount -t nfs 本机IP:/opt   /mnt               其中opt为nfs目录

感谢感谢,又是一篇精华帖~~



NFS挂载文件系统出错:server 192.168.4.19 not responding, still trying
该问题 参考:http://www.100ask.org/bbs/forum. ... 9&highlight=nfs    7楼有答案
新手如何向我们反馈有效的信息,以便解决问题,见此贴:
http://www.100ask.org/bbs/forum. ... id=10914&extra=
回复 支持 反对

使用道具 举报

1

主题

2

帖子

9

积分

新手上路

Rank: 1

积分
9
发表于 2016-6-24 11:28:28 | 显示全部楼层
占楼!···············
回复 支持 反对

使用道具 举报

191

主题

1764

帖子

6129

积分

超级版主

答疑助手

Rank: 8Rank: 8

积分
6129
QQ
发表于 2016-7-12 11:46:58 | 显示全部楼层
不at我,才发现又更新了。
新手如何向我们反馈有效的信息,以便解决问题,见此贴:
http://www.100ask.org/bbs/forum. ... id=10914&extra=
回复 支持 反对

使用道具 举报

0

主题

3

帖子

31

积分

新手上路

Rank: 1

积分
31
发表于 2016-7-28 20:52:15 | 显示全部楼层
本帖最后由 波波 于 2016-7-28 20:53 编辑

ALSA device list:
  No soundcards found.
TCP cubic registered
NET: Registered protocol family 1
drivers/rtc/hctosys.c: unable to open rtc device (rtc0)
IP-Config: Complete:
      device=eth0, addr=192.168.3.103, mask=255.255.255.0, gw=192.168.3.1,
     host=xb, domain=, nis-domain=(none),
     bootserver=192.168.3.101, rootserver=192.168.3.101, rootpath=
Looking up port of RPC 100003/2 on 192.168.3.101
Looking up port of RPC 100005/1 on 192.168.3.101
VFS: Mounted root (nfs filesystem).
Freeing init memory: 140K
Warning: unable to open an initial console.
Failed to execute /linuxrc.  Attempting defaults...
Kernel panic - not syncing: No init found.  Try passing init= option to kernel.请问没法执行/linuxrc怎么解决?是编译器的问题么?我用的不是光盘里的Ubuntu9.是最新版的ubuntu16.04
回复 支持 反对

使用道具 举报

46

主题

1391

帖子

2万

积分

论坛元老

Rank: 8Rank: 8

积分
26702
 楼主| 发表于 2016-8-24 23:04:05 | 显示全部楼层
波波 发表于 2016-7-28 20:52
ALSA device list:
  No soundcards found.
TCP cubic registered

参考第7步的的说明操作
韦东山视频开发板购买店铺:https://100ask.taobao.com
微信公众平台:baiwenkeji
有问题,不要发私信,直接在帖子下方留言,每天都会查看的。
回复 支持 反对

使用道具 举报

1

主题

6

帖子

31

积分

新手上路

Rank: 1

积分
31
发表于 2016-11-17 20:53:19 | 显示全部楼层
不提示Ethernet怎么回事???
QQ截图20161117205020.jpg
回复 支持 反对

使用道具 举报

46

主题

1391

帖子

2万

积分

论坛元老

Rank: 8Rank: 8

积分
26702
 楼主| 发表于 2016-11-18 09:02:32 | 显示全部楼层
lxy791361999 发表于 2016-11-17 20:53
不提示Ethernet怎么回事???

ifconfig eth0 up  即可把以太网卡启动

gre0 tun10等隧道协议的连接如果用不上,可以禁用或者删除
ip link set gre0 down     //禁用
ip tunnel del gre0         //删除
韦东山视频开发板购买店铺:https://100ask.taobao.com
微信公众平台:baiwenkeji
有问题,不要发私信,直接在帖子下方留言,每天都会查看的。
回复 支持 反对

使用道具 举报

技术支持
在线咨询
咨询热线
0755-86200561
微信扫一扫
获取更多资讯!

Archiver|小黑屋|百问linux嵌入式论坛     

GMT+8, 2018-11-18 14:49 , Processed in 0.745460 second(s), 21 queries , File On.

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc. Template By 【未来科技】【 www.wekei.cn 】

快速回复 返回顶部 返回列表