做这个实验,请先看我的三机互ping教程
NFS(网络文件系统)
NFS(Network File System)即网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间通过TCP/IP网络共享资源。在NFS的应用中,本地NFS的客户端应用可以透明地读写位于远端NFS服务器上的文件,就像访问本地文件一样。
使用前提
1、若出现挂载被拒绝,请尝试双方互ping是否能通
2、检查防火墙是否关闭
3、检查开发板内核是否支持NFS,服务器inux搭建nfs服务 sudo apt-get install nfs-kernel-server
第一种: 仅用flash上的根文件系统启动后,手工挂载nfs(推荐用这种)
1.1、虚拟机llinux服务器允许那个目录被挂载
指定linux下的某个文件系统运行他人挂接,修改/etc/exports,增加该文件的目录路径,括号照抄
a、增加nfs服务的文件夹路径 vi /etc/exports
比如将这个文件目录/work/nfs_root/first_fs允许他人挂接, 编辑加入/work/nfs_root/first_fs *(rw,sync,no_root_squash
b、重启nfs服务 sudo /etc/init.d/n
c、设置linux服务器的ip地址 sudo ifconfig eth3 192.168.2.2 netmask 255.255.255.0
1.2、开发板设置去挂载网络上(linux服务器)的文件系统
配置开发板的ip 开发板上启动内核和文件系统后
查看ip地址#ifconfig
设置ip地址# ifconfig eth0 192.168.2.3
开发板启动flash的文件系统后,建立一个/mnt目录作为挂载点,
我们把linux服务器的文件系统挂载到mnt目录
# mount -t nfs -o nolock 192.168.2.2:/work/nfs_root/first_fs /mnt
可能出现以下问题
nfs: server 192.168.2.2 not responding, still trying
nfs: server 192.168.2.2 not responding, still trying
nfs: server 192.168.2.2 not responding, still trying
建议改用以下命令(nfs本身的问题,nfs默认是udp协议,因此使用下面的命令完美解决)
#mount -t nfs -o intr,nolock,rsize=1024,wsize=1024 192.168.2.2:/work/nfs_root/first_fs /mnt
第二种使用NFS作为根文件系统来启动(不推荐)
https://blog.csdn.net/thisway_diy/article/details/68067350
a.重启开发板进入u-boot命令行。
b.输入 set bootargs noinitrd root=/dev/nfs nfsroot=192.168.2.2:/work/nfs_root/first_fs ip=192.168.1.119:192.168.1.110:192.168.1.1:255.255.255.0::eth0:off init=/linuxrc console=ttySAC0
这里乱七八糟的,就不管
set bootargs noinitrd root=/dev/nfs nfsroot=服务器的ip地址:/work/nfs_root/first_fs ip=单板的ip地址 :192.168.1.110:192.168.1.1:255.255.255.0::eth0:off init=/linuxrc console=ttySAC0
c. save 保存 reboot重启。
ok NFS启动完成。
在实际开发中,我们选择使用第一种也就是烧写linux、uboot、fs_qtopia.yaffs2文件系统后,从flash上挂载网络文件系统,
在开发板的文件系统根目录下建立/mnt作为挂载点,讲将网络上的文件系统挂载在这个目录。
测试:
在linux编写hello.c文件,用交叉编译器编译这个文件,这个文件是arm架构的只能在开发板上运行,所以开发板挂载后执行这个文件。
#include <stdio.h>
int main()
{
printf(" hello!\n");
return 0;
}
服务器上 $ arm-linux-gcc -o hello hello.c
开发板上 $./hello
我用的是韦东山的资料,由于自己升级编译器arm-linux-gcc-4.3.2.tar.bz2,结果出现了以下问题。
开发板执行./hello 遇到illegal instruction错误。
什么问题:我升级了编译器导致的 查看交叉编译器版本 $ arm-linux-gcc -v
妈的,结果illegal instruction这个错误我折腾了两天,这是个恶心的问题,网上一堆看的云里雾里
最后用回韦东山的虚拟机,里面是交叉编译器 3.4.5,编译后,可以在开发板上运行这个hello
如果真要死折腾https://blog.csdn.net/qiaoliang328/article/details/4866367这个博客看下,
不过我操作过程发现有点不一样